我用来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
运行显示我有一个具有特定 IP 地址的ifconfig
新网络接口。tun0
问题:如何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
答案1
决定 TCP 数据包应该通过哪个接口的不是 ssh 客户端,而是内核。简而言之,SSH 要求内核打开到某个 IP 地址的连接,内核通过查询路由表来决定使用哪个接口。
(下面假设您使用的是 GNU/Linux;所有 Unices 的一般概念都是相同的,但要运行的命令的细节和输出格式化的方式可能会有所不同。)
您可以使用以下命令显示内核路由表 路线-n和/或 ip路由显示。
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 中的主机(即地址 192.168.122.0 到 192.168.122.255)的连接根据CIDR 表示法) 网络将通过接口路由virbr0
;那些到 169.254.0.0/16 和 10.30.0.0/24 的将通过eth0
,而其他任何东西(0.0.0.0 线)将通过 eth0 路由到网关主机10.30.0.1。
答案2
我不知道它是什么时候引入的,但是 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.
不如能够选择界面,但也接近了。
例子:
ssh -b interface-ip remote-ip
ssh -b 10.11.22.40 10.11.22.38
答案3
如果您使用网络管理器来管理 Internet 连接(这是许多系统上的默认管理器),您可能需要同时安装openconnect
和network-manager-openconnect
。
为网络管理器安装 OpenConnect 插件后,打开网络管理器并单击+左下角的图标。应该给你一个带有选项的组合框VPN然后能够选择OpenConnect 兼容 VPN。
通过使用 Network Manager 与 OpenConnect 交互,您的路由将自动显示并帮助您连接到 VPN。这对于通过 VPN 访问服务器特别有帮助,例如如何消防主机做事。