zfl9 / ipt2socks

将 iptables/nftables 传入的透明代理流量转为 socks5 流量的实用工具
GNU Affero General Public License v3.0
439 stars 101 forks source link

'-b' 参数不起作用 #39

Closed rampageX closed 3 years ago

rampageX commented 3 years ago

运行环境:路由器,跑的 Tomato:

Linux netgear 2.6.36.4brcmarm #7 SMP PREEMPT Wed Aug 11 16:39:01 CEST 2021 armv7l GNU/Linux

版本:

ipt2socks v1.1.3

命令行:

ipt2socks -s 192.168.2.20 -p 7575 -l 8095 -4 -R 或者 ipt2socks -s 192.168.2.20 -p 7575 -b 192.168.2.1 -l 8095 -4 -R

无论用不用 -b 指定监听地址,ipt2socks 总会监听在 0.0.0.0 上:

netstat -lnp | grep ipt2
tcp        0      0 0.0.0.0:8095            0.0.0.0:*               LISTEN      10924/ipt2socks
udp        0      0 0.0.0.0:8095            0.0.0.0:*                           10924/ipt2socks
rampageX commented 3 years ago

发现去掉 -R 参数,就正常了,是设计如此?

rampageX commented 3 years ago

把这两行注释了就可以了,会有什么副作用?目前用起来暂时没感觉有问题。

            case 'R':
                g_options |= OPT_TCP_USE_REDIRECT;
                //strcpy(g_bind_ipstr4, IP4STR_WILDCARD);
                //strcpy(g_bind_ipstr6, IP6STR_WILDCARD);
zfl9 commented 3 years ago

是的,设计如此。

因为 ipt2socks 的一个主要目的是提供透明代理(配合 iptables 规则,如 ss-tproxy)给其他局域网主机使用,在使用 REDIRECT 时,若不监听 0.0.0.0,则局域网其它主机无法使用这个透明代理,所以做了这个处理。

在 ipt2socks 所在的 Linux 主机上设置好某些内核参数后,是可以仅监听 127.0.0.1 的。具体可以看 ss-tproxy 脚本。

如果要覆盖此行为,不必修改源代码,只需要把 -R 放在 -b 选项之前就行了(即 -R -b 127.0.0.1)。

rampageX commented 3 years ago

@zfl9 收到!谢谢!