我寫了一個小型應用程序,需要通過機器上的多個網絡接口之一進行連接。該界面不是「默認」界面(具有默認路徑的界面)。是否可以將出站TCP套接字直接綁定到特定接口?跳過傳出連接的默認路由
下面是一個例子:
eth0: 192.168.1.10, gateway 192.168.1.1
eth1: 192.168.2.10, gateway 192.168.2.1
default gateway: 192.168.1.1
(both interfaces can reach the Internet through different external IPs)
現在,我想我用eth1
應用程序連接到外部服務器,即使系統被配置爲使用eth0的外部流量。
(問題可能是微不足道的,但我只是想知道是否有可能在所有花費時間之前)
目前,我正在使用Python與扭曲,但如果我必須使用BSD套接字那麼就這樣吧。
將套接字綁定到特定的接口(或至少一個特定的IP地址)是相當簡單的 - 結果是套接字只能建立可以路由到該IP地址的連接..但是,你的意思是「但我想通過互聯網使用該網關」?哪個網關? – nos
我編輯了我的問題以進行澄清,請參閱最新的問題。謝謝! – Krumelur
路由是在OS TCP/IP堆棧級完成的,而不是在Socket API級別完成的,因此,基本上,在您的配置中,系統不知道如何通過eth1訪問Internet。您可以在操作系統級別啓用多個默認網關(http://kindlund.wordpress.com/2007/11/19/configuring-multiple-default-routes-in-linux/),在這種情況下,套接字API應該使用它(但我從來沒有用過這樣的設置,所以不能向你保證) –