分享一个 Tailscale 在 Ubuntu 下与 iptables REDIRECT 规则 (全局代理) 冲突问题的解法 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
请不要在回答技术问题时复制粘贴 AI 生成的内容
nealot

分享一个 Tailscale 在 Ubuntu 下与 iptables REDIRECT 规则 (全局代理) 冲突问题的解法

  •  
  •   nealot Feb 10, 2024 2170 views
    This topic created in 806 days ago, the information mentioned may be changed or developed.

    楼主的软路由是裸的 Ubuntu Server ,然后从鸟哥的网站拷贝了一个脚本做防火墙。

    这个防火墙脚本 (iptables.sh) 的符号链接放在了 /etc/ppp/ip-up.d 里,这样系统拨号成功后就会自动执行。

    这个脚本里有一行:

    iptables -t nat -I OUTPUT -d 1.1.1.1 -p tcp --dport 53 -j REDIRECT --to-ports 7001 

    给 tcp 的 dns 流量启用了代理。但是今天装完 tailscale 发现它居然不工作了 (组网本身倒是好的)。

    说起来 tailscale 在系统中建立了若干的策略路由,在 mangle 表中也加了一些东西。经过半个多小时的排查,现在终于可以 100% 确定问题在 filter 表的 INPUT 链中。

    装完 tailscale 的 INPUT 链是长这样的:

    $ iptables -t filter -L -n -v Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 23508 8898K ts-input all -- * * 0.0.0.0/0 0.0.0.0/0 29947 11M ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 31570 10M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 1289 133K ACCEPT all -- br0 * 0.0.0.0/0 0.0.0.0/0 

    tailscale 在最前面插了一个 ts-input 进来,是长这样的:

    Chain ts-input (1 references) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- lo * 100.100.0.2 0.0.0.0/0 0 0 RETURN all -- !tailscale0 * 100.115.92.0/23 0.0.0.0/0 15 900 DROP all -- !tailscale0 * 100.64.0.0/10 0.0.0.0/0 736 93792 ACCEPT all -- tailscale0 * 0.0.0.0/0 0.0.0.0/0 897 70910 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:50000 

    而为了解决问题,只需要执行这样一行脚本:

    iptables -t filter -I INPUT -i lo -p tcp --dport 7001 -j ACCEPT 

    修复后的 INPUT 链是长这样的:

    $ iptables -t filter -L -n -v Chain INPUT (policy DROP 1 packets, 44 bytes) pkts bytes target prot opt in out source destination 378 23020 ACCEPT tcp -- lo * 0.0.0.0/0 0.0.0.0/0 tcp dpt:7001 30180 11M ts-input all -- * * 0.0.0.0/0 0.0.0.0/0 31973 12M ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 35339 12M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 1618 165K ACCEPT all -- br0 * 0.0.0.0/0 0.0.0.0/0 

    也就是说,原本 tcp 的 dns 查询,经过 REDIRECT 规则,来到了 filter 表的 INPUT 链,但是被 ts-input 给过滤掉了 (楼主 100% 确定)。

    说实话,楼主对着 ts-input 又看了两分钟,还是没发现问题在哪里。所以这个帖子就权当记录了。但是另外一方面,tailscale 各种场景下,对于主机 iptables 的调整逻辑,显然仍有优化的空间。

    1 replies    2024-02-10 22:25:46 +08:00
    beyondstars
        1
    beyondstars  
       Feb 10, 2024
    iptables 属于关键系统设置,为了保护宿主机的环境,其实也可以让一些需要修改 iptables 的程序隔离起来运行(创建单独的 netns ,用 Docker container 运行,用 VM 运行)。
    About     Help     Advertise     Blog     API     FAQ     Solana     1058 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 40ms UTC 23:12 PVG 07:12 LAX 16:12 JFK 19:12
    Do have faith in what you're doing.
    ubao msn 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