如何将我的Linux机顶盒设置为路由器以转发IP数据包?


25

我正在进行有关IP数据包转发的网络实验,但是我不知道为什么它能工作。

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

我的目标很简单,我只想将192.168.10.0/24子网中的eth1的IP数据包转发到eth0,并将目的192.168.101.0/24子网中的eth0的IP数据包转发到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时,它不起作用。

Answers:


23

您需要使用以下命令添加转发规则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规则。如果有,则可能要删除它们。


我不知道为什么,但是仍然不起作用。我已经将iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT和都添加iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT到了表中。而我的INPUT,OUTPUT和FORWARD策略都是ACCEPT
Yishu Fang

有很多事情可能配置错误。例如,您的主机的IP应该在“内部”网络中的主机上指定为“网关IP”,因此他们知道,如果IP不在其“本地”网络范围内,则需要将数据包发送到您的网关机器。这类似于将ADSL路由器注册为LAN中主机网关的常规设置
Sergey 2012年

当我traceroute在主机上使用它时,它表明该数据包到达了“路由器”(192.168.100.1),但没有任何其他作用。
Yishu Fang

1
@UniMouS:似乎我忘记了MASQUERADE的东西-我已经编辑了答案,并添加了指向文章的新链接。
谢尔盖(Sergey)2012年

2

您需要同时添加到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的情况)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.