Operation

Linux 多网卡跨网段上网路由配置

Linux 多网卡跨网段上网路由配置

  • 生产场景:做私有云机房部署的童鞋应该经常会碰到一个问题,就是客户要求集群必须跑在企业的商密网中,但部署运维难免需要ssh登录到集群(内网),同时 Chrome 需要访问公网查资料啥的(公网),还要能访问集群的各种 bashboard 页面(内网),切来切去总数很麻烦,那有没更优雅的办法呢? 有的,使用双网卡手动配 routes,如下就是我记录了某次在给客户部署私有云集群时配置 routes 的过程。

  • 网络拓扑图

网卡名 网卡类型 网段 网络类型 Gateway
enp3s0 有线以太网卡 10.65.30.0/24 企业内部商密网 10.65.30.1
wlp2s0 无线以太网卡 172.20.10.0/24 手机热点网络 172.20.10.1
  • 如下操作环境是 Dell 开发本 Ubuntu 20.04
wadmin@wadmin-pro:~$ # 首先看看OS自动配的路由
wadmin@wadmin-pro:~$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.65.30.1      0.0.0.0         UG        0 0          0 enp3s0
0.0.0.0         172.20.10.1     0.0.0.0         UG        0 0          0 wlp2s0
10.65.30.0      0.0.0.0         255.255.255.0   U         0 0          0 enp3s0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 enp3s0
172.17.0.0      0.0.0.0         255.255.0.0     U         0 0          0 docker0
172.20.10.0     0.0.0.0         255.255.255.240 U         0 0          0 wlp2s0

wadmin@wadmin-pro:~$ # 将无关的和 0.0.0.0 的路由统统删掉,以防交叉规则逻辑不对
wadmin@wadmin-pro:~$ sudo route delete -net 0.0.0.0 gw 10.65.30.1 enp3s0
wadmin@wadmin-pro:~$ 
wadmin@wadmin-pro:~$ # 这条貌似不能删,如果删除了会广播不可达
wadmin@wadmin-pro:~$ #sudo route delete -net 10.65.30.0/24 gw 0.0.0.0 enp3s0
wadmin@wadmin-pro:~$ 
wadmin@wadmin-pro:~$ # [关键部分] 手动添加临时专用路由,指明目标网段使用哪个网关,注:使用此方式控制访问,比指定哪个软件用哪张网卡要方便灵活,如 Chrome 要访问商密网(如集群的bashboard)又要查资料访问公网.
wadmin@wadmin-pro:~$ sudo route add -net 10.65.30.0/24 gw 10.65.30.1 enp3s0
wadmin@wadmin-pro:~$ 
wadmin@wadmin-pro:~$ # 如果添加路由时报错: SIOCADDRT: Network is unreachable 广播不可达,则尝试重启网卡再试:
wadmin@wadmin-pro:~$ sudo ifconfig enp3s0 down; sudo ifconfig enp3s0 up
wadmin@wadmin-pro:~$ 
wadmin@wadmin-pro:~$ # 最终干净的路由
wadmin@wadmin-pro:~$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         172.20.10.1     0.0.0.0         UG        0 0          0 wlp2s0
10.65.30.0      10.65.30.1      255.255.255.0   UG        0 0          0 enp3s0
10.65.30.0      0.0.0.0         255.255.255.0   U         0 0          0 enp3s0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 wlp2s0
172.20.10.0     0.0.0.0         255.255.255.240 U         0 0          0 wlp2s0

wadmin@wadmin-pro:~$ # 注:以上设置为动态临时路由,重启机器或 NetworkManager 会丢失,如需持久化则要设为静态路由.
wadmin@wadmin-pro:~$ # 顺便参考下当时的 network manager 配置,如果要配置静态永久路由,则 ubuntu20.04 在此配置,但注意配置了静态 routes 后默认的一些路由会消失.
wadmin@wadmin-pro:~$ cat /etc/netplan/01-network-manager-all.yaml
network:
  version: 2
  renderer: NetworkManager # NetworkManager|networkd
  ethernets:
    #wlp2s0:
    #  #addresses: [172.20.10.123/24]
    #  dhcp4: yes
    #  dhcp6: no
    #  gateway4: 172.20.10.1
    #  routes:
    #    - to: 0.0.0.0
    #      via: 172.20.10.1
    enp3s0:
      addresses: [10.65.30.244/24]
      dhcp4: no
      dhcp6: no
      #optional: true
      gateway4: 10.65.30.1
      #routes:
      #  - to: 10.65.30.0/24
      #    via: 10.65.30.1

wadmin@wadmin-pro:~$ # 尝试登录到集群
wadmin@wadmin-pro:~$ ssh -vvv root@10.65.30.232

留言

您的电子邮箱地址不会被公开。