如何在本地子网中优先使用 IPv6 ULA 而不是 IPv6 GUA 进行通信?

如何在本地子网中优先使用 IPv6 ULA 而不是 IPv6 GUA 进行通信?

我的所有设备都拥有 IPv4、IPv6 LL、IPv6 ULA 和 IPv6 GUA 地址,如下所示:

3: wlp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 88:b1:11:ed:21:c8 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.22/24 brd 192.168.1.255 scope global dynamic noprefixroute wlp1s0
    valid_lft 863780sec preferred_lft 863780sec
inet6 fd00::xxxx:xxxx:xxxx:xxxx/64 scope global dynamic noprefixroute 
   valid_lft 6985sec preferred_lft 3385sec
inet6 2003:d4:4f1f:9500:xxxx:xxxx:xxxx:xxxx/64 scope global dynamic noprefixroute 
   valid_lft 6985sec preferred_lft 1585sec
inet6 fe80::xxxx:xxxx:xxxx:xxxx/64 scope link noprefixroute 
   valid_lft forever preferred_lft forever

一些更复杂的设备(服务提供商)安装了 iptables 防火墙:

-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -p ipv6-icmp -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

当我现在尝试通过 DNS 名称从设备 b 访问设备 a 时,有时会使用 IPv6 GUA,有时会使用 ULA。我的防火墙只允许某些端口(例如 SSH)用于来自 ULA 子网的连接。因此,我想强制在我的子网内使用 ULA。

这是正确的方法吗?如何在不禁用防火墙和不输入目标 IP 的情况下解决此问题?

谢谢

编辑20181118: RFC 6724说:默认情况下,全局 IPv6 目的地优先于 ULA 目的地,因为任意 ULA 不一定可以到达(感谢 Ron Maupin)。所以我的网络结构显然出了问题。还有其他方法可以使用 iptables 过滤子网内的流量吗?全局 IPv6 前缀是动态的,因此我无法在静态 iptables 中使用它来确定数据包是否来自我的子网内。

答案1

尝试编辑/etc/gai.conf并让您的 ULA 优先于 GUA。

如果这没有帮助,并且假设 DNS 以随机顺序返回所有旅游地址,则解决方法是为每台机器(可能在不同的子域下)添加一个仅返回 ULA 地址的新地址条目。

相关内容