我有两台计算机连接到同一个路由器10.9.8.1
:
- 计算机 A
10.9.8.2
运行 Windows 10 Insider Preview。 Insider Preview 的 VPN 已损坏且无法回滚。 :( - 计算机 B
10.9.8.3
运行 Linux Mint,并通过 建立 VPN 连接openconnect
。
以下是ipconfig
有关 B(片段)的报道:
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.23.8.183 P-t-P:10.23.8.183 Mask:255.255.255.255
inet6 addr: fe80::7fb2:5598:b02e:e541/64 Scope:Link
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1410 Metric:1
RX packets:24 errors:0 dropped:0 overruns:0 frame:0
TX packets:42 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:7005 (7.0 KB) TX bytes:3243 (3.2 KB)
wlp3s0 Link encap:Ethernet HWaddr 60:67:20:36:6f:a4
inet addr:10.9.8.3 Bcast:10.9.8.255 Mask:255.255.255.0
inet6 addr: fe80::8e96:7526:ff54:d1be/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:22511502 errors:0 dropped:0 overruns:0 frame:0
TX packets:16052631 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:24451442281 (24.4 GB) TX bytes:6038264731 (6.0 GB)
我需要从计算机 A 访问 VPN 背后的资源。
我正在考虑在 A 上配置路由,以便它可以通过 B 访问 VPN 资源,同时直接使用路由器进行其他操作。
在最坏的情况下,我可以直接连接两台计算机,但如果可能的话我想避免这种情况。
在 Windows 上,我可以简单地将任何适配器标记为共享。但是当我在 Linux 上执行相同的操作时,适配器会失去连接。不知道如何正确地做到这一点。
答案1
路由
在主机上,A
您需要将目标网络的所有流量路由到主机B
。我会假设这就像192.168.0.0/24
对于 Linux(在主机上A
):
ip r a 192.168.0.0/24 via 10.9.8.3 dev eth0
对于 Windows(在主机上A
):
route ADD 192.168.0.0 MASK 255.255.255.0 10.9.8.3
转发
路由到位后,网络的所有包192.168.0.0/24
都将发送到主机B
。
为了允许数据包从主机转发wlp3s0
到tun0
主机B
,您需要启用IP转发。
要临时启用所有接口的 IP 转发:
sysctl net.ipv4.conf.all.forwarding=1
要永久启用此更改,请添加新行/etc/sysctl.conf
:
net.ipv4.conf.all.forwarding = 1
除了接口设置之外,iptables
还可以是活动的并且需要允许包转发。
检查是否iptables
处于活动状态(至少对于FORWARD
链而言):
iptables -L FORWARD -nv
如果链上没有规则并且政策规定ACCEPT
,你就可以走了,如果没有,你需要添加相关规则以允许转发192.168.0.0/24
。
允许将所有包转发到192.168.0.0/24
on wlp3s0
:
iptables -I FORWARD -i wlp3s0 -d 192.168.0.0/24 -j ACCEPT
iptables -I FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
自动RELATED,ESTABLISHED
允许退回包裹。
网络地址转换
现在,转发设置完成后,数据包将被发送到隧道中。但是,只要 VPN 后面的远程网络不知道我们的本地网络(通常是这种情况),我们需要将NAT
来自本地网络并将进入 VPN 的所有包发送到我们从 VPN 获得的地址 -服务器(即 上的 IP tun0
)。
为此,您需要MASQUERADE
在表中创建一条规则POSTROUTING
:
iptables -t nat -I POSTROUTING -o tun0 -j MASQUERADE
这会将所有传出包绑定tun0
到接口的 IP 上。