我有一个 Linux 机箱,它在两个网络 XX3.0 和 XX4.0 之间路由,我希望它能够将这些网络连接到互联网。
我读过了这里@Kevin 的精彩回答指出,为了能够做到这一点,我必须使用 NAT,也就是 iptables,我现在的服务器不使用 iptables,所以我需要找到正确的命令来启用它。
我的网络可以这样描述:
Internet <-(eth0) Linux Router <-[1](eth1) 192.168.3.0 <--[2](eth2) 192.168.4.0
eth2 直接连接到路由器。
两个本地网络可以相互通信,但没有人可以 ping 到公共 IP 地址。当我向 .3.x 网络中的一台机器上的公共 IP 地址发出 ping 命令时,我尝试嗅探路由器中的数据包,但据我所知,存在问题,并且似乎存在 eth0 int 的无休止的 ARP 请求,询问谁拥有 3.x IP 地址。似乎我也必须在路由器上启用 NAT 才能像 NAT 一样运行。我进行了搜索,但找不到需要使用 iptables 发出的正确命令,尽管我确实尝试了提到的命令这里和这里。我有能力在两个本地网络之间进行路由,而根本不需要使用 iptables,而且由于我不需要它,我宁愿不使用它,除非没有它就无法进行 NAT(在这种情况下,我更喜欢 iptable 而不是任何其他程序)。
总结一下这个问题:1. 我需要三个网络都能互相通信。2. 我宁愿不使用 iptables(如果可能的话)或任何其他附加程序。3. 就这些。
谢谢。
答案1
两个本地网络可以互相通信意味着您已启用 ip_forward。如果本地网络无法 ping 通公共 IP 地址,则意味着您需要进行伪装。
您能从这个 Linux 机器 ping 通公共 IP 地址吗?如果不能,那么肯定是其他问题。也许您需要将路由器设置为桥接模式(这只是猜测)。
我假设您的 Linux 机器可以 ping 通公共 IP,并且 eth0 上配置了公共 IP。因此,您的内部网络机器无法使用私有 IP 地址访问互联网,因此您需要进行网络地址转换。尝试使用 iptables,因为它非常简单。
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
如果您的系统上没有安装 iptables。 一定默认安装了一些防火墙。 您使用的是哪个发行版?
答案2
私有 IP 地址不适用于互联网,且无法路由。它们只能在本地使用。
要启用 Internet 访问,您需要启用 IP 转发,从您的描述来看这似乎是可以做到的。其次,您需要使用 NATing。大多数情况下,您的 ISP 会为您进行 NATing。这可能会根据连接类型和分配的 IP 而改变。
对于工具来说,我认为在Linux下没有比iptables更好的工具可以做到这一点。
答案3
经过一些研究以及听取了大家的建议后,我得出结论:iptable 是进行 NAT(伪装)的最佳方式,因此我按如下方式进行操作:
#使用以下命令刷新所有当前 iptables 设置:
$>iptables -F
和
$>iptables -t nat -F
然后尝试在本地网络之间 ping 通,它应该与 iptables 的默认值一起工作,如果它不输入这个:
$>iptables -P INPUT ACCEPT
$>iptables -P FORWARD ACCEPT
$>iptables -P OUTPUT ACCEPT
然后从@Sachin Divekar 发出上述命令(将 ethX 替换为您的互联网连接接口):
$>iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
测试一下,它应该可以工作。然后你应该使用以下命令保存此设置:
$>iptables-save > /etc/sysconfig/iptables
完毕。