searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

记一次ipv6透明代理问题排查过程

2024-10-10 02:06:24
9
0

1. 一开始我以为组件有在创建监听socket时设置ipv6的IP_TRANSPARENT选项,所以怀疑是规则有问题。通过ip6tables -t mangle -nvL查看规则上的数据包计数,发现请求是可以命中规则的。在规则上发现不了问题,只好回过头向研发确认监听socket,组件确实没有设置ipv6的IP_TRANSPARENT选项。

2. 然而在修改并部署了一个新版本上去后,组件还是收不到请求。排查了很久,没有找到一点头绪,怀疑是机器环境有问题。在换了一台机器测试后,发现组件就可以收到请求了。问题来了:两台机器到底有什么差异,导致同样的规则在一台机器上有效,另一台机器上无效?

3. 在换机器测试的过程中,规则没有改变,但是监听地址略有不同。旧机器是在lo网卡上加了一个自定义地址,然后监听在这个地址上。新机器的lo网卡上没有这个地址,所以监听在回环地址上。初步怀疑是这个监听地址的问题。在新机器上也加上了自定义地址,同时改成监听在这个地址上后,组件又收不到请求了。

4. 尽管不知道其中的原理,但是在经过一番尝试后,发现在规则中通过--on-ip显示指定监听ip之后,组件在旧机器上也能收到请求了。

推断:如果不通过--on-ip指定监听ip,透明代理的ip默认是::/0。如果lo网卡上存在多个地址,规则会不知道将数据包发送到哪个进程。所以在写规则时,不能图省事,省略--on-ip。

0条评论
作者已关闭评论
杨****为
3文章数
0粉丝数
杨****为
3 文章 | 0 粉丝
杨****为
3文章数
0粉丝数
杨****为
3 文章 | 0 粉丝
原创

记一次ipv6透明代理问题排查过程

2024-10-10 02:06:24
9
0

1. 一开始我以为组件有在创建监听socket时设置ipv6的IP_TRANSPARENT选项,所以怀疑是规则有问题。通过ip6tables -t mangle -nvL查看规则上的数据包计数,发现请求是可以命中规则的。在规则上发现不了问题,只好回过头向研发确认监听socket,组件确实没有设置ipv6的IP_TRANSPARENT选项。

2. 然而在修改并部署了一个新版本上去后,组件还是收不到请求。排查了很久,没有找到一点头绪,怀疑是机器环境有问题。在换了一台机器测试后,发现组件就可以收到请求了。问题来了:两台机器到底有什么差异,导致同样的规则在一台机器上有效,另一台机器上无效?

3. 在换机器测试的过程中,规则没有改变,但是监听地址略有不同。旧机器是在lo网卡上加了一个自定义地址,然后监听在这个地址上。新机器的lo网卡上没有这个地址,所以监听在回环地址上。初步怀疑是这个监听地址的问题。在新机器上也加上了自定义地址,同时改成监听在这个地址上后,组件又收不到请求了。

4. 尽管不知道其中的原理,但是在经过一番尝试后,发现在规则中通过--on-ip显示指定监听ip之后,组件在旧机器上也能收到请求了。

推断:如果不通过--on-ip指定监听ip,透明代理的ip默认是::/0。如果lo网卡上存在多个地址,规则会不知道将数据包发送到哪个进程。所以在写规则时,不能图省事,省略--on-ip。

文章来自个人专栏
专栏1
3 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0