前排提醒

这个机器的情况是一个国内 BGP 网卡,一个香港网卡,一个 IX 网卡。这里只讨论了处理国内 BGP <-> 香港的情况。

前置操作

首先多网卡修复需要有这个。

<网关地址> dev <接口名字> proto kernel metric 256 pref medium
<id>:  from <接口地址> lookup <table id>

ip route add default via <网关地址> dev <接口名字> table <路由表 id>
ip rule add from <接口地址> table <路由表 id>

修复方法

如果你是用的 realm 转发,你有几种选择:

  1. 直接在 realm 监听你的网卡入口 IP。

  2. realm 监听 [::] 这个时候 realm 会用香港网卡上的 IP 从香港网卡上发数据包,数据包能到你的宽带上,但是软件测试是不通的,因为去程数据包的目标IP和回程数据包的源 IP 不一样。

ip -6 route add 2408:8000::/20 via 入口网卡的网关 dev 入口网卡名字 src 入口网卡的IP
ip -6 route add 2409:8000::/20 via 入口网卡的网关 dev 入口网卡名字 src 入口网卡的IP
ip -6 route add 240e::/18 via 入口网卡的网关 dev 入口网卡名字 src 入口网卡的IP

在路由表里加上这三条之后,realm 就可以知道用哪个指定的网卡出去了。

  1. 修改 nftables
#!/usr/sbin/nft -f

table inet allow-udp
delete table inet allow-udp

table inet allow-udp  {
  chain out {
    type route hook output priority 0; policy accept;
    ip6 daddr {2408:8000::/20,2409:8000::/20,240e::/18} udp sport <realm 的监听端口> ip6 saddr set <接口地址>;
  }
}

这会把源 IP 给改成入口网卡的 IP,然后会重新查路由表,路由表里有一个 from <入口 IP> 就会从入口网卡上发出去了。

话题

评论

评论加载中…