尝试找到适合我需求的 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
它实际上运行得很好,但由于我租用了一台服务器@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)配置我的服务器,并将他们给我的整个子网(2a04:52c0:101:xxx::/64)提供给 OpenVPN 客户端,我的 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"
因此,当 IPv4 连接正常工作时,IPv6 被正确分配,但我无法使用 IPv6 访问互联网(根据 test-ipv6.com)我在问自己是否需要两个 /64 子网(一个用于私有 OpenVPN 网络,一个用于 VPN 服务器本身,因此用于传出连接)才能正确配置这一点,或者我是否错过了什么……无论如何,我想要获得的是具有私有 IPv4 和 IPv6 连接以及公共 IPv4 和一个或多个 IPv6 地址的 VPN 服务器。请告诉我这是否可能以及如何做到这一点。我真的希望有人能帮助我。
提前致谢。
答案1
我认为您需要将 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 网络中还有其他答案对此进行了详细介绍:
请检查这些答案以获得更详细的解释。
答案2
解决方案非常简单(尽管花了 6 个小时才搞清楚)。手册在这里:拆分单个可路由的 IPv6 网络块
- 删除现有的 ipv6:ifconfig eth0 inet6 del 2a04:52c0:101:xxx::x/64
- 添加具有 /65 前缀的相同 inet6:ifconfig eth0 inet6 add 2a04:52c0:101:xxx::x/65
- 将配置中的行更改为:server-ipv6 2a04:52c0:101:xxx:8000::/65