Ubuntu

通過 WiFi 共享 VPN 連接

  • May 22, 2018

我有兩台電腦連接到同一個路由器10.9.8.1

  • 電腦 A10.9.8.2執行 Windows 10 Insider Preview。Insider Preview 已損壞 VPN,無法回滾。:(
  • 電腦 B10.9.8.3執行 Linux Mint 並通過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 上做同樣的事情時,適配器會失去連接。不知道如何正確地做到這一點。

路由

在 host 上A,您需要將目標網路的所有流量路由到 host 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

要允許將包從主機轉發wlp3s0tun0主機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/24on 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退貨包裹。


NAT

現在,轉發設置後,包將被發送到隧道中。但是只要VPN後面的遠端網路不知道我們的本地網路,通常情況下,我們需要NAT所有來自我們本地網路的包,並將進入VPN的地址,我們從VPN-伺服器(即 上的 IP tun0)。

為此,您需要MASQUERADE在表中創建一個規則POSTROUTING

iptables -t nat -I POSTROUTING -o tun0 -j MASQUERADE

這將把所有傳出的包都放到tun0介面的 IP 上。

引用自:https://unix.stackexchange.com/questions/445166