![使用 RJ-45 电缆和 iptables 连接两台服务器(无需交换机!)](https://linux22.com/image/637862/%E4%BD%BF%E7%94%A8%20RJ-45%20%E7%94%B5%E7%BC%86%E5%92%8C%20iptables%20%E8%BF%9E%E6%8E%A5%E4%B8%A4%E5%8F%B0%E6%9C%8D%E5%8A%A1%E5%99%A8%EF%BC%88%E6%97%A0%E9%9C%80%E4%BA%A4%E6%8D%A2%E6%9C%BA%EF%BC%81%EF%BC%89.png)
我有两台服务器,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
链有两个规则,但第一个规则与每个数据包匹配,因此第二个规则从未被使用。
其次,您的SNAT
和MASQUERADE
规则只应适用于离开的数据包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_arp
eth0
通过这种组合,您将真正将 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