最近尝试配置树莓派做透明代理,按说明配置完 TPROXY 后 UDP 协议的转发一直没有成功,调查后发现失败的原因是本地的 ss-redir 一直收不到内核 TPROXY 转发过来的数据包,iptables 是使用 ss-nat 进行配置的,尝试过:
1、完全清理掉 iptables 再配置,失败
2、自己写了个小程序替代 ss-redir,也收不到
3、不使用 ss-nat,手动添加 iptables 规则,失败
考虑到可能是树莓派上各种 bridge、docker 之类的有影响,一怒之下开了两个虚拟机组了个网,一台当客户端,一台当路由器,操作系统是新安装的 ubuntu18.04 ,配置过程如下:
1、配置好两台机子的 ip,清理掉 iptables 上所有规则,路由器上用 iptables 配置好 nat,客户端可以正常访问互联网
2、运行 ss-redir
3、参照 ss-libev 主页上 Transparent proxy 一节,配置 iptables
TCP 成功,UDP 依然失败,实在想不出来原因,不知道各位有没有什么思路?
ps:
1、在树莓派上,在 filter 表的 input 链上插一句 log,可以看到 TPROXY 转发过来的数据包,但在 ubuntu 上看不到
2、树莓派和虚拟机都可以看到本地发出的 dns 请求被 TPROXY 转发最后到达 ss-redir,这实在超出我的理解,按说明来讲本地发出的数据包应该是不经过 prerouting 链的,这些数据包为什么会被 TPROXY 转发呢?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.