这是我的 ifconfig 文件:http://pastebin.com/5ZUGYbnB
auto eth0
iface eth0 inet static
address 180.xxx.xx.68
netmask 255.255.255.248
network 180.xxx.xx.64
broadcast 180.xxx.xx.71
gateway 180.xxx.xx.65
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 180.xxx.xx.65 8.8.8.8
auto eth1
iface eth1 inet static
address 10.96.92.23
netmask 255.255.255.0
network 10.96.92.0
broadcast 10.96.92.255
gateway 10.96.92.1
dns-nameservers 10.96.92.11
up route add -net 10.86.82.0 netmask 255.255.255.0 gw 10.96.92.1
down route del -net 10.86.82.0 netmask 255.255.255.0 gw 10.96.92.1
这是我的路由表http://pastebin.com/VVwCe7ZF
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
180.xxx.xx.64 0.0.0.0 255.255.255.248 U 0 0 0 eth0
10.86.82.0 10.96.92.1 255.255.255.0 UG 0 0 0 eth1
10.96.92.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
0.0.0.0 180.xxx.xx.65 0.0.0.0 UG 100 0 0 eth0
0.0.0.0 10.96.92.1 0.0.0.0 UG 100 0 0 eth1
但它没有将任何数据包转发到另一个网络。我的路由表有问题吗?
答案1
首先,您有两条默认路线。在某些情况下可能会出现这种情况,但这不太可能是您想要的。
通常会使用一条默认路由,我猜您想使用该 180.x 网络上的默认网关。
从 eth1 定义中删除网关行。
要检查的另一件事是/proc/sys/net/ipv4/ip_forward
已启用:
cat /proc/sys/net/ipv4/ip_forward
并检查是否得到 1,而不是 0。
如果没有,你需要启用它,最好的方法是编辑/etc/sysctl.conf
和设置net.ipv4.ip_forward=1
这将使转发正常工作,但如果此时仍然不起作用(如果没有更好地描述您想要实现的目标,很难说出您的要求是什么),您可能需要使用 iptables 研究 netfilter SNAT 或 MASQ。
答案2
不要忘记:
iptables -P FORWARD ACCEPT
答案3
如果有答案就太好了,我也在研究 Linux 路由器。这似乎不像说那么简单:
net.ipv4.ip_forwarding=1 iptables -P 转发 -j 接受
从重新启动状态开始,如果该路由表是重新启动状态路由:
sudo route del default eth0 sudo route del default eth1 sudo route 添加默认 gw $GATEWAY $IFACE sudo route del -net 10.96.92.0 网络掩码 255.255.255.0 sudo route add -net 10.96.92.0 网络掩码 255.255.255.0 gw 10.96.92.1 eth1 sudo route del -net 180.xx64 网络掩码 255.255.255.248 sudo route add -net 180.xx64 网络掩码 255.255.255.248 gw 180.xx65 eth0
因此,这将是一个非常硬编码的路由表,$GATEWAY 是网关的 IP 地址,它知道如何处理目的地不是表中的目标,并且 $IFACE 是此路由器所在的 eth0 或 eth1 或另一个接口(如 ppp0)。如果 10.96.91.1 或 180.xx65 是这些路由器之一,则可以通过放置或保留默认路由来简化此路由表。
这只会有帮助这机器找到并路由它的路径。据我所知,你需要防火墙sudo iptables帮助转发。它也不是持久的(重启后)...有很多方法,我想你已经用过其中一种了。