如何通过特定接口将流量发送到特定IP地址?

如何通过特定接口将流量发送到特定IP地址?

在 Debian Stretch VM(在 Windows 7 主机上的 VirtualBox 中运行)上,我想通过 SSH 连接到特定的远程主机(我们称其myServer为 IP 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考虑到我的源地址是动态的?

相关内容