2.4.7
我的服务器上有 openvpn Ubuntu 20.04.2 LTS
,我的客户端是带有 openvpn 的 Archlinux 2.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。当我访问时https://ipv6-test.com如果没有 VPN,我同时拥有 ISP 的 IPv4 和 IPv6。通过 VPN(以及添加的这 6 行),我只有 VPN 服务器的 IPv4,而对于 IPv6,我得到的Not supported
应该是我的 VPN 服务器。到目前为止,在使用没有操纵内核参数的客户端时,至少 IPv6 被禁用,但我想要一个可用的 IPv6。
我该如何解决这个问题?
答案1
概述
我想该教程掩盖了有关让 IPv6 在 VPN 内工作的一些非常重要的要点。我将尝试解释下面的复杂性。但首先我会指出,基本上有三种方法可以实现这项工作:
- 创建一个轻敲VPN 并将其桥接到您的以太网(看教程)。
- 将站点本地 IPv6 地址块分配给您的 VPN(例如
FEC0::/64
)并将您的 VPN 服务器设置为 IPv6 NAT 网关。 - 为您的 VPN 分配一个全球互联网 IPv6 地址块,并配置服务器的路由器以将流量转发到它。
使用网桥创建 TAP VPN
该解决方案具有最少的“gotyas”,应该可以直接遵循网络上的教程。它确实有一个性能缺点,因为 VPN 必须发送数据包标头和广播数据包,而 TUN VPN 则不会。
分配站点本地 IPv6 地址块
这不太标准,但应该可行。客户端将在互联网上被视为拥有您的 VPN 服务器的 IP。然而,由于标准较低,如果您无法使其正常工作,您就不太可能就出现的问题寻求帮助。
为您的 VPN 分配全局 IPv6 块
为此,您必须拥有 ISP 分配的备用 IPv6 /64 块。
如果您的服务器位于云中(例如 AWS),那么您可能会不走运; AWS 默认分配 /56 块,因此您可以轻松地将 /64 块从中分配给您的 VPN。
如果您的 VPN 服务器位于家里或办公室,那么您可能不太幸运,因为某些 ISP 只分配单个 /64 块。
您还需要配置服务器的路由器,以将 VPN 子网的所有传入流量发送到 VPN 服务器。
为什么这么复杂?
IPv6 有所不同
在 IPv4 下,通常拥有一个私有 IP 地址,然后通过NAT网关。例如,您的家庭路由器将拥有一个公共 IPv4 地址,并且家庭 WiFi 上的每台设备(笔记本电脑、手机等)都会有一个公共 IPv4 地址。当地的IPv4 地址。当这些设备中的任何一个访问互联网时,您的家庭路由器会将设备的本地 IP 地址替换为其自己的公共 IP 地址。
NAT 网关在 IPv6 中并不常见,尽管它们仍然有可能。
相反,本地网络上的每个设备都配置有自己的全局 IPv6 地址。您的本地网络(例如您的家庭 WiFi)被分配(至少)整个 64 位地址块。然而,常见的建议是 64 位块是您应该使用的最小块,或者有些事情可能会停止工作。
为什么这与 VPN 相关?
TUN VPN 是它自己的网络(子网),因此需要它自己分配 IPv6 地址。如果您的 ISP 为您分配了一个大块(例如 /56 块),那么您可以从其中分配 VPN 它自己的 /64 块。然而,ISP 只分配一个 /64 块的情况并不少见,这意味着您只有一个你需要两个。
正如我所说。您可以将一个 /64 块拆分为两个 /63 块,但您需要自行承担风险。至少您将无法对 /63 块使用“自动配置”。
还有什么更棘手的?
当您的服务器充当 NAT 网关(与 IPv4 一样)时,无需使用有关 VPN 的任何信息来配置服务器的路由器。这是因为每个 VPN 客户端在您的服务器网络上显示为与服务器具有相同的 IP,因此路由器只是将 VPN 客户端的所有流量发送到服务器并让服务器计算出来......
...但是如果没有 NAT,您的 VPN 客户端就有自己的 IP,并且它甚至不会位于路由器默认识别的子网中。那么你必须在路由器上配置路由以将 VPN 子网的流量发送到 VPN 服务器。