如何将我的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)。