在IDC机房托管服务器12台,但公网IP数量不够每一台服务器都分配一个公网IP,假设地址为101.200.233.115 - 101.200.233.120 。
没有路由器,只有一台普通的交换机(非三层交换机),所有机器都连接到这台交换机。
有公网IP的机器,都是直接在操作系统上配置公网IP和使用运营商公网IP段为1的IP(101.200.233.1)为网关访问网络的。
内网互通,因为没有路由(网关),仅将机器内网IP设置为同一网段,比如 192.168.0.x 即可互相访问,网关可以不设置。
所有绑定网IP的机器,都有两个IP,且在同一网口上,分别用于访问公网和局域网。
比如这样:
192.168.0.100 + 101.200.233.115(网关101.200.233.1)
192.168.0.101 + 101.200.233.116(网关101.200.233.1)
192.168.0.102 + 101.200.233.117(网关101.200.233.1)
192.168.0.103 + 101.200.233.118(网关101.200.233.1)
192.168.0.104 + 101.200.233.129(网关101.200.233.1)
192.168.0.105 + 101.200.233.120(网关101.200.233.1)
所有没有公网IP的机器,只有一个内网Ip
比如这样:
192.168.0.106
192.168.0.107
192.168.0.108
192.168.0.109
192.168.0.110
192.168.0.111
现在,我想 192.168.0.111 的机器通过 192.168.0.105(101.200.233.120)的机器代理访问网络有什么方法?
注:105、111 均为 centos7.9 的系统,均装有docker(docker和centos7自带的Firewalld有一定冲突,无法很好的配置NAT,所以禁用了,改为了使用 iptables了 )
我的想法是通过 105 的iptables 做 NAT 转发,在111 上将网关设置为 192.168.0.105 。
但是,网上找了好多方案,配置总是不成功,网上的步骤不一定是错的,但好像都不全面。
没有全面解决以下几个问题
求园子里的大神给个详细的配置方法和步骤。
不要问为什么公网IP不够用、没有路由器、没有三层交换机,没有网关之类的,无它,就是穷。
如果你想让192.168.0.111的机器通过192.168.0.105(101.200.233.120)的机器代理访问网络,可以使用iptables进行NAT转发。以下是一个详细的配置方法和步骤:
在192.168.0.105(101.200.233.120)的机器上执行以下步骤:
启用IP转发:
编辑/etc/sysctl.conf文件,找到以下行并取消注释(去掉行首的#符号):
Copy code
net.ipv4.ip_forward=1
保存文件并执行以下命令使配置生效:
css
Copy code
sudo sysctl -p
配置iptables规则:
执行以下命令配置iptables规则,将外部请求转发到192.168.0.111的机器上:
css
Copy code
sudo iptables -t nat -A PREROUTING -i <外部接口> -p tcp --dport <端口号> -j DNAT --to-destination 192.168.0.111:<目标端口号>
sudo iptables -t nat -A POSTROUTING -o <内部接口> -d 192.168.0.111 -j MASQUERADE
替换以下参数:
<外部接口>:连接到公网的网络接口,例如eth0。
<端口号>:外部请求的目标端口号。
<内部接口>:连接到内网的网络接口,例如eth1。
<目标端口号>:转发到192.168.0.111的机器上的目标端口号。
例如,如果要将外部请求的80端口转发到192.168.0.111的机器上的80端口,命令将如下所示:
css
Copy code
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.111:80
sudo iptables -t nat -A POSTROUTING -o eth1 -d 192.168.0.111 -j MASQUERADE
注意:如果你使用的是UDP协议,请将-p tcp替换为-p udp。
保存iptables规则:
arduino
Copy code
sudo sh -c "iptables-save > /etc/sysconfig/iptables"
在192.168.0.111的机器上执行以下步骤:
将网关设置为192.168.0.105:
编辑/etc/sysconfig/network-scripts/ifcfg-<内网接口>文件,将以下行添加或修改为:
makefile
Copy code
GATEWAY=192.168.0.105
保存文件。
配置DNS解析:
编辑/etc/resolv.conf文件,将以下行添加或修改为:
php
Copy code
nameserver <DNS服务器IP>
将<DNS服务器IP>替换为你要使用的DNS服务器的IP地址。如果你不知道DNS服务器的IP地址,可以使用公共DNS服务器,例如8.8.8.8(Google DNS)或1.1.1.1(Cloudflare DNS)。
保存文件。
测试代理访问:
重新启动网络服务:
Copy code
sudo systemctl restart network
确保192.168.0.111的机器可以通过192.168.0.105代理访问公网。你可以尝试使用ping命令测试网络连接:
php
Copy code
ping <目标IP>
将<目标IP>替换为你要访问的公网IP地址。
通过以上步骤,你应该能够让192.168.0.111的机器通过192.168.0.105(101.200.233.120)的机器代理访问公网。确保按照实际网络配置进行参数替换,并根据需要调整iptables规则和其他网络配置。
谢谢,找个时间验证一下再行回复
通过 iptables 做 NAT 转发是您的一个好选择,以下是一种可能的配置方法。建议在配置过程中先备份好原始设置,以免产生不必要的问题。
首先,您需要在 105 机器上进行 NAT 配置。假设网口的名称为 eth0,101.200.233.120 为公网IP,192.168.0.0/24 为内网IP段,那么您可以在 105 上运行以下命令:
# 开启网络转发
sysctl -w net.ipv4.ip_forward=1
# 清空已有规则
iptables -t nat -F
iptables -t nat -X
# 打开MASQUERADE规则
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
上述命令中,第一条命令用于启用网络转发功能;第二条命令用于清空已有的 NAT 规则;第三条命令则是下行数据报进行 DNAT(目标地址转换)时,与这个转换相关联的连接并不在 NAT 表中,因此需要打开MASQUERADE 规则。
在完成 NAT 配置后,您需要将111机器的网关设置为 192.168.0.105 ,确保111机器的出口数据能够流向 105。另外,如果 111 机器需要使用 DNS 服务,需要在 111 上配置 DNS