我有多个网络适配器,需要能够指定我的套接字使用哪个适配器进行出站连接,以便我可以将一个或多个套接字绑定到每个网络。我查看了这个问题的其他答案,但似乎无法让它发挥作用。
将套接字绑定到IP address
我想要连接的适配器不起作用。
SO_BINDTODEVICE
似乎也不起作用,尝试传递适配器名称或适配器索引,调用成功但套接字无法连接。我找不到一个完整的示例来SO_BINDTODEVICE
阐明正确的用法。
使用上述方法的症状是服务器接收到连接,但connect()
客户端失败并显示错误代码 2 (?)。我了解到需要使用 ip route 来确保回复数据包通过接收数据包的同一适配器发送,但似乎无法正确使用 ip route 命令。
The tables Teth0 and Twlan0 have been added.
For eth0, the IP address is 192.168.1.23, the gateway is 192.168.1.1
For wlan0, the IP address is 192.168.2.100, the gateway is 192.168.2.1
ip route add 192.168.1.1/32 dev eth0 src 192.168.1.23 table Teth0
ip route add default via 192.168.1.1 table Teth0
ip rule add from 192.168.1.23 table Teth0
ip route add 192.168.2.1/32 dev wlan0 src 192.168.2.100 table Twlan0
ip route add default via 192.168.2.1 table Twlan0
ip rule add from 192.168.2.100 table Twlan0
ip 路由刷新缓存
我m using
在 GumStix Overo (Omap3) 上打开嵌入式 Linux 2.6.36。
我在这里快要疯了,任何建议都将不胜感激;)
答案1
您正在尝试定义两条通往外界的默认路由。您应该只有一个默认网关/路由。
很可能正在发生以下情况:
Linux 上有一些质量适中的工具可以帮你解决这个问题,但是它们不适用于静态 IP 地址,而且绝对不适用于糟糕的路由表。