-
Notifications
You must be signed in to change notification settings - Fork 125
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
对于5元组没有变化的连接,前后两次SNAT出接口变化后,CT表无法及时删除失效的跟踪连接,导致新的NAT会话失败 #18
Comments
这种情况是否出现在同五元组的流量一直持续,而中途路由出口变更的情况下? |
这个BUG好像还没修复 |
@liangchen2233 抱歉,之前测试环境坏了一直没有验证这个 pull request。能否测试一下 #19 是否解决了这个问题? |
您好,没有解决 |
我在最近实际使用中还发现,不仅是出接口发生改变(路由改变)后没有自动跟踪到,出接口的 IP 发生改变后貌似也不能检测到,在流量一直有的情况下当前 CT 无法自动删除。 |
我自己测试的话,只是换了出接口,CT表是能够及时删除的,你可以把那个patch合入再验证看看 |
试试我改的 https://github.com/llccd/netfilter-full-cone-nat/tree/dev ,原理是把 |
不能,直接炸了 |
@taolu-soft 你的内核版本是多少,是模块加载不上还是运行崩溃了,能不能提供stacktrace? 另外,解决CT表无法及时删除的最简单方法是
|
我做了一个临时的 patch,大家可以再测试一下,在我的环境上是ok的。加上这个 patch 之后应该不需要再依赖 MASQUERADE 模块 https://gist.github.com/Chion82/9a6880edf4cd6e1993e22b5460bde869 |
这样好像就是将MASQUERADE模块里的notifier重新实现了一遍,如果MASQUERADE模块同时加载的话,相同代码的功能就会执行两遍。 另外,不依赖MASQUERADE是不可能的,如果你在编译内核时把MASQUERADE禁用, 我觉得使用下面的方法更好,调用下面两个函数可以直接注册和MASQUERADE模块相同的notifier,而且在与MASQUERADE模块同时加载时只会注册一次:
|
@llccd 是的,因为我的测试环境内核很老了,我在浏览 MASQUERADE 模块的源码时还没有这个公共函数,所以就把 MASQUERADE 中的部分代码做了一下版本兼容直接复制过来用了。这个只是临时的用于测试的补丁,尽可能保持简单,除了 notifier 没有修改别的东西,用来供各位测试是否解决了这个issue的。如果这个能够解决,之后会参考你的方法将更优雅的 fix 并入本仓库中。 我指的不依赖 MASQUERADE 模块指的是不需要在运行时加载 MASQUERADE 模块。 |
/root/netfilter-full-cone-nat/xt_FULLCONENAT.c: 在函数‘fullconenat_device_event’中: |
@taolu-soft patch 更新修复了,请重新编译试一下。 |
|
void nf_nat_masquerade_ipv4_register_notifier(void)
} 这是4.x内核里的,貌似对3.18-5.2处理有误? |
如:
源IP、源端口、协议、目的IP、目的端口、目的协议都不变化的情况下,只有路由后的出接口变化,使用被动老化机制时会导致旧连接(旧的接口IP)一直存在,新的出接口IP无法正常使用
The text was updated successfully, but these errors were encountered: