VyOS + sing-box + Fake-IP:实现全局无感透明代理(二)

在 VyOS 的统一配置架构下,一旦 sing-box 容器通过 allow-host-networksnet-admin 权限成功创建了 tun0 接口,该接口在系统层面的地位就等同于物理网卡。

你可以直接将其定义为防火墙区域(Zone)的成员,并为其配置专用的路由表。


1. 将 tun0 加入防火墙 LAN 区域

在 VyOS 的 Zone-Policy 防火墙架构中,我们将 tun0 视作内部可信接口。

set firewall zone LAN member interface tun0 
commit
save

为什么这样做? 这样做可以确保 tun0 与你的物理局域网接口(如 eth1)处于同一信任等级,它们之间可以直接通信,且共享相同的流向 WAN 的过滤规则。

2. 配置 Fake-IP 静态路由(策略驱动)

为了实现无感分流,我们需要告诉 VyOS:“所有去往假 IP 地址段的流量,请走 tun0 出去。”

为了不干扰主路由表,建议使用分离路由表配合策略路由 (PBR)

A. 创建独立的路由表 (Table 100)

set protocols static table 100 route 0.0.0.0/0 interface tun0
set protocols static table 100 route6 ::/0 interface tun0

B. 创建防火墙的FAKE-IP组

set firewall group ipv6-network-group FAKE_IPV6 network 'fc00::/18'
set firewall group network-group FAKE_IP network '198.18.0.0/15'

C. 创建策略路由 (Policy Route)

set policy route PBR_PROXY interface 'eth1'
set policy route PBR_PROXY rule 10 destination group network-group 'FAKE_IP'
set policy route PBR_PROXY rule 10 set table '100'
set policy route6 PBR_PROXY_V6 interface 'eth1'
set policy route6 PBR_PROXY_V6 rule 10 destination group network-group 'FAKE_IPV6'
set policy route6 PBR_PROXY_V6 rule 10 set table '100'
commit
save

注意:route与route6,eth1是你的LAN口网卡名称,如果是网桥填写网桥名。

3. 验证配置

由于 VyOS 的配置是高度一致的,你可以通过标准命令检查:

  1. 检查路由表 100: show ip route table 100预期输出:S*> 198.18.0.0/16 [1/0] is directly connected, tun0
  2. 检查防火墙关联:show firewall zone LAN预期输出中应包含 tun0

4. 测试DNS并完成singbox接管

#本地机器测试,测试ipv6需要加上网卡名称
nslookup google.com 192.168.100.1:5353
Server:         192.168.100.1:5353
Address:        198.18.3.40#53

Name:   google.com
Address: 198.18.0.34
Name:   google.com
Address: fc00::20

如果能成功获得fake-ip,说明singbox的dns解析没有问题。

此时我们可以关闭vyos的dns转发,并修改singbox的配置文件监听端口53

#修改singbox的配置文件,让singbox来监听53号端口
    {
      "type": "direct",
      "tag": "dns-in",
      "listen": "::",
      "listen_port": 53
    }
#删除vyos的dns转发
delete service dns forwarding
#修改RA下发的ipv6dns,前面配置的阿里的dns。'fe80::be24:11ff:fe80:a32a'为LAN口的本地链路地址
delete service router-advert interface eth1 name-server '2400:3200::1'
set service router-advert interface eth1 name-server 'fe80::be24:11ff:fe80:a32a'
commit
save
exit   #回到操作模式
#重启singbox
restart container sing-box

总结

通过上述操作,你已经完成了ipv4和ipv6双栈“网络路径(PBR)+ 安全边界(Zone)+ 业务容器(sing-box)” 的闭环配置。这种方案比在 Linux 下手动写 iptablesip route 要清晰得多,所有改动都记录在 VyOS 的 config.boot 中。

特别是解决ipv6无法使用旁路网关的难题,并且只有需要代理的流量才会进入到singbox中,杜绝DNS泄漏的同时减少资源的占用。

目前存在的问题:Telegram应该是连不上,需要把Telegram的IP地址写入静态路由中并指向TUN0,我没使用,就不配置了。


已发布

分类

来自

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注