如何将我的linux机箱设置为转发ip数据包的路由器?

我正在进行有关ip数据包转发的网络实验,但我不知道它为什么会起作用。

我有一台带有两个网络接口的linux机器,eth0和eth1都带有静态IP地址(eth0:192.168.100.1,eth1:192.168.101.2)。

我的目标很简单,我只想将来自eth1的ip数据包从子网192.168.100.0/24中的目的地转发到eth0,并将来自eth0的ip数据包转发到子网192.168.101.0/24中的目的地到eth1。

我开启了ip转发:

sysctl -w net.ipv4.ip_forward=1 

我的路由表是这样的:

 # route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.100.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 192.168.101.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 

但是,当我尝试从192.168.100.25 ping到192.168.101.47时,它不起作用。

您需要使用iptables命令添加转发规则 ,如下所示:

 modprobe iptable_nat echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -A FORWARD -i eth1 -j ACCEPT 

有关详细信息,请参阅man iptables ,或在Internet上搜索howto文章,例如如何在基于Linux的计算机上设置NAT路由器

这是Linux IP Masquerade HOWTO ,详细讨论了该主题。

您还应该确保没有其他规则(例如在FORWARD链中)覆盖上述ACCEPT规则。 如果有,您可能想要删除它们。

您需要添加到192.168.100.25和192.168.101.47的路由。

如果您的转发服务器具有IP 192.168.100.1和192.168.101.1,您将添加客户端192.168.100.25

 ip route 192.168.101.0/24 via 192.1268.100.1 

并在客户端192.168.101.47

 ip route 192.168.100.0/24 via 192.168.101.1 

(这只适用于转发启用,没有iptables)。