配置 TPROXY 失败,各位给点意见? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
linxy19957
V2EX    问与答

配置 TPROXY 失败,各位给点意见?

  •  
  •   linxy19957 2020-02-03 21:37:12 +08:00 5165 次点击
    这是一个创建于 2078 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近尝试配置树莓派做透明代理,按说明配置完 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 转发呢?

    9 条回复    2020-07-17 11:19:38 +08:00
    laucenmi
        1
    laucenmi  
       2020-02-03 21:55:39 +08:00
    ipset -N gfw4 iphash family inet
    ip -f inet rule add fwmark 0x01/0x01 table 100
    ip -f inet route add local 0.0.0.0/0 dev lo table 100
    iptables -t nat -A OUTPUT -p tcp -m set --match-set gfw4 dst -j REDIRECT --to-port 1080
    iptables -t nat -A PREROUTING -p tcp -m set --match-set gfw4 dst -j REDIRECT --to-port 1080
    iptables -t mangle -A PREROUTING -p udp -m set --match-set gfw4 dst -j TPROXY --on-port 1080 --tproxy-mark 0x01/0x01

    我自己用的, dnsmasq 根据 g f w l i s t 自动添加 IP 到 gfw4, 最后通过 stun 测试是 Full Cone
    ysc3839
        2
    ysc3839  
       2020-02-03 22:13:51 +08:00   1
    建议使用 OpenWrt,官方源里面的 ss 带有 ss-rules,可以自动配置相关转发规则。
    https://github.com/openwrt/packages/tree/master/net/shadowsocks-libev

    同时 OpenWrt 也是开箱即用配置好了路由转发,不需要手动配置。
    linxy19957
        3
    linxy19957  
    OP
       2020-02-03 22:45:16 +08:00
    @laucenmi 对比了一下没有什么差别,请问你是什么操作系统呢?
    linxy19957
        4
    linxy19957  
    OP
       2020-02-03 23:00:28 +08:00
    @ysc3839 感谢回复,我的是树莓派 4b,当前 openwrt 只有 snapshot 版本
    ysc3839
        5
    ysc3839  
       2020-02-03 23:06:17 +08:00
    @linxy19957 你不介意的话可以先用着,看你选择了。
    laucenmi
        6
    laucenmi  
       2020-02-04 10:21:44 +08:00
    @linxy19957 openwrt 18 - 19.07 一直在用。 包括 v2ray 我也没有用他自己的路由规则,都是走的这套方案,不过在 IPv6 上 udp 有问题. 可以参考
    https://github.com/v2ray/v2ray-core/issues/1309
    manjuprajna
        7
    manjuprajna  
       2020-07-17 01:49:26 +08:00
    @laucenmi 我也是用的 openwrt1907,目前 ipv4 正常,ipv6 udp 还是有问题,请问您解决 ipv6 udp 转发的问题了吗? ip6tables 好像没有 tproxy 这个包。
    另外,我在 openwrt 里,把这几条命令复制到 firewall.user 里,
    ip -f inet rule add fwmark 0x01/0x01 table 100 这条不生效,启动之后要登录 ssh 里手动输入一次。
    现在只好把两条 ip 命令复制到 rc.local 里。
    请问您是怎么解决的?
    laucenmi
        8
    laucenmi  
       2020-07-17 09:25:59 +08:00
    @manjuprajna 没有哦,因为 ipv6 经常有莫名其妙的问题,所以我已经禁止 LAN 上的 ipv6 了
    这些命令我都是在 Firewall - Custom Rules 里面保存的,应该也是保存到 firewall.user 里面的,被你一说我重新检查了下 stun 发现也是 ip -f inet rule add 没有生效...
    搜索有类似的解决方案哦: https://forum.openwrt.org/t/solved-ip-rule-in-etc-firewall-user-is-flushed-somewhere/29797
    laucenmi
        9
    laucenmi  
       2020-07-17 11:19:38 +08:00
    @manjuprajna
    /etc/config/firewall 里 include 添加 reload 选项就没问题了。
    config include
    option path '/etc/firewall.user'
    option reload '1'
    不过 firewall.user 里面的命令会被多次执行,虽然没啥影响,但是看起来多条重复的 rule 停难看的, 需要自己改进脚本。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3046 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 00:34 PVG 08:34 LAX 17:34 JFK 20:34
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86