记录一下,也是对自己解决问题的一个总结。
背景:
使用iptables + TPROXY做转发。在环境上除了一些问题。
内核提示:

但是当我查看内核的编译选项的时候,发现是编译进去的。

这就很奇怪了。why。
问题的答案:
1.首先是iptables版本太低了。插了官网后,发现iptables在1.4.21上更新了对TPROXY的支持。(ftp://rpmfind.net/linux/RPM/opensuse/updates/leap/42.3/oss/armv7hl/iptables-1.4.21-9.1.armv7hl.html)
更新日志:

解决:
升级iptables.参考这篇博客:(https://blog.csdn.net/u011704394/article/details/54572453)
注:在suse上关闭iptables:
/sbin/rcSuSEfirewall2 stop
/sbin/rcSuSEfirewall2 new
2.第二个问题就比较坑了
结论:TPROXY依赖于一个内核模块叫做xt_TPROXY.ko。

之前以为内核开了编译选项,这个内核模块就一定会存在。其实不是啊,都是这个vagrant的锅,他开了编译选项,但是没有加载这个内核模块。就这么一直被误导着 。
解决问题思路总结:
- 1.首先既然内核编译选项指的是m,那就说明是以一个内核模块的形式存在的。那么就应该在lsmod看下。
lsmod | grep proxy -i //-i表示的是忽略大小写。
- 2.内核编译好的内核模块都放在一个目录下:
/lib/modules/4.4.73-5-default
在这个目录下,查看内核有没有这个ko:
find . -name *.ko | grep tproxy -i
另外模块之间的依赖是放在/lib/modules/4.4.73-5-default这个目录下的modules.dep这个文件中。可以在这个目录下grep下,有没有你想要的内核模块的依赖关系:
cat modules.dep | grep -i tproxy
网友评论