将ssh与特定的网络接口配合使用


37

openconnect用来连接到VPN。输入凭据后,我得到以下信息:

POST https://domain.name/...
Got CONNECT response: HTTP/1.1 200 OK
CSTP connected. DPD 30, Keepalive 30
Connected tun0 as xxx.xxx.xxx.xxx, using SSL
Established DTLS connection

运行ifconfig显示我有一个tun0具有特定IP地址的新网络接口。

问题:如何ssh仅使用网络接口,tun0以便可以访问该专用网络上的计算机?

编辑:

我的网络配置(route -n)似乎是这样的:

172.16.194.0    0.0.0.0         255.255.255.0   U     0      0        0 vmnet8
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
172.16.25.0     0.0.0.0         255.255.255.0   U     0      0        0 vmnet1
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 eth0
0.0.0.0         192.168.0.1     0.0.0.0         UG    100    0        0 eth0

您能否详细说明您的网络配置?有了适当的路由,发往tun0的网络的任何流量都将使用该接口。
Eli Heady

Answers:


45

不是ssh客户端决定TCP数据包应该通过哪个接口,而是内核。简而言之,SSH要求内核打开与某个IP地址的连接,然后内核通过查询路由表来决定要使用哪个接口。

(以下内容假定您使用的是GNU / Linux;所有Unices的基本概念相同,但是要运行的命令的具体细节以及格式化输出的方式可能会有所不同。)

您可以使用route -n和/或 ip route show命令显示内核路由表 。

OpenConnect应该为tun0接口添加了一行;与该行匹配的任何地址的连接都将通过该接口进行路由。例如,route -n在笔记本电脑上运行,我得到以下输出:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.30.0.1       0.0.0.0         UG    0      0        0 eth0
10.30.0.0       0.0.0.0         255.255.255.0   U     1      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 eth0
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

这意味着将通过接口路由与192.168.122.0/24(即,根据CIDR表示法从 192.168.122.0到192.168.122.255 )的主机的连接virbr0;到169.254.0.0/16和10.30.0.0/24的那些将通过eth0,其他任何内容(0.0.0.0行)将通过eth0路由到网关主机 10.30.0.1。


感谢您为我澄清这一点-似乎openconnect没有为tun0界面添加一行。我想我应该手动执行此操作。
axel22 2011年

1
@ axel22您可以在此处查看:bbs.archlinux.org/viewtopic.php?id=69064,该脚本使用openconnect并设置路由。
Riccardo Murri

@RiccardoMurri你想回答我的问题
拉胡尔·高塔姆

6

我不知道它是何时引入的,但是RHEL7上的OpenSSH客户端在其联机帮助页中有以下内容:

 -b bind_address
         Use bind_address on the local machine as the source address of the connection.  Only useful on systems with more than one address.

不如能够选择界面,而是关闭。


还有-B标志,它似乎允许指定要使用的网络接口的名称。
亨里克(Henrik)'18

-b bind_address某种程度上,该选项对我不起作用。暂时更改路线应该可以。顺便说一句:该-B选项在Ubuntu随附的SSH版本上不存在。
约翰

2

如果您使用网络管理器来管理Internet连接(许多系统中的默认管理器),则可能要同时安装openconnectnetwork-manager-openconnect

为网络管理器安装OpenConnect插件后,打开网络管理器并单击+左下方的图标。应该给您提供一个带有选项VPN的组合框,然后可以选择OpenConnect Compatible VPN

通过使用网络管理器与OpenConnect进行接口,您的路由将自动显示并帮助您连接到VPN。这对于通过VPN访问服务器(例如FireHost的工作方式)特别有用。


1

只是增加一个答案。您可以使用-b标志并在访问时定义源IP。

格式+示例

ssh -b interface-ip remote-ip
ssh -b 10.11.22.40 10.11.22.38 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.