OpenVPN 用於某些 IP,eth0 用於其他所有 IP
摘要:我想連接到我的 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 a
並traceroute
連接到 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