我是 IPv6 新手,这是我的家庭网络
+------------------------------------------+
| |
| Router |
| |
| |
| |
| |
| fe80::fe7c:2ff:fed5:a236 |
+------------------------------------------+
|
|
|
|
|
+----------------------------------|-----------------------------------+
| |
| |
| |
| |
| |
+------------------------------------------+ +------------------------------------------+
| wlan0 | | eth0 |
| fe80::8e70:5aff:fe62:7180/64 | | fe80::3686:d00c:4a2b:1052/64 |
| | | |
| | | |
| Laptop | | VPN Gateway |
| | | |
| | | |
+------------------------------------------+ +------------------------------------------+
我的 ISP 没有给我 IPv6 地址,但我在 VPN 网关上运行 VPN 软件,我在 VPN 网关上创建了以下 iptables 规则:
iptables -t nat -A POSTROUTING -o wg_vpn -j MASQUERADE
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -o wg_vpn -j ACCEPT
ip6tables -t nat -A POSTROUTING -o wg_vpn -j MASQUERADE
ip6tables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
ip6tables -A FORWARD -i eth0 -o wg_vpn -j ACCEPT
我知道如何在笔记本电脑上添加 ipv4 规则,ip route add default via vpn_gateway_ip dev wlan0
但这似乎对 ipv6 不起作用?那么我该如何编写 ipv6 规则?
我已经跑了ip -6 route add default via fe80::3686:d00c:4a2b:1052 dev wlan0
,但ping -6 www.google.com
还会回来From _gateway (fe80::3686:d00c:4a2b:1052%wlan0) icmp_seq=1 Destination unreachable: Beyond scope of source address
。
ping fe80::3686:d00c:4a2b:1052
也没有回应,但ping -I wlan0 fe80::3686:d00c:4a2b:1052
会返回正确的响应。
我不想要来自 ISP 的 IPv6 地址,我希望所有网络流量都通过 VPN。
答案1
您正在寻找的开关是-6
:
mtak@gen1:~$ sudo ip -6 route add default via 2001:470:xxxx::1
mtak@gen1:~$ ip -6 route list
2001:470:xxxx::/64 dev eth0 proto kernel metric 256
fe80::/64 dev eth0 proto kernel metric 256
default via 2001:470:xxxx::1 dev eth0 metric 1024
你为什么要为 IPv6 而费心使用 NAT?IPv6 的重点在于不再需要 NAT。如果你的 VPN 网关上有 IPv6,只需简单路由即可。
答案2
它与 IPv4 相同:
ip route add default via fe80::3686:d00c:4a2b:1052 dev wlan0
您可能希望更具体地说明它是 IPv6 路由 – 使用ip -6
或 而::/0
不是指定“默认”。 (即ip r add ::/0 via
或ip -6 r add default via
)。
然而,什么是与 IPv4 不同的是,您目前唯一的 LAN 地址是本地链路。它们不仅仅是“私有的”——fe80::/64
前缀严格限定在同一链路内,从此类 IP 地址发送的数据包不会被路由器转发即使存在 NAT/伪装规则。
(但是,链路本地地址可以用作路由的“网关”,因为网关地址必须来自同一链路反正– 在 IPv6 和 IPv4 中都同样适用。这样via fe80...
就没问题了。)
如果您希望 LAN 通过 VPN 访问 IPv6,则需要为设备分配全局范围地址(除了本地链路地址)。最好是,这将是通过 VPN 服务器路由的“公共”/64 范围,在这种情况下,您不需要在 ip6tables 中使用任何形式的 NAT – 您的设备将直接使用其全局地址。
但如果你真的没有多余的公共 /64(或者你正在使用只需要一台设备的商业 VPN 服务),那么fd00::/8
“唯一本地地址”范围是您的另一个选择。这是 IPv6 的直接等同于 IPv4 的 RFC1918 私有地址 - 您应该从中随机选择一个 /48(例如fd84:1b4e:6281::/48
),然后从中将 /64 分配给您的子网(例如fd84:1b4e:6281:0::/64
本地 LAN)。这些地址是可转发(与 192.168.x 相同),因此 ip6tables NAT 将按您预期的方式工作。
您可以手动分配 IPv6 地址(使用ip addr add ... dev wlan0
),也可以自动公布前缀(使用radvd
在 VPN 网关上运行的,它::/0
同时还将公布默认路由)。