我的家庭服务器有两个接口,分别名为 eth0 和 eth1。eth0 直接连接到传入 WAN 端口,因此 eth0 的网关根据 ISP 的 DHCP 服务器确定。eth1 连接到我的路由器,而路由器又连接到另一个 WAN 端口。
以下是输出netstat -rn
(111.111.111.126 是模拟公共地址):
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 111.111.111.126 0.0.0.0 UG 0 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
111.111.111.126 0.0.0.0 255.255.255.128 U 0 0 0 eth0
我希望能够自由地选择一个用于传出连接的接口,但不知道如何做。curl www.google.com --interface eth1
应该通过 eth1 连接到 www.google.com,它在当前配置下失败。route add default gw 192.168.0.1
修复了这个问题,但随后就curl www.google.com --interface eth0
中断了。
答案1
不确定您的目的是什么,但听起来像是一个负载平衡问题。此页面提供了一些有关设置多个路由表以利用多个互联网连接的指导: Linux IP 层网络管理指南,第 10.4 节
请注意,此方法使用源 IP 地址来选择出站连接。如果您将服务器的套接字绑定到特定接口,这仍然可以在单个服务器系统上工作。例如,Apache 绑定到 eth0 的 IP,bittorrent 绑定到 eth1 的 IP。并非所有服务器都会提供执行此操作所需的配置挂钩,但许多服务器都会提供 - 甚至 Minecraft!;)
答案2
这有点棘手。您需要确保任何单个 TCP 流仅通过单个接口发出。否则,连接的另一端将看到来自不同来源的数据包,这将中断连接。
阅读以下两页:
http://kindlund.wordpress.com/2007/11/19/configuring-multiple-default-routes-in-linux/
和
他们应该帮忙。