AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1164687
Accepted
Crazy Polenta
Crazy Polenta
Asked: 2024-09-03 01:21:09 +0800 CST2024-09-03 01:21:09 +0800 CST 2024-09-03 01:21:09 +0800 CST

使用多个表来路由来自两个 ISP 的 IP

  • 772

我需要配置我的路由器(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:来自所有查找默认
routing
  • 1 1 个回答
  • 93 Views

1 个回答

  • Voted
  1. Best Answer
    larsks
    2024-09-04T03:27:53+08:002024-09-04T03:27:53+08:00

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

    网络拓扑图

    目标是我们可以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 条目,并将常规伪装应用于任何有lan1或lan2没有明确条目的内容。


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

    tcpdump -nn -i eth0
    

    然后尝试ping -c1 remotehost从node00,我们看到:

    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
    

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

    • 0

相关问题

  • 无法通过 Ubuntu VPN 访问外部网络

  • 将路由永久添加到 Solaris 10

  • Quagga 套件中的 ./configure --disable-zebra 代表什么?

  • 使用特定接口进行出站连接(Ubuntu 9.04)

  • Linux TC/策略路由工具

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve