我想通过 IP 别名 94.23.94.161 手动设置到子网 95.168.0.0/16 的路由。IP 别名设置如下:
/sbin/ifconfig eth0:0 94.23.94.161 netmask 255.255.255.255 broadcast 94.23.94.161
一开始我尝试过这样的事情:
route add -net 95.168.0.0 netmask 255.255.0.0 gw 94.23.94.161 dev eth0
一切工作正常,直到我收到数据中心发来的一封电子邮件,说我的 IP 地址发送了错误的 ARP 数据包:
Wed Jun 6 08:07:15 2012 : arp who-has 95.168.204.130 tell 94.23.94.161
Wed Jun 6 08:37:13 2012 : arp who-has 95.168.204.130 tell 94.23.94.161
Wed Jun 6 09:07:19 2012 : arp who-has 95.168.204.130 tell 94.23.94.161
与他们的支持人员的对话毫无结果,现在我仍在尝试修复这个问题。另一个有效的设置(但仍然发送这些错误的 ARP 数据包)是:
ip route add 95.168.0.0/16 via 94.23.94.161
我认为这个内部工作原理是一样的。
接下来我尝试通过 iptables 和 SNAT 配置路由。我启用了 ip-forwarding 并尝试了不同的疯狂操作,例如:
iptables -t nat -A POSTROUTING -s 94.23.94.161 -o eth0 -j SNAT --to-source 95.168.0.0-95.168.255.255
iptables -t nat -A POSTROUTING -s 94.23.94.161 -o eth0 -j SNAT --to-source 95.168.0.0-95.168.255.254
iptables -t nat -A POSTROUTING -s 95.168.0.0/16 -o eth0 -j SNAT --to 94.23.94.161
iptables -t nat -A PREROUTING -p tcp -d 94.23.94.161 -j DNAT --to-destination 95.168.0.0-95.168.255.254
这些都没有改变路由。有人能给我一些建议,如何在不发送多余/错误的 ARP 数据包的情况下更改到此子网的路由吗?
答案1
据我理解,您的问题94.23.94.161
是您的 LAN 上您要路由数据包的某台机器的 IP 地址95.168.0.0/16
。如果正确,则两个路由语句中的任何一个都可以完成这项工作。只需删除别名eth0:0
接口即可。这是当地的分配给的 IP 地址这机器。
答案2
ip addr add 94.23.94.161/32 brd 94.23.94.161 dev eth0
ip route add 95.168.0.0/16 src 94.23.94.161 via 176.31.243.253
ip neigth flush
其中 176.31.243.253 是网关