Openwrt 透明代理的痛点

2023-05-15 20:48:26 +08:00
 terrytw

虽然说很多工具都没用过,但是看下来基本上 Openwrt 上透明代理自动分流,都是依赖 iptables/nftables 来匹配并转发发至透明代理 这样产生的一个问题是,openwrt 自身设置的一些规则往往就无效了

比如在 openwrt 里设置目标 IP 1.2.3.4 的包全部丢弃,但是这个规则是在 filter 表里的,而透明代理一般都是在 mangle 表里的,优先级更高,如果 1.2.3.4 走透明代理的话,上述规则就彻底失效了

不知道有谁有什么好的建议呢

6796 次点击
所在节点    宽带症候群
38 条回复
YGBlvcAK
2023-05-16 14:06:26 +08:00
这还不简单吗? mangle 表里 return ,再在 filter 表的 FORWARD 链 drop 掉
azure2023us559
2023-05-16 19:27:00 +08:00
你真的了解透明代理吗?

可以不需要用 mangle 表,请配合 ipset

ss-libev 给的方案太粗鲁了,将所有国外 ip 经过代理,其实完全不需要。

完全可以通过 ipset 解决。



/etc/firewall.user
# create ipset
ipset create gfw hash:ip hashsize 4096

# for gfw vultr us
iptables -t nat -I PREROUTING -p tcp -m set --match-set gfw dst -m multiport --dports 80,443 -j REDIRECT --to-ports 1234
iptables -t nat -I OUTPUT -p tcp -m set --match-set gfw dst -m multiport --dports 80,443 -j REDIRECT --to-ports 1234

配合 dnsmasq.conf
ipset=/google.com/gfw
server=/google.com/127.0.0.1#5300

/etc/rc.local
# for gfw
/opt/ss-libev/ss-tunnel -c /opt/ss-libev/ss.json -b 127.0.0.1 -l 5678 -L 127.0.0.1:53 -f /var/run/ss-tunnel.pid
/opt/ss-libev/dns-forwarder -b 0.0.0.0 -p 5300 -s 127.0.0.1:5678 &
/opt/ss-libev/ss-redir -c /opt/ss-libev/ss.json -b 0.0.0.0 -l 1234 -f /var/run/ss-redir.pid
azure2023us559
2023-05-16 19:31:04 +08:00
以上,只需要 1 条 iptables 解决

# for gfw vultr us
iptables -t nat -I PREROUTING -p tcp -m set --match-set gfw dst -m multiport --dports 80,443 -j REDIRECT --to-ports 1234

output 链是让本地路由器访问 gfw ,也可以走代理。
terrytw
2023-05-16 20:34:29 +08:00
@azure2023us559 你真的了解透明代理嘛?用 mangle 表是为了 UDP 流量
1 条 iptbales 就解决的前提是,你的需求很简单,我随便说几个功能,你的 iptables 条数就会不停往上涨
1. NAS 不走透明代理
2. NAS 不走透明代理的前提下,部分 tracker 的域名对应流量强制走代理
3. Windows 下某个程序不走透明代理,其他所有流量自动分流
terrytw
2023-05-16 20:37:44 +08:00
@YGBlvcAK
@missdeer
@gesse
@cwbsw
手写 iptables/nftables 规则,在 mangle 表里做 return 当然是可行的,但是 fw4 restart 之后规则就没了怎么解决呢?
以前还有 firewall.user 可以 include 在防火墙重启后,加载用户的规则,现在 firewall4 这个功能已经没有了
大家是不是没用过 fw4....
ftfunjth
2023-05-16 21:15:40 +08:00
先说明你是通过 tproxy 还是 dnat 实现的透明代理
azure2023us559
2023-05-16 21:37:55 +08:00
@terrytw udp 流量主要是有哪些需求? dns ?游戏?
azure2023us559
2023-05-16 21:42:03 +08:00
@terrytw 新版 op 用的 fw4 还有很多 bug 。踩完坑就知道了。我主要会用到 docker ,建议退回到 old 稳定版 21.0x
missdeer
2023-05-16 21:57:26 +08:00
@terrytw iptables-persistent 了解一下
huaxie1988
2023-05-16 22:14:02 +08:00
@terrytw 22.3 可以用 fw3 的。
ftfunjth
2023-05-16 22:37:09 +08:00
mangle 链的 PREROUTING 中的 ipse 规则 t 是一个很好的方案, 它可以让你免去对 forwarded 的 ip package routing 两次的开销(network card => lo => network card), 不加 ipset 情况下使用 TPROXY 的代理工具如 v2ray 分流,一定会多 routing 一次。
ftfunjth
2023-05-16 22:37:50 +08:00
@Lentin 会多路由一次
ftfunjth
2023-05-16 22:38:47 +08:00
建议对 mangle 链的 OUTPUT 也加上分流国内 ip 的 ipset 规则。
shamburger
2023-05-16 22:38:50 +08:00
我在使用 pbr (policy-based routing) 即策略路由插件,好在以纳入 openwrt 的主 repo 。
- 支持 fw4 + nft 或 fw3 + iptables
- 可以通过 luci-app-pbr 填写规则 或 拼接自定义脚本(比如 china-ip 分流)
- 自动识别 wan 和隧道出口,并搭建相应的 fwmark 、ipset 、nftset
- 通过 hotplug.d 热插拔即自动刷新

规则导流对象主要为 openvpn 或 wireguard 隧道出口。我不确定 pbr 是否支持代理工作模式。
https://docs.openwrt.melmac.net/pbr/
YGBlvcAK
2023-05-16 22:53:35 +08:00
op 是给小白用的,楼主既然懂 Linux ,不如直接在 debian 中搭建一套,熟练了 10 几分钟就搭建完了,上面这需求就太简单了

话说我就是这么干的,所有工具都是自己安装的,想装什么版本就装什么版本,多套方案随意切换
cwbsw
2023-05-17 08:57:44 +08:00
Firxiao
364 天前
@terrytw nftables 规则放在 /etc/nftables.d
aliensb
245 天前
老哥,这个问题最后怎么解决的呢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/940228

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX