『Networking』 Configure 2 NIC for ACT Ubuntu

『Manjaro Linux』 为 ACT Ubuntu 配置双网卡

Posted by Coekjan on May 23, 2024

ACT 与 BUAA 网络环境介绍

BUAA 内网网络大致位于 10.0.0.0/8 子网,而 ACT 内网网络一般位于 192.168.2.0/24 下,都有 DHCP 服务为使用者提供 IP、网关 IP、DNS 等信息。在 ACT 实验室中,台式机一般通过以太网卡连接 ACT 内网(高速)、通过 USB WiFi 网卡连接 BUAA 内网(低速)。在理想情景下:

  • 使用者应能在 BUAA 内网和 ACT 内网下通过 SSH 连接、管理台式机;
  • 台式机应尽可能使用 ACT 内网连接互联网,以获得更快的速度。

在 Ubuntu 里配置双网卡

确认网卡信息与连接状态

通过以下命令查看网卡信息与连接状态:

1
2
3
4
$ nmcli connection show
NAME        UUID                                  TYPE      DEVICE          
ACT-Eth     ...                                   ethernet  <act-dev>
BUAA-WiFi   ...                                   wifi      <buaa-dev>

查看 IP 地址

通过以下命令查看 IP 地址:

1
$ ip address

其中,形如 inet <ip> ... 的条目指示了 IP 地址 <ip>。这样的条目有两条,一条是 ACT 内网的 IP 地址(记作 act-ip),一条是 BUAA 内网的 IP 地址(记作 buaa-ip)。

查看网关信息

通过以下命令查看网关信息:

1
$ ip route

其中,形如 default via <gateway-ip> ... 的路由条目指示了默认网关的 IP 地址 <gateway-ip>

这样的默认路由条目有两条,一条指向 ACT 内网的网关(记作 act-gateway),一条指向 BUAA 内网的网关(记作 buaa-gateway)。

配置路由

通过以下命令配置路由:

1
2
3
# ip route add <buaa-gateway> dev <buaa-dev>
# ip route add 10.0.0.0/8 via <buaa-gateway> dev <buaa-dev> src <buaa-ip>
# ip route add 219.224.171.0/24 via <buaa-gateway> dev <buaa-dev> src <buaa-ip>

这样,台式机就能通过 BUAA 内网来响应来自 BUAA 内网(10.0.0.0/8)和 ACT 出口(219.224.171.0/24)的请求,从而建立 SSH 连接。对于其他请求,台式机将优先使用 ACT 内网连接(ACT 默认路由一般有更小的 metric),以获得更快的速度。

连接 WiFi 后自动配置

在 Ubuntu 中,可以通过网络接口钩子实现在连接 WiFi 后自动配置路由,具体来说,可以在 /etc/network/if-up.d/ 下创建一个脚本,以在网络接口启动时执行。

1
2
3
4
5
6
#!/bin/sh

case "$IFACE" in
wl*) /srv/network/config ;;
*)   exit 0 ;;
esac

并在 /srv/network/config 中写入配置路由的命令。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/bin/bash

set -eu

connections="$(nmcli connection show)"

function route {
    ip route add $@ || true
}

function config {
        echo "<<--------"
        echo "... Configuring $1"
        local device=$(echo "$connections" | \
            grep -Eo "$1\s+\w+" | \
            awk '{ print $2 }')
        echo "Device Found: $device"

        local ipaddr=$(ip address show dev "$device" | \
            awk '/inet\s+/ { print $2 }' | \
            cut -d/ -f1)
        echo "IPv4 Address: $ipaddr"

        local gatway=$(ip route show default dev "$device" | \
            awk '{ print $3 }')
        echo "IPv4 Gateway: $gatway"

        route "$gatway"                      dev "$device"
        route 10.0.0.0/8       via "$gatway" dev "$device" src "$ipaddr"
        route 219.224.171.0/24 via "$gatway" dev "$device" src "$ipaddr"
        echo "-------->>"
}

config wifi