如何添加 ipv6 静态路由?

如何添加 ipv6 静态路由?

我是 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 viaip -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同时还将公布默认路由)。

相关内容