Openvpn 客戶端無法使用 IPv6
我
2.4.7
在Ubuntu 20.04.2 LTS
伺服器上有 openvpn,我的客戶端是帶有 openvpn 的 Archlinux2.5.1
。我注意到 IPv6 洩漏,因此經過一些研究決定不在我的核心級別禁用 IPv6 並使 IPv6 可供使用。這是我的server.conf
:local 127.0.0.1 port 1194 proto tcp dev tun ca ca.crt cert server.crt key server.key dh dh.pem auth SHA512 tls-crypt tc.key topology subnet server 10.8.0.0 255.255.255.0 push "redirect-gateway def1 bypass-dhcp" ifconfig-pool-persist ipp.txt push "dhcp-option DNS 1.1.1.1" push "dhcp-option DNS 1.0.0.1" keepalive 10 120 cipher AES-256-CBC user nobody group nogroup persist-key persist-tun status openvpn-status.log verb 3 crl-verify crl.pem server-ipv6 2001:0db8:ee00:abcd::/64 tun-ipv6 push tun-ipv6 ifconfig-ipv6 2001:0db8:ee00:abcd::1 2001:0db8:ee00:abcd::2 push "route-ipv6 2001:0db8:ee00:ee00::2/64" push "route-ipv6 2000::/3"
閱讀解決方案後添加的最後 6 行(IP 與我的伺服器無關,僅來自教程)。這是我的
client.ovpn
:script-security 2 up /etc/openvpn/update-resolv-conf down /etc/openvpn/update-resolv-conf route server_ip 255.255.255.255 net_gateway client dev tun proto tcp sndbuf 0 rcvbuf 0 remote 127.0.0.1 1194 resolv-retry infinite nobind persist-key persist-tun remote-cert-tls server cipher AES-256-CBC comp-noadapt auth-nocache auth SHA512 key-direction 1 verb 3 <ca> ... </tls-crypt>
我的客戶端連接到 127.0.0.1 1194 的原因是我使用了正在偵聽 1194 的 stunnel。當我在沒有 VPN 的情況下訪問https://ipv6-test.com時,我的 ISP 既有 IPv4 又有 IPv6。使用 VPN(以及添加的那 6 行),我的 VPN 伺服器只有 IPv4,而對於 IPv6,我得到
Not supported
的應該是我的 VPN 伺服器。到目前為止,在不使用核心參數的情況下使用客戶端時至少禁用了 IPv6,但我想要一個工作的 IPv6。我該如何解決這個問題?
概述
我猜這個教程掩蓋了一些關於讓 IPv6 在 VPN 中工作的非常重要的觀點。我將嘗試在下面解釋複雜性。但首先我要指出,基本上有三種方法可以完成這項工作:
- 創建一個TAP VPN 並將其橋接到您的乙太網(參見教程)。
- 將站點本地 IPv6 地址塊分配給您的 VPN(例如
FEC0::/64
)並將您的 VPN 伺服器設置為 IPv6 NAT 網關。- 為您的 VPN 分配一個全球網際網路 IPv6 地址塊,並配置您的伺服器的路由器以將流量轉發給它。
使用網橋創建 TAP VPN
該解決方案的“gotyas”最少,應該直接從網路上遵循教程。它確實有一個性能下降,因為 VPN 必鬚髮送數據包標頭和廣播數據包,而 TUN VPN 則不會。
分配站點本地 IPv6 地址塊
這是不太標準的,但它應該工作。客戶端將在 Internet 上被視為擁有您的 VPN 伺服器的 IP。但是,由於標準不高,如果您無法使其發揮作用,您就不太可能就出了什麼問題找到幫助。
為您的 VPN 分配一個全域 IPv6 塊
為此,您必須有一個由您的 ISP 分配的備用 IPv6 /64 塊。
如果您的伺服器在雲中(例如在 AWS 上),那麼您可能不走運;AWS 預設分配 /56 塊,因此您可以輕鬆地將 /64 塊從中分配給您的 VPN。
如果您的 VPN 伺服器在家里或辦公室,那麼您可能不太幸運,因為某些 ISP 只分配一個 /64 塊。
您還需要配置伺服器的路由器,以將您的 VPN 子網的所有傳入流量發送到您的 VPN 伺服器。
為什麼這麼複雜?
IPv6 不同
在 IPv4 下,通常有一個私有 IP 地址,然後通過NAT 網關訪問網際網路。例如,您的家庭路由器將擁有一個公共 IPv4 地址,而您家庭 wifi 上的每台設備(筆記型電腦、電話等)都將擁有一個本地IPv4 地址。當這些設備中的任何一個訪問 Internet 時,您的家庭路由器會將設備的本地 IP 地址替換為其自己的公共 IP 地址。
NAT 網關在 IPv6 中並不常見,儘管它們仍然是可能的。
相反,您本地網路上的每台設備都配置有自己的全球 IPv6 地址。您的本地網路(例如您的家庭 wifi)被分配(至少)一個完整的 64 位地址塊。然而,常見的建議是 64 位塊是您應該使用的最小塊,否則某些東西可能會停止工作。
為什麼這與 VPN 有關?
TUN VPN 是它自己的網路(子網),因此需要它自己的 IPv6 地址分配。如果您的 ISP 為您分配了一個大塊(例如 /56 塊),那麼您可以在其中分配它自己的 /64 塊的 VPN。然而,ISP 只分配一個 /64 塊的情況並不少見,這意味著您只有一個需要兩個.
正如我所說。您可以將 /64 塊拆分為兩個 /63 塊,但這樣做需要您自擔風險。至少您將無法將“自動配置”與 /63 塊一起使用。
還有什麼更棘手的?
當您的伺服器充當 NAT 網關(與 IPv4 一樣)時,無需使用有關您的 VPN 的任何資訊來配置伺服器的路由器。那是因為每個 VPN 客戶端在您的伺服器網路上顯示為與伺服器具有相同的 IP,因此路由器只是將 VPN 客戶端的所有流量發送到伺服器並讓伺服器找出它……
…但如果沒有 NAT,您的 VPN 客戶端將擁有自己的 IP,而且它甚至不會位於路由器預設理解的子網中。因此,您必須在路由器上配置路由,以將 VPN 子網的流量發送到 VPN 伺服器。