Ubuntu
僅針對指定 IP 地址的 OpenVPN 連接
我在 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 不適用於本地生成的數據包。