山语 发表于 2023-5-30 16:11:32

请教国内外IP分流 iptables ipset

我路由上建了一个OpenConnect接口,现在我想国内的IP走pppoe-wan口,国外的IP走OpenConnect的接口。
ipset我添加了国内的IP,iptables那边应该怎么添加规则?

谢谢大佬不吝赐教。

山语 发表于 2023-5-30 19:39:17

jkle 发表于 2023-5-30 18:48
可以的話在配置文件添加路由規則,感覺這個最簡單

直接添加路由规则太多了,路由器直接断网了 :'(

萝卜大侠 发表于 2023-5-30 20:33:49

山语 发表于 2023-5-30 19:39
直接添加路由规则太多了,路由器直接断网了

我这里有一个例子,希望对你有所帮助吧
https://royal-garment-e79.notion.site/0aae094c23d94d119a01496bd738203d

山语 发表于 2023-5-30 22:38:53

本帖最后由 山语 于 2023-5-30 23:18 编辑

萝卜大侠 发表于 2023-5-30 20:33
我这里有一个例子,希望对你有所帮助吧
https://royal-garment-e79.notion.site/0aae094c23d94d119a01496 ...
谢谢大佬提供的脚本。

我OpenConnect开了使用默认网关,运行了脚本后,不管哪里的IP还是全部走的vpn-oc这个接口

山语 发表于 2023-6-1 10:09:55

jkle 发表于 2023-5-31 17:14
我用GL-INET的官方界面做了分流,由於添加太多也會崩潰或系統運行緩慢,所以放棄IP分流,而採用域名分流, ...

我现在用了PBR+ipset,也还不错,加上DNSMASQ,算是搞定了

萝卜大侠 发表于 2023-6-1 19:35:53

山语 发表于 2023-5-30 22:38
谢谢大佬提供的脚本。

我OpenConnect开了使用默认网关,运行了脚本后,不管哪里的IP还是全部走的vpn-oc这 ...

这个脚本并不是能直接运行就用的,你的根据你实际的接口情况修改一下

山语 发表于 2023-6-1 21:41:12

萝卜大侠 发表于 2023-6-1 19:35
这个脚本并不是能直接运行就用的,你的根据你实际的接口情况修改一下

make_ipset()
{
        ipset create chinaips hash:net family inet hashsize 1024 maxelem 1000000
}

set_ipset()
{
        ipset flush chinaips 2>/dev/null
        while read -r line;do ipset add chinaips $line;done < /etc/chinaips
}

destroy_ipset()
{
        ipset destroy chinaips 2>/dev/null
}

set_route()
{
        ip route flush table 20
        route="$(ip route)"
        IFS_sav=$IFS
        IFS=$'\n\n'
        for line in $route
        do
                IFS=$IFS_sav
                if [ -n "$(echo "$line"|grep -w -e eth1 -e br-lan)" ];then
                        ip route add $line table 20
                fi
                IFS=$'\n\n'
        done
        IFS=$IFS_sav
}

set_route_rule()
{
        echo "ip ruledel from all fwmark 0x200000/0x200000 lookup 20 pref 20"
        ip ruledel from all fwmark 0x200000/0x200000 lookup 20 pref 20
       
        echo "ip rule add from all fwmark 0x200000/0x200000 lookup 20 pref 20"
        ip rule add from all fwmark 0x200000/0x200000 lookup 20 pref 20
}

set_firewall()
{
        while [ true ];do
                [ ! -f /var/run/fw3.lock ] && break
                sleep 1
        done
        touch /var/run/fw3.lock
       
        iptables -t mangle -N ROUTE_CHINAIPS
        iptables -t mangle -F ROUTE_CHINAIPS
        iptables -t mangle -D PREROUTING -j ROUTE_CHINAIPS 2>/dev/null
        iptables -t mangle -I PREROUTING -j ROUTE_CHINAIPS
        iptables -t mangle -I ROUTE_CHINAIPS -i br-lan -m set ! --match-set chinaips dst -j MARK --set-mark 0x200000/0x200000
        iptables -t mangle -A ROUTE_CHINAIPS -j CONNMARK --save-mark --nfmask 0x200000 --ctmask 0x200000
       
       
        iptables -t mangle -N ROUTE_CHINAIPS_OUT
        iptables -t mangle -F ROUTE_CHINAIPS_OUT
        iptables -t mangle -D OUTPUT -j ROUTE_CHINAIPS_OUT 2>/dev/null
        iptables -t mangle -I OUTPUT -j ROUTE_CHINAIPS_OUT
        iptables -t mangle -I ROUTE_CHINAIPS_OUT -m set ! --match-set chinaips dst -j MARK --set-mark 0x200000/0x200000
        iptables -t mangle -A ROUTE_CHINAIPS_OUT -j CONNMARK --save-mark --nfmask 0x200000 --ctmask 0x200000
        rm /var/run/fw3.lock
}

make_ipset
set_ipset
set_route
set_route_rule
set_firewall

这是我稍微修改的,但不知道哪里没对

山语 发表于 2023-6-1 21:50:14

jkle 发表于 2023-6-1 16:56
能分享一下吗?
看是不是更好

图片是基本设置
最下面的vpn-policy-routing.cn.user脚本的内容:
#!/bin/sh

TARGET_IPSET='wan'
TARGET_FNAME="/etc/chinaips"

_ret=1

if [ -s "$TARGET_FNAME" ]; then
      ipset create $TARGET_IPSET hash:net
      awk -v ipset="$TARGET_IPSET" '{print "add " ipset " " $1}' "$TARGET_FNAME" | ipset restore -! && _ret=0
fi

return $_ret

山语 发表于 2023-6-2 21:38:24

jkle 发表于 2023-6-2 12:19
如果沒錯應該是手動更新CHINAIPS文件吧!
其實我也可以IP分流,比這個更簡單,直接官方界面添加即可,實際 ...

可以把你的方案共享一下吗?

山语 发表于 2023-6-3 20:34:34

jkle 发表于 2023-6-2 22:24
我對腳本不是很懂,用的也少,都是手動編輯配置文件,官方固件把功能都做出來了,不過添加規則太多會導致界 ...

用的是哪个版本的官方固件?可以给个链接吗?

萝卜大侠 发表于 2023-6-6 11:06:17

山语 发表于 2023-6-1 21:50
图片是基本设置
最下面的vpn-policy-routing.cn.user脚本的内容:

/etc/chinaips这个文件你要准备好,可以自己从其他地方下载或生成
页: [1]
查看完整版本: 请教国内外IP分流 iptables ipset