我目前有两台服务器,两个都服务器有(并且正在使用)两个端口。简而言之,我需要将其中一台服务器的默认网关从其默认eth0
地址/网关更改为内部eth1
地址,从而有效地将另一台服务器用作路由器/网关。
我使用的流程不起作用 - 当我将第二台服务器上的默认路由更改为第一台时,互联网/eth0
访问停止(但本地网络/eth1
访问继续)。我做错了什么?
附注:由于非常烦人的商业政治,服务器不能移至另一个交换机或类似设备(我更喜欢这样,但遗憾的是我没有权限)。
因此,第一台服务器(我将其称为服务器 A)具有以下内容(其中 XXXX 是公共 IP 地址,GGGG 是网关):
:~# ip route show
default via G.G.G.G dev eth0 onlink
10.11.0.0/16 dev eth0 proto kernel scope link src 10.11.0.8
10.130.0.0/16 dev eth1 proto kernel scope link src 10.130.12.252
X.X.X.X/XX dev eth0 proto kernel scope link src X.X.X.X
此外,服务器A已设置为允许IP转发:
:~# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
:~# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy DROP)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
LOG all -- anywhere anywhere LOG level warning
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
:~# cat /etc/iptables/rules.v4
*nat
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -o eth1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -i eth1 -o eth0 -j ACCEPT
-A FORWARD -j LOG
COMMIT
现在,在第二台服务器上 -服务器B- 执行后ip route replace default via 10.130.12.252 dev eth1 onlink
显示以下内容(其中 YYYY 是该服务器的公共 IP 地址):
:~# ip route show
default via 10.130.12.252 dev eth1 onlink
10.46.0.0/16 dev eth0 proto kernel scope link src 10.46.0.7
10.130.0.0/16 dev eth1 proto kernel scope link src 10.130.112.24
Y.Y.Y.Y/YY dev eth0 proto kernel scope link src Y.Y.Y.Y
这又导致服务器B失去所有互联网访问(不仅仅是 DNS -ping 8.8.8.8
挂在服务器 B 上,但继续在服务器 A 上工作),但它仍然可以访问网络10.130.0.0/16
)。将默认路由更改回 GGGG 可恢复互联网访问。
我做错了什么?我怎样才能让它正常工作?