V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cnbatch
V2EX  ›  宽带症候群

FreeBSD 的主副路由表(FIB, 多路由表)值得好好利用,指定应用走特定虚拟网卡十分方便

  •  
  •   cnbatch · 137 天前 · 1296 次点击
    这是一个创建于 137 天前的主题,其中的信息可能已经有所发展或是发生改变。

    简单来说,就是选定的应用走特定的路由表,达到指定出口的效果,连防火墙规则都不用配置。简单到只需要几个字符的简短命令即可做到。

    比如,我可以在一台 FreeBSD 机器连接上 Cloudflare Warp ,连接时“改道”至副路由表(假设是1 号表)。连接完成后,WireGuard 会在副路由表中把默认路由指向 Cloudflare Warp 的 IP 。这样一来,其它程序都会不会受到影响,继续按照主路由表(即 0 号表)的规则通讯。

    如何使指定程序走 Cloudflare Warp 通道呢?我要 ping 命令走该通道,只需前面加一条 setfib 命令即可:

    setfib 1 ping -c 10 8.8.8.8
    

    就这么简单。现在 ping 程序就从 Cloudflare Warp 通道出去了。各种联网程序都可以这样做。

    对于开机自启的服务程序,也可以使它们走副路由表。只需要编辑 rc.conf ,给对应程序添加_fib=1后缀即可。就像这样:

    somesocks_enable="YES"
    somesocks_fib=1
    

    WireGuard 除外,需要编辑 wg*.conf 加一行 Table = 1 才可以。


    注意:需要先启用 FIB 。

    默认情况下,FreeBSD 只会提供单个路由表,想要启用副路由表就必须自行启用。步骤很简单:

    打开 /boot/loader.conf ,加入一行:

    net.fibs=2
    

    重启系统。

    现在,0 号表就是默认路由表,我称之为主路由表。其它编号的就是副路由表。

    想要多少个路由表,数值就写多少。只要有需要,net.fibs=100都可以。


    我利用这个特点在 VPS 上连接了 Cloudflare Warp ,将*ray/ss 的流量改成走 Cloudflare Warp 通道,而自己的中转程序继续走默认路由表,达到入口 IP 和出口 IP 都不同的效果:
    利用 FreeBSD 主副路由表(FIB)在服务器使用 Cloudflare Warp

    在这个基础上可以延伸出更灵活的做法,比如同时连上多个 wireguard 隧道,多个 ss 分别走对应的通道,每个 ss 监听不同的端口,中转程序连接不同的端口即可实现动态切换出口位置。比起单路由表+策略路由,这样做的灵活度高了很多。

    PS: 中转程序不一定必须是我链接里的那个,也可以是其它转发程序

    5 条回复    2024-07-11 20:32:44 +08:00
    cyaki
        1
    cyaki  
       137 天前 via Android
    感谢分享
    YGBlvcAK
        2
    YGBlvcAK  
       136 天前
    作为网关时间,如果指定微信走特定出口呢?
    cnbatch
        3
    cnbatch  
    OP
       136 天前
    @YGBlvcAK 这种情况只能继续使用专门路由条目或者防火墙规则。setfib 只对 FreeBSD 机器里面运行的程序有效。
    cest
        4
    cest  
       136 天前
    用 linux 微信也许可以用 cgroup
    win32 就非得用第三方了,然后可能被微信 ban
    infinet
        5
    infinet  
       133 天前   ❤️ 1
    dnsmasq 的--ipset 选项在 Linux 下把某个域名解析的 IP 加到 ipset ,它的官方文档没提到的是这个功能在 freebsd 下也能用,不过是加到 pf table ,和 setfib 合用实现按域名分流。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1634 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 16:53 · PVG 00:53 · LAX 08:53 · JFK 11:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.