如何透過特定介面將流量傳送到特定IP位址?

如何透過特定介面將流量傳送到特定IP位址?

在 Debian Stretch VM(在 Windows 7 主機上的 VirtualBox 中運行)上,我想透過 SSH 連接到特定的遠端主機(我們稱之為myServerIP 12.34.56.78)。為此,我使用 Android 智慧型手機作為 USB 調製解調器,效果很好:我可以訪問互聯網並產生一些「ping」和 HTTP/HTTPS 流量,甚至可以使用以下命令打開 SSH 連接:

ssh [email protected] -b a.b.c.d -p portNumber -i ~/.ssh/id_rsa

注意:a.b.c.d是連接時分配給我的 USB 介面的動態 IP 位址

為了讓事情變得更容易,我想擁有所有這些設置,~/.ssh/config這樣我只需輸入ssh myServer

Host myServer
    HostName 12.34.56.78
    Port portNumber
#   BindAddress a.b.c.d     <== commented because this is part of the question
#   BindInterface usb0      <== same as above
    User httqm
    IdentityFile ~/.ssh/id_rsa
  • 我可以取消註釋該BindAddress行並指定 IP 位址,這可以工作,但與完整的 SSH 命令行相比沒有提供任何增益,因為它a.b.c.d是動態的
  • 使用綁定介面選項(不帶BindAddress)失敗並顯示錯誤訊息:

    ~/.ssh/config: line 154: Bad configuration option: bindinterface
    ~/.ssh/config: terminating, 1 bad configuration options
    

由於該BindInterface指令是由 Openssh 7.7 引入的(https://www.openssh.com/releasenotes.html)而我有:

$ dpkg -l openssh-client
openssh-client      1:7.4p1-10+deb9u6

為了解決這個問題,我正在考慮幾個解決方案:

  1. 使用指令定義一條路線ip route ...,以便所有目標都myServer透過 USB 介面。到目前為止,我已經嘗試過這樣的命令:

    ip route add to 12.34.56.78 protocol static dev usb0
    

該命令本身沒有返回錯誤,但我無法打開 SSH 連接ssh myServer,我什至無法 ping 它。

  1. 定義 Netfilter 規則,以便所有進出 12.34.56.78 的流量都通過 usb0 介面。那行得通嗎?我應該研究這個解決方案嗎?

  2. openssh-client從向後移植升級(如果可用)

您能否解釋一下哪些可行/不可行(以及為什麼)?您建議如何實現我的目標,即使用簡短的命令列連接到我的 SSH 主機,例如ssh myServer考慮到我的來源位址是動態的?

相關內容