使用 RJ-45 电缆和 iptables 连接两台服务器(无需交换机!)

使用 RJ-45 电缆和 iptables 连接两台服务器(无需交换机!)

我有两台服务器,server_1 连接到 eth0 处的 INTERNET 端口(服务器群的)。没有交换机。它们通过电缆从 (server_1)eth1 -> (server_2)eth0 连接:

ifconfig of (server_1):
eth0    inet addr:199.203.51.24,
eth0:1  inet addr:212.235.19.200,
eth1 inet addr:10.0.0.1

ifconfig of (server_2):
eth0   inet addr:10.0.0.2

我想将 server_2 与 server_1 一起连接到互联网,并从 (server_1)eth0 的网关为他获取一个静态 IP 地址。

尝试在(server_2)上使用 iptables,如下所示:

iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.0.0.2 -j SNAT --to-source 212.235.19.203
iptables -t nat -A PREROUTING -d 212.235.19.203 -j DNAT --to-destination 10.0.0.2

而掩码 IP 是 212.235.19.203 。这只对世界有效,但是!!在 server_2 内部尝试 ping 212.235.19.203 却不起作用!

答案1

您的iptables规则在多个方面被破坏。首先,您的POSTROUTING链有两个规则,但第一个规则与每个数据包匹配,因此第二个规则从未被使用。

其次,您的SNATMASQUERADE规则只应适用于离开的数据包eth0

但由于212.235.19.203只分配给一台机器,所以最好根本不要使用 NAT。

另一种解决方案是让当前分配的主机10.0.0.2实际212.235.19.203分配给物理网络接口(带有网络掩码255.255.255.255)。网关需要一条静态路由,指示212.235.19.203/32本地连接到。此外,您可以在上eth1打开。proxy_arpeth0

通过这种组合,您将真正将 IP 地址路由到目标主机,这将使一切工作得更好。您可以避免该 IP 的 NAT 规则,FORWARDING如果您需要防火墙,您仍然可以过滤链中的流量。

答案2

我想您已经像您说的那样在 (server_1) 而不是 (server_2) 上尝试了 iptables。

这里的问题是 (server_2) 不知道它必须回答目的地为 212.235.19.203 的数据包。

一个可能的解决方案是在(server_2)中使用以下内容:

iptables -t nat -I PREROUTING -d 212.235.19.203 -j REDIRECT

相关内容