Openvpn

OpenVPN 不是所有流量的預設網關

  • September 7, 2019

我試圖讓我的客戶端通過執行 OpenVPN 的 VPS 轉發所有流量。正如您所看到的,它將允許對域和原始 IP 地址進行 ping,但它不會允許通過 curl 進行的流量,並且 traceroute 不會提供任何內容。未連接到 VPN 時,流量正常工作。

所有資訊都在這裡:https ://pastebin.com/tGspNefn

謝謝你。

由於以下解決方案,工作配置:

伺服器:

port <integer>
proto udp
dev tun
ca ca.crt
cert vpnserver.crt
key vpnserver.key  # This file should be kept secret
dh dh4096.pem
tls-auth ta.key 0
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway autolocal"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
keepalive 10 120
cipher AES-256-CBC
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3

客戶:

client
dev tun
proto udp
remote x.x.x.x <port number>
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert vpnclient.crt
key vpnclient.key
tls-auth ta.key 1
ns-cert-type server
cipher AES-256-CBC
comp-lzo
verb 3

解決方案分為兩部分:

1. 將所有流量重定向到隧道

最簡單的解決方案 - 使用 OpenVPN 的--redirect-gateway autolocal選項(或將其作為redirect-gateway autolocal.

2.處理OpenVPN伺服器上的流量

tun0現在隧道已啟動,所有流量都進入隧道並從介面彈出伺服器端。

您需要配置兩件事才能使其工作:

一種。啟用數據包轉發

預設情況下,在大多數發行版中,數據包轉發被禁用,因此來自隧道介面的數據包永遠不會到達公共介面。您必須啟用轉發:

~ # sysctl net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1

一旦經過測試,使更改永久生效/etc/sysctl.conf

還要確保iptables沒有阻止轉發的流量:

~ # iptables -I FORWARD -j ACCEPT

這對於測試來說已經足夠好了——在生產環境中,您需要讓防火牆規則更具體一些,但這超出了這裡的範圍。

灣。對來自隧道的傳出數據包進行 NAT

啟用轉發後,預設情況下,數據包在源地址不變的情況下轉發,即在您的情況下10.8.0.6- 此類數據包要麼在 ISP 網關上丟棄,要麼即使它們到達目的地,回復也永遠找不到返回的路。這些私有地址在 Internet 上是不可路由的。

解決方案是對出口流量進行 NAT,即將私有10.8.0.6地址替換為 VPN 伺服器的公共 IP。這將確保回復到達 VPN 伺服器,並且在那裡它們將被轉發回隧道。

~ # iptables -t nat -I POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

3. 測試它

ping 8.8.4.4現在從您的 VPN 客戶端嘗試。您應該會看到回复。如果沒有,請告訴我們:)

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