linux ipsec pluto不生效定位

使用的是pluto,systemctl部署后可以看到ipsec服务(linux使用的是ip xfrm):
pluto服务
可以检查下配置是否正确
pluto配置

ipsec配置文件
以上都正确的话,除了通过日志(journalctl -xefu ipsec或者
ipsec whack --status)确认下ipsec是否正常,还可以通过以下命令确认整个流程:
策略路由是否生效:
ip rule list
策略路由
ip route list table中是否包含配置的私网网段

事实证明策略路由存在与否没有什么影响,
可能是因为ipsec是POSTROUTING规则,路由并不改变源和目的IP

查看ipsec中策略:
ipsec策略
查看ipsec状态:
ipsec状态
ipsec状态看起来没问题,抓包发现源IP变成了node的IP,k8s会设置SNAT,
怀疑是k8s的SNAT修改了源IP后,匹配不上ipsec policy,SNAT查看:

iptables -t nat -nL

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
KUBE-POSTROUTING  all  --  0.0.0.0/0            0.0.0.0/0            /* kubernetes postrouting rules */
RETURN     all  --  172.22.0.0/16        172.22.0.0/16        /* flanneld masq */
MASQUERADE  all  --  172.22.0.0/16       !224.0.0.0/4          /* flanneld masq */
RETURN     all  -- !172.22.0.0/16        172.22.0.0/24        /* flanneld masq */
MASQUERADE  all  -- !172.22.0.0/16        172.22.0.0/16        /* flanneld masq */

Chain KUBE-POSTROUTING (1 references)
target     prot opt source               destination
RETURN     all  --  0.0.0.0/0            0.0.0.0/0            mark match ! 0x4000/0x4000
MARK       all  --  0.0.0.0/0            0.0.0.0/0            MARK xor 0x4000
MASQUERADE  all  --  0.0.0.0/0            0.0.0.0/0            /* kubernetes service traffic requiring SNAT */

可以看到第一条规则是一个SNAT(MASQUERADE是SNAT的一种方式:从服务器的网卡上,自动获取当前ip地址来做NAT)

于是添加一条规则优先于SNAT:
在这里插入图片描述
这样流量可以经过iptables而不做SNAT,因为iptables的规则是:
iptables匹配规则
至于为什么先处理snat再处理xfrm,是linux源码写死的。。。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值