首页 新闻 会员 周边 捐助

机房两台主机,只有一个公网IP,只有一个交换机没有路由如何让所有机器都可访问公网?

0
悬赏园豆:50 [已解决问题] 解决于 2023-11-21 09:09

在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 。

但是,网上找了好多方案,配置总是不成功,网上的步骤不一定是错的,但好像都不全面。

没有全面解决以下几个问题

  1. 如何将外部请求转发到 111 上
  2. 如何将111上发起的请求通过 105 转到公网目标上
  3. 111 上 DNS 如何解决

求园子里的大神给个详细的配置方法和步骤。

不要问为什么公网IP不够用、没有路由器、没有三层交换机,没有网关之类的,无它,就是穷。

Adming的主页 Adming | 初学一级 | 园豆:119
提问于:2023-05-30 17:27
< >
分享
最佳答案
0

如果你想让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规则和其他网络配置。

收获园豆:20
Technologyforgood | 大侠五级 |园豆:7775 | 2023-05-30 22:43

谢谢,找个时间验证一下再行回复

Adming | 园豆:119 (初学一级) | 2023-05-31 08:52
其他回答(2)
0

参考园子里的博文:CentOS 7配置成网关服务器

收获园豆:10
dudu | 园豆:29333 (高人七级) | 2023-05-30 17:34

谢谢dudu,先前也有参考这篇文章来的,没成功,不知道那里出了问题,可能那里弄错了或遗漏了什么

支持(0) 反对(0) Adming | 园豆:119 (初学一级) | 2023-05-31 08:56
0

通过 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

收获园豆:20
小九九呀 | 园豆:383 (菜鸟二级) | 2023-06-17 20:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册