Ubuntu

OpenVPN 用於某些 IP,eth0 用於其他所有 IP

  • March 5, 2017

摘要:我想連接到我的 VPN 並訪問某些伺服器,但對於所有其他流量,我想使用我的正常網路。

我在我的 VPS 上設置了一個 OpenVPN 伺服器,我的server.conf文件如下所示:

port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key  # This file should be kept secret
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
log         /var/log/openvpn.log
verb 4
push "route 10.132.0.0 255.255.0.0"

我使用以下.ovpn文件來設置 VPN 連接:

client
dev tun
proto udp
remote <my.vpn.server.com> 1194
nobind
user nobody
group nogroup
persist-key
persist-tun
remote-cert-tls server
comp-lzo
verb 3
<ca>....</ca>
<cert>...</cert>
<key>...</key>

最後,在 VPN 連接的網路管理器中,在 IPv4 設置下,我確保將“方法”設置為“僅自動 (VPN) 地址”。

VPN 連接良好,我可以訪問我需要的所有內部伺服器(10.132.xx),但是我無法訪問其他任何東西(如 google.com)。我希望我的 eth0 設置可用於除我希望通過 VPN 路由的 10.132.xx IP 之外的所有內容。

PS 基於我嘗試no-pull在 .ovpn 文件中使用並在那裡添加我的route設置但無濟於事的其他文章。

編輯 1

執行ip atraceroute連接到 VPN 的結果:

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 scope host lo
      valid_lft forever preferred_lft forever
   inet6 ::1/128 scope host 
      valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
   link/ether 08:00:27:dc:a6:ef brd ff:ff:ff:ff:ff:ff
   inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic eth0
      valid_lft 86320sec preferred_lft 86320sec
   inet6 fe80::f3d1:6eb3:e13e:d61b/64 scope link 
      valid_lft forever preferred_lft forever
15: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
   link/none 
   inet 10.8.0.6 peer 10.8.0.5/32 brd 10.8.0.6 scope global tun0
      valid_lft forever preferred_lft forever

$ traceroute google.com
google.com: Temporary failure in name resolution
Cannot handle "host" cmdline arg `google.com' on position 1 (argc 1)

編輯2:結果ip r

$ ip r
default via 10.8.0.5 dev tun0  proto static  metric 50 
default via 10.0.2.2 dev eth0  proto static  metric 100 
10.0.2.0/24 dev eth0  proto kernel  scope link  src 10.0.2.15  metric 100 
10.8.0.1 via 10.8.0.5 dev tun0  proto static  metric 50 
10.8.0.5 dev tun0  proto kernel  scope link  src 10.8.0.6  metric 50 
10.132.0.0/16 via 10.8.0.5 dev tun0  proto static  metric 50 
104.236.239.153 via 10.0.2.2 dev eth0  proto static  metric 100 
169.254.0.0/16 dev eth0  scope link  metric 1000 

通過使用客戶端 GUI(Ubuntu NetworkManager),我設法獲得了預期的效果。我必須確保選中IPv4 Settings -> Routes“僅將此連接用於其網路上的資源”下的複選框:

“僅將此連接用於其網路上的資源

我不完全確定我需要在 .ovpn 文件中做什麼才能複制它。

我的路由表現在看起來像這樣:

$ sudo netstat -r -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.0.2.2        0.0.0.0         UG        0 0          0 eth0
10.0.2.0        0.0.0.0         255.255.255.0   U         0 0          0 eth0
10.8.0.1        10.8.0.5        255.255.255.255 UGH       0 0          0 tun0
10.8.0.5        0.0.0.0         255.255.255.255 UH        0 0          0 tun0
10.132.0.0      10.8.0.5        255.255.0.0     UG        0 0          0 tun0
104.236.239.153 10.0.2.2        255.255.255.255 UGH       0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0

請記住,我在push "route 10.132.0.0 255.255.0.0"其中server.conf解釋了條目,10.132.0.0從而解釋了為什麼我現在可以訪問我的伺服器,而其他所有內容都在 VPN 之外路由(即0.0.0.0條目)

如果沒有在 GUI 中檢查此設置,我的路由表如下所示:

$ sudo netstat -r -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.8.0.5        0.0.0.0         UG        0 0          0 tun0
0.0.0.0         10.0.2.2        0.0.0.0         UG        0 0          0 eth0
10.0.2.0        0.0.0.0         255.255.255.0   U         0 0          0 eth0
10.8.0.1        10.8.0.5        255.255.255.255 UGH       0 0          0 tun0
10.8.0.5        0.0.0.0         255.255.255.255 UH        0 0          0 tun0
10.132.0.0      10.8.0.5        255.255.0.0     UG        0 0          0 tun0
104.236.239.153 10.0.2.2        255.255.255.255 UGH       0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0

我的猜測是第一個0.0.0.0條目(預設路線)把一切都搞砸了。

nm-connection-editor 中的“將此連接僅用於其網路上的資源”複選框控制 NetworkManager 是否應添加通過 VPN 的預設路由。如果像您一樣選中它,則只有定向到 VPN 子網的數據包將通過 VPN 網關,並且系統將使用現有的預設路由到達其他目的地。

您可以使用 nmcli 從命令行更改相同的設置:

nmcli connection modify <VPN connection> ipv4.never-default yes

引用自:https://serverfault.com/questions/827082