Ubuntu

僅針對指定 IP 地址的 OpenVPN 連接

  • March 6, 2019

我在 ubuntu 伺服器上有一個帶有 OpenVpn 的 vpn,它適用於每個連接。

伺服器配置為:

port 1194
proto udp
dev tun
ca easy-rsa/keys/ca.crt
cert easy-rsa/keys/CommonName.crt
key easy-rsa/keys/CommonName.key
dh easy-rsa/keys/dh2048.pem
server 10.8.0.0 255.255.255.0
#push "redirect-gateway def1 bypass-dhcp"
push "redirect-gateway def1"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
push "topology subnet"
topology subnet
route 10.8.0.0 255.255.255.0
keepalive 10 120
comp-lzo
user openvpn
group openvpn
persist-key
persist-tun
status openvpn-status.log
verb 3

我的 client.conf 包含:

client
dev tun
proto udp
remote IP_ADDRESS 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert user.crt
key user.key
ns-cert-type server
comp-lzo
verb 3

目前,伺服器正在通過 vpn 連接路由每個連接。

這是通過 iptables 完成的:

iptables -A FORWARD -o ens3 -i tun0 -s 10.8.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING  -o ens3 -j MASQUERADE

所以,這很好。

現在我只想使用 vpn 連接,如果源目的地是 example.com。否則不行。

所以我嘗試了這個:

iptables -A FORWARD -o ens3 -i tun0 -s 10.8.0.0/24 -d example.com -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack -s example.com --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING  -o ens3 -j MASQUERADE

但這沒有用。我也使用來自的 IP 地址example.com

但是如果我瀏覽到其他網站,它將使用 vpn 連接。我通過測試驗證了這一點show my current ip adress services

我做錯了什麼?

iptables --help給我看

$$ ! $$–destination -d 地址$$ /mask $$$$ … $$

或者它不適用於這個?我該如何解決?

您需要將規則添加到您的路由表。

ip route add $example.com.ip via $vpn.gateway

對於更複雜的路由,您可以使用 iptables 在數據包上設置標記,然後使用ip rule基於標記的路由。

此外,您的配置會將 VPN 添加為所有內容的“預設”路由。您需要刪除該redirect-gateway選項。

另一個想法是,如果您在建立 VPN 隧道(客戶端)的同一台機器上進行測試,那麼 FORWARD 鏈根本不會被使用。FORWARD 不適用於本地生成的數據包。

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