如何使用 OpenVPN 正确配置 IPv6?

Pho*_*use 7 ipv6 openvpn

为了找到适合我需要的 OpenVPN 配置,我制作了这个脚本来帮助自己在 CentOS 系统上进行安装。我的服务器配置文件实际上是这样的:

port 1194
proto udp
dev tun
user nobody
group nobody
persist-key
persist-tun
keepalive 10 120
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "dhcp-option DNS 10.8.0.1"
push "dhcp-options DNS 2a04:52c0:101:xxx::1"
push "redirect-gateway def1 bypass-dhcp"
crl-verify crl.pem
ca ca.crt
cert server.crt
key server.key
tls-auth tls-auth.key 0
dh dh4096.pem
auth SHA256
cipher AES-256-CBC
tls-server
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384
status openvpn.log
verb 4
Run Code Online (Sandbox Code Playgroud)

它实际上运行良好,但是当我租用了一台服务器 @ liteserver.nl 并且他们给了我一个 /64 子网时,我试图配置 OpenVPN 服务器为每个客户端提供一个 IPv6 地址,以便使用专用 IP 访问互联网。因此,我按照页面上的说明设置 IPv6 以供内部使用。该页面包含具有公共 IPv6 的服务器的说明,该服务器具有 2001:db8:0:abc::100/64 和路由 IPv6 子网(我认为这可能是 liteserver.nl 给我的),即 2001:db8: 0:123::/64。没有注意示例地址的差异,我使用公共 IPv6 (2a04:52c0:101:xxx::100/64) 配置了我的服务器,并将他们给我的整个子网提供给 OpenVPN 客户端(2a04:52c0:101: xxx::/64),这是我的 server.conf 实际上的样子:

port 1194
proto udp
dev tun
user nobody
group nobody
persist-key
persist-tun
keepalive 10 120
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "dhcp-option DNS 10.8.0.1"
push "dhcp-options DNS 2a04:52c0:101:xxx::1"
push "redirect-gateway def1 bypass-dhcp"
crl-verify crl.pem
ca ca.crt
cert server.crt
key server.key
tls-auth tls-auth.key 0
dh dh4096.pem
auth SHA256
cipher AES-256-CBC
tls-server
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384
status openvpn.log
verb 4
server-ipv6 2a04:52c0:101:xxx::/64
tun-ipv6
push tun-ipv6
ifconfig-ipv6 2a04:52c0:101:xxx::1 2a04:52c0:101:xxx::2
push "route-ipv6 2a04:52c0:101:xxx::/64"
push "route-ipv6 2000::/3"
Run Code Online (Sandbox Code Playgroud)

因此,当 IPv4 连接正常时,IPv6 已正确分配,但我无法使用 IPv6 访问互联网(根据 test-ipv6.com)我问自己是否需要两个 /64 子网(一个用于私有 OpenVPN 网络,另一个用于VPN 服务器本身,因此对于传出连接)正确配置它,或者如果我错过了什么......无论如何我想要的是一个具有私有 IPv4 和 IPv6 连接以及公共 IPv4 和一个或多个 IPv6 的 VPN 服务器地址。请告诉我这是否可能以及如何做到这一点。我真的希望有人可以帮助我。

提前致谢。

rsu*_*rez 5

我认为您需要将 NDP 请求代理到您的公共 IPv6 地址。我没有亲自测试过,但这是理论:

您的 ISP 会将整个 IPv6 网络 (2a04:52c0:101:xxx::/64) 的流量发送到您的服务器。这意味着,当互联网上的某人尝试连接到该网络内的 IP 地址时,流量将被发送到您的服务器,并期望它知道如何处理它。

您的服务器在该网络中有一个地址 (2a04:52c0:101:xxx::100)。当它接收到另一个地址的流量时,它会忽略它,因为它不是它可以识别的地址。因此,流向从 OpenVPN 分配的网络获取 IP 地址的设备的流量将在您的服务器上停止。

为了让您的服务器意识到它必须获取该流量并通过 OpenVPN 将其“向下”发送,您有两种选择:为您的 OpenVPN 客户端使用不同的 IPv6 网络(因此传统路由可以工作)或将流量代理到您当前的网络。第一个是最好的选择,但是您的 ISP 可能不会为您分配多于一个 /64;后者是 NDP 代理,类似于 IPv4 中的 ARP 代理。

使用 NDP 代理,您的服务器将获取不属于自己的地址的流量,并将其重新发送到通过 OpenVPN 连接的具有相同 IP 地址的客户端。您必须对网络中属于 OpenVPN 客户端的每个 IP 地址执行此操作。

StackExchange 网络中还有其他答案详细介绍了这一点:

请检查这些答案以获得更全面的解释。