taikobo

Openwrt 透明代理的痛点

  •  
  •   taikobo · May 15, 2023 · 11286 views
    This topic created in 1274 days ago, the information mentioned may be changed or developed.

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

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

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

    Supplement 1  ·  May 16, 2023
    其实解决办法是有的,最直接的就是把 1.2.3.4 不走代理就行了
    但是感觉真的不怎么优雅。
    38 replies  •  2023-09-14 17:02:32 +08:00
    Lentin
    Lentin
    May 15, 2023
    1
    在 mangle 表里面处理=。=
    yaott2020
    yaott2020
    May 15, 2023 via Android
    2
    用 tun ?
    taikobo
    taikobo
    OP
    May 15, 2023
    3
    @Lentin 以前我还在 raw 表里处理呢,感觉不是什么很好的办法
    @yaott2020 tun 的分流怎么做的呀
    taikobo
    taikobo
    OP
    May 15, 2023
    4
    主要是现在 22.03 里面,没法在 fw4 restart 之后附加规则了,所以在 raw 表里加规则都不行了
    lovelylain
    lovelylain
    May 15, 2023 via Android
    6
    taikobo
    taikobo
    OP
    May 15, 2023
    7
    @lovelylain 看到你说 iptables+fwmark ,难道你的 iptables 规则不是在 mangle 和 nat 表嘛?
    taikobo
    taikobo
    OP
    May 15, 2023
    8
    @Lentin 看来看去 openclash 也是用 iptables 在 mangle 表做分流啊,不知道你想表达什么意思
    Lentin
    Lentin
    May 15, 2023 via iPhone❤️1
    9
    @terrytw clash 本身有一套规则可以 reject 不需要 iptable 再屏蔽了
    crysislinux
    crysislinux
    May 16, 2023 via Android
    10
    感觉确实没有太好的办法,可以多加一个 openwrt 来先处理这些 IP 。但是这样一样透明代理又不能针对某个 lan 上的设备做特殊处理了。
    yanyanjia
    yanyanjia
    May 16, 2023
    11
    加一个 openwrt ,两个 openwrt 之间用 ospf 协议分流呢?
    huaxie1988
    huaxie1988
    May 16, 2023 via Android
    12
    @terrytw 22.3 可以删除 nft 使用 iptables 。
    opkg remove luci-ssl luci luci-app-firewall firewall4
    opkg install iptables-legacy firewall luci
    而且你这种需要在透明代理的规则前可以加一条 ipset 跳过代理,封 ip 规则也写为封锁该 ipset ,然后将需要封锁的 ip 添加到该 ipset ,ipset 比一条一条的 ip 规则效率更高。
    ccde8259
    ccde8259
    May 16, 2023 via iPhone
    13
    一套 OpenWRT 不行就两套……主路由 ER2260T 通过策略路由分流,目标地址国内 IP 或者源地址旁路网关直接上行宽带提供商,其余绕行旁路网关。再在旁路网关上走代理出去……
    qwvy2g
    qwvy2g
    May 16, 2023 via Android
    14
    是的,如果流量被分流到代理中,openwrt 防火墙设置就无效了。不如考虑在 openwrt 代理软件中添加绕过代理或者直接在代理里面添加新规则 IPblock 这些 IP 。
    unnamedhao
    unnamedhao
    May 16, 2023 via iPhone
    15
    mangle 里把 1.2.3.4 return
    kokutou
    kokutou
    May 16, 2023 via Android
    16
    最精确的还得是客户机上装客户端。。。
    mritd
    mritd
    May 16, 2023 via iPhone
    17
    搞不明白 openwrt ,自己搓了一个 github.com/mritd/tpclash
    cwbsw
    cwbsw
    May 16, 2023
    18
    手写规则就可以了,用现成工具肯定多多少少有不如意的地方。
    gesse
    gesse
    May 16, 2023
    19
    学学 GFW ,哈哈哈
    iptables -t nat -A PREROUTING -d 1.2.3.4 -j DNAT --to 2.2.2.2
    missdeer
    missdeer
    May 16, 2023
    20
    不要用一键安装的插件就行了,自己手写 iptables
    YGBlvcAK
    YGBlvcAK
    May 16, 2023
    21
    这还不简单吗? mangle 表里 return ,再在 filter 表的 FORWARD 链 drop 掉
    azure2023us559
    azure2023us559
    May 16, 2023
    22
    你真的了解透明代理吗?

    可以不需要用 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
    azure2023us559
    May 16, 2023
    23
    以上,只需要 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 ,也可以走代理。
    taikobo
    taikobo
    OP
    May 16, 2023
    24
    @azure2023us559 你真的了解透明代理嘛?用 mangle 表是为了 UDP 流量
    1 条 iptbales 就解决的前提是,你的需求很简单,我随便说几个功能,你的 iptables 条数就会不停往上涨
    1. NAS 不走透明代理
    2. NAS 不走透明代理的前提下,部分 tracker 的域名对应流量强制走代理
    3. Windows 下某个程序不走透明代理,其他所有流量自动分流
    taikobo
    taikobo
    OP
    May 16, 2023
    25
    @YGBlvcAK
    @missdeer
    @gesse
    @cwbsw
    手写 iptables/nftables 规则,在 mangle 表里做 return 当然是可行的,但是 fw4 restart 之后规则就没了怎么解决呢?
    以前还有 firewall.user 可以 include 在防火墙重启后,加载用户的规则,现在 firewall4 这个功能已经没有了
    大家是不是没用过 fw4....
    envooy
    envooy
    May 16, 2023 via iPhone
    26
    先说明你是通过 tproxy 还是 dnat 实现的透明代理
    azure2023us559
    azure2023us559
    May 16, 2023
    27
    @terrytw udp 流量主要是有哪些需求? dns ?游戏?
    azure2023us559
    azure2023us559
    May 16, 2023
    28
    @terrytw 新版 op 用的 fw4 还有很多 bug 。踩完坑就知道了。我主要会用到 docker ,建议退回到 old 稳定版 21.0x
    missdeer
    missdeer
    May 16, 2023
    29
    @terrytw iptables-persistent 了解一下
    huaxie1988
    huaxie1988
    May 16, 2023 via Android
    30
    @terrytw 22.3 可以用 fw3 的。
    envooy
    envooy
    May 16, 2023❤️1
    31
    mangle 链的 PREROUTING 中的 ipse 规则 t 是一个很好的方案, 它可以让你免去对 forwarded 的 ip package routing 两次的开销(network card => lo => network card), 不加 ipset 情况下使用 TPROXY 的代理工具如 v2ray 分流,一定会多 routing 一次。
    envooy
    envooy
    May 16, 2023
    32
    @Lentin 会多路由一次
    envooy
    envooy
    May 16, 2023
    33
    建议对 mangle 链的 OUTPUT 也加上分流国内 ip 的 ipset 规则。
    shamburger
    shamburger
    May 16, 2023❤️1
    34
    我在使用 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
    YGBlvcAK
    May 16, 2023 via Android
    35
    op 是给小白用的,楼主既然懂 Linux ,不如直接在 debian 中搭建一套,熟练了 10 几分钟就搭建完了,上面这需求就太简单了

    话说我就是这么干的,所有工具都是自己安装的,想装什么版本就装什么版本,多套方案随意切换
    Firxiao
    Firxiao
    May 17, 2023❤️1
    37
    @terrytw nftables 规则放在 /etc/nftables.d
    aliensb
    aliensb
    Sep 14, 2023
    38
    老哥,这个问题最后怎么解决的呢
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1353 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 132ms · UTC 17:13 · PVG 01:13 · LAX 09:13 · JFK 12:13
    ♥ Do have faith in what you're doing.