我需要配置我的路由器(Ubuntu Server 24/NNFTables),以便连接到 lan1 和 lan2 接口的计算机可以使用 wan1 或 wan2 接口浏览互联网,具体取决于子网 IP。

我通过两个不同的提供商接入互联网。

ISP 1:Bloco ip:111.11.111.0/28

ISP 2:Bloco ip:222.22.222.8/29

配置 netplan yaml:

网络:
    以太网:
        wan1:
            地址:
            - 111.11.111.2/28
            - 111.11.111.3/28
            - 111.11.111.4/28
            - 111.11.111.5/28
            - 111.11.111.6/28
            - 111.11.111.7/28
            - 111.11.111.8/28
            - 111.11.111.9/28
            - 111.11.111.10/28
            - 111.11.111.11/28
            - 111.11.111.12/28
            - 111.11.111.13/28
            - 111.11.111.14/28
            名称服务器:
                地址:
                - 8.8.8.8
                - 8.8.4.4
                搜索: []
            路线:
            - 至:默认
                通过:111.11.111.1
        wan2:
            地址:
            - 222.22.222.10/29
            - 222.22.222.11/29
            - 222.22.222.12/29
            - 222.22.222.13/29
            - 222.22.222.14/29
            名称服务器:
                地址:
                - 8.8.8.8
                - 8.8.4.4
                搜索: []
            路线:
            - 至:默认
                通过:222.22.222.9                
        局域网1:
            地址:
            - 192.168.10.1/24
            名称服务器:
                地址:[]
                搜索: []
        局域网2:
            地址:
            - 192.168.20.1/24
            名称服务器:
                地址:[]
                搜索: []
    版本: 2`
用户测试@路由器1:~$ ip 路由
默认通过 111.11.111.1 dev wan1 proto static
192.168.10.0/24 dev enp4s0 proto 内核范围链接 src 192.168.10.1
192.168.20.0/24 dev enp5s0 proto 内核范围链接 src 192.168.20.1
111.11.111.0/28 dev enp1s5 proto 内核范围链接 src 111.11.111.2
222.22.222.8/29 dev enp8s0 proto 内核范围链接 src 222.22.222.9

我们想要浏览的子网站及其各自的公共IP:

192.168.10.101 ---> 111.11.111.11
192.168.10.102 ---> 111.11.111.12
192.168.10.201 ---> 222.22.222.11
192.168.10.202 ---> 222.22.222.12
192.168.20.10 ---> 222.22.222.10

我发现我需要使用 IP ROUTE 处理多个路由表,但我尝试的所有配置都失败了……

有人知道我该如何解决这个问题吗?

我已经尝试了一些 nftables/ip 路由配置……但我无法使其工作……我搞砸了很多,甚至不知道我尝试过的一切……现在配置如下所示:

$ ip 路由
默认通过 111.11.111.9 dev wan1
192.168.10.0/24 dev lan1 proto 内核范围链接 src 192.168.10.1
192.168.20.0/24 dev lan2 proto 内核范围链接 src 192.168.20.1
111.11.111.0/28 dev wan1 proto 内核范围链接 src 111.11.111.2
222.22.222.8/29 dev wan2 proto 内核范围链接 src 111.11.111.10

$ ip 路由显示表 100
默认通过 111.11.111.1 dev wan1 proto static

$ ip 路由显示表 200
默认通过 222.22.222.9 dev wan2 proto static

$ ip 规则显示
0:从所有查找本地
32764:从 222.22.222.8/29 查找 200 原始静态
32765:从 111.11.111.0/28 查找 100 个原始静态
32766:来自所有查找主
32767:来自所有查找默认

2

  • 您尝试了什么配置?


    – 

  • 我根据现在的配置对其进行了编辑…但我已经尝试了一切。


    – 


最佳答案
1

您在问题中展示的路由配置看起来是解决方案的重要组成部分。为了进行测试,我使用找到我的完整测试环境。测试拓扑如下所示:

目标是我们可以remotehost从右侧的节点(node00通过node11)到达,并且每个节点将使用从 出发的适当出站路径router

此图中的节点router对应于您尝试配置的系统。它具有以下接口配置:

161: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    inet 111.11.111.2/28 scope global eth0
       valid_lft forever preferred_lft forever
    inet 111.11.111.11/28 scope global secondary eth0
       valid_lft forever preferred_lft forever
    inet 111.11.111.12/28 scope global secondary eth0
       valid_lft forever preferred_lft forever
169: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    inet 222.22.222.10/29 scope global eth1
       valid_lft forever preferred_lft forever
    inet 222.22.222.11/29 scope global secondary eth1
       valid_lft forever preferred_lft forever
    inet 222.22.222.12/29 scope global secondary eth1
       valid_lft forever preferred_lft forever
170: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    inet 192.168.10.1/24 scope global eth2
       valid_lft forever preferred_lft forever
171: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    inet 192.168.20.1/24 scope global eth3
       valid_lft forever preferred_lft forever

以下默认路由表:

root@router:/# ip route
default via 111.11.111.1 dev eth0
111.11.111.0/28 dev eth0 proto kernel scope link src 111.11.111.2
192.168.10.0/24 dev eth2 proto kernel scope link src 192.168.10.1
192.168.20.0/24 dev eth3 proto kernel scope link src 192.168.20.1
222.22.222.8/29 dev eth1 proto kernel scope link src 222.22.222.10

以下策略路由规则:

root@router:/# ip rule show
0:      from all lookup local
32764:  from 192.168.20.0/24 lookup 222
32765:  from 192.168.10.0/24 lookup 111
32766:  from all lookup main
32767:  from all lookup default

表格如下111

root@router:/# ip route show table 111
default via 111.11.111.1 dev eth0

表格如下222

root@router:/# ip route show table 222
default via 222.22.222.9 dev eth1

为了实现您的 NAT 目标,路由器具有以下 nft 规则集:

table ip nat {
        chain router_masquerade {
                type nat hook postrouting priority srcnat; policy accept;
                ip saddr 192.168.10.101 counter snat to 111.11.111.11
                ip saddr 192.168.10.102 counter snat to 111.11.111.12
                ip saddr 192.168.20.201 counter snat to 222.22.222.11
                ip saddr 192.168.20.202 counter snat to 222.22.222.12
                oifname "eth0" counter masquerade
                oifname "eth1" counter masquerade
        }
}

这将应用您在问题中列出的静态 NAT 条目,并将常规伪装应用于任何有lan1lan2没有明确条目的内容。


有了这个配置,如果我运行tcpdumpremotehost如下所示:

tcpdump -nn -i eth0

然后尝试ping -c1 remotehostnode00,我们看到:

19:19:00.808202 IP 111.11.111.11 > 100.64.64.100: ICMP echo request, id 31, seq 1, length 64
19:19:00.808236 IP 100.64.64.100 > 111.11.111.11: ICMP echo reply, id 31, seq 1, length 64

node00从到(a)的路径remotehost具有预期的源地址,并且 (b) 正在使用预期的路径。同样,如果我们从 尝试相同的操作node01,我们会看到:

19:19:58.209656 IP 111.11.111.12 > 100.64.64.100: ICMP echo request, id 33, seq 1, length 64
19:19:58.209717 IP 100.64.64.100 > 111.11.111.12: ICMP echo reply, id 33, seq 1, length 64

再次,它使用预期的路径,我们看到我们的外部可见地址是111.11.111.12,正如我们的 NAT 映射所预期的那样。

如果我们尝试从 上的节点进行类似的操作lan2,我们会看到node10

19:21:08.356388 IP 222.22.222.11 > 100.64.64.100: ICMP echo request, id 35, seq 1, length 64
19:21:08.356433 IP 100.64.64.100 > 222.22.222.11: ICMP echo reply, id 35, seq 1, length 64

来自node11

19:21:30.824730 IP 222.22.222.12 > 100.64.64.100: ICMP echo request, id 38, seq 1, length 64
19:21:30.824799 IP 100.64.64.100 > 222.22.222.12: ICMP echo reply, id 38, seq 1, length 64

据我所知,这种行为满足了你的所有目标。