我正在使用 strongswan 在隧道模式下建立 ipsec 连接。当客户端连接到网关时,strongswan 会从服务器接收分配给客户端的新 ipv6 地址。然后,发送到隧道网络的所有流量都从此 ip6 地址发送。ipv6 地址分配给客户端的wlp61s0
接口,例如2222:33:8085:cf0:1:2:f6e5:a5d0/128
。我对xfrm state
和xfrm policy
命令的理解是,它们分别仅存储有关安全关联 (SA) 和策略的信息,这些策略选择使用的 SA基于源地址和目标地址。
但是客户端内核如何知道客户端何时向目标网络发送信息(例如2222::/16
,它应该使用某个源地址)?在哪里可以检索有关当前路由的信息?
答案1
https://docs.strongswan.org/docs/5.9/howtos/introduction.html#_routing告诉:
在 Linux 上,strongSwan 默认将路由安装到路由表 220 中,因此需要内核支持基于策略的路由。
(并且它还使用优先级 220 来查找表 220。)
因此对于 IPv6 来说,应该这样看:
ip -6 rule show priority 220
或者
ip -6 rule show lookup 220
对于策略路由部分。
加:
ip -6 route show table 220
对于路由表部分。
要想不假思索地知道内核做出了什么决定,可以询问内核将做出什么决定。例如:
ip route get to 2222::1
将会告知所选的源地址、所选的接口、网关(如果有)以及(如果不是主表)所选的路由表等信息。
还请注意,当在(主)路由、路由规则/路由表中未明确覆盖时,IPv6 具有一种相当复杂但有据可查的方法来选择源地址:RFC 6724:互联网协议版本 6 (IPv6) 的默认地址选择 5. 源地址选择