Ubuntu 20.04 デスクトップ版でスタティックルートを追加する方法

前書き

我が家で 24 時間稼働させている Ubuntu のデスクトップ版がありますが、デフォルトゲートウェイ以外にスタティックルートを追加する必要が出てきたのでそのやり方をメモしておきます。

GUI 操作を行わないため、この Ubuntu がデスクトップ版である必要はないのですが、サーバー版をインストールし直すのが面倒くさいので使い続けています。

デフォルトゲートウェイは我が家のヤマハルーターに向けられていますが、今回は特定の IP アドレス宛に関しては FreeBSD にルーティングさせたい、という背景事情があります。

まずは現状確認する

IP アドレス

Ubuntu に設定されている IP アドレスとデバイス名を確認します。

$ ip address show dev enp0s25
2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 04:20:9a:41:1f:35 brd ff:ff:ff:ff:ff:ff
    inet 172.16.1.2/24 brd 172.16.1.255 scope global noprefixroute enp0s25
       valid_lft forever preferred_lft forever
    inet6 fe80::620:9aff:fe41:1f35/64 scope link 
       valid_lft forever preferred_lft forever
$

172.16.1.2 が enp0s25というデバイス に設定されています。

ルーティングテーブル

ip route コマンドで確認できます。

$ ip route
default via 172.16.1.1 dev enp0s25 proto static metric 100 
169.254.0.0/16 dev enp0s25 scope link metric 1000 
172.16.1.0/24 dev enp0s25 proto kernel scope link src 172.16.1.2 metric 100 
$ 

NetworkManager 管理デバイス

NetworkManager で管理されているデバイスを確認します。NetworkManager を管理・設定するためのコマンドである nmcli コマンドを使います。

$ nmcli device
DEVICE           TYPE      STATE     CONNECTION              
enp0s25          ethernet  接続済み  wired1                  
enxbc5c4ce12dd4  ethernet  接続済み  netplan-enxbc5c4ce12dd4 
wlp3s0           wifi      利用不可  --                      
lo               loopback  管理無し  --                      
$

ここでポイントとなってくるのは 172.16.1.2 が設定されているデバイス enp0s25 の接続名 (CONNECTION と表示されている箇所) が wired1 として定義されているところです。

NetworkManager で管理されている情報

NetworkManager で設定・管理されている情報を確認します。ipv4 と指定していることから推測できるように IPv4 に関するパラメーターが表示されます。

※ ここから接続名が必要となってきます。

$ nmcli -f ipv4 connection show wired1
ipv4.method:                            manual
ipv4.dns:                               1.1.1.1,8.8.8.8
ipv4.dns-search:                        --
ipv4.dns-options:                       --
ipv4.dns-priority:                      0
ipv4.addresses:                         172.16.1.2/24
ipv4.gateway:                           172.16.1.1
ipv4.routes:                            --
ipv4.route-metric:                      -1
ipv4.route-table:                       0 (unspec)
ipv4.routing-rules:                     --
ipv4.ignore-auto-routes:                いいえ
ipv4.ignore-auto-dns:                   いいえ
ipv4.dhcp-client-id:                    --
ipv4.dhcp-iaid:                         --
ipv4.dhcp-timeout:                      0 (default)
ipv4.dhcp-send-hostname:                はい
ipv4.dhcp-hostname:                     --
ipv4.dhcp-fqdn:                         --
ipv4.dhcp-hostname-flags:               0x0 (none)
ipv4.never-default:                     いいえ
ipv4.may-fail:                          はい
ipv4.dad-timeout:                       -1 (default)

本投稿で触れるスタティックルートに関する部分だけに絞って表示させたい場合は ipv4.routes と指定して実行します。

$ nmcli -f ipv4.routes connection show wired1
ipv4.routes:                            --
$

空っぽ。つまり、まだスタティックルートの定義がされていないことがわかります。

スタティックルートを設定する

スタティックルートを設定するために必要な情報は以下の 2 つです。

  • 宛先 IP アドレス
  • ネクストホップ

ネクストホップとは転送先のルーターのことです。隣のルーターとでも覚えておけば良いでしょう。

例として、10.2.0.0/24 宛の通信 (パケット) を 172.16.1.1 のルーターに転送 = ルーティングさせたい場合は以下のように設定します。

$ sudo nmcli connection modify wired1 +ipv4.routes "10.2.0.0/24 172.16.1.1"

接続名 wired1 に対してスタティックルートを追加するイメージになります。

設定した内容を確認します。

$ nmcli -f ipv4.routes connection show wired1
ipv4.routes:                            { ip = 10.2.0.0/24, nh = 172.16.1.1 }

スタティックルートが設定されました。ip = 10.2.0.0/24 宛は nh = 172.16.1.1 に転送する、と定義されています。nh はネクストホップの略です。

以下のコマンドは実行する必要があるのかないのか不確かなのですが、設定を反映させるために必要という情報がありました。(本当に必要なのかどうか、再起動が不要なのかどうか、このあたりをちゃんと調べきれていない)

$ sudo nmcli connection reload
$ 

スタティックルートを削除する場合は以下のように実行します。

$ sudo nmcli connection modify wired1 -ipv4.routes "10.2.0.0/24 172.16.1.1"

-ipv4.routes というようにマイナスをつけて削除します。

設定ファイルを確認する

ここまででスタティックルートの設定ができたが、設定した内容はどこのファイルに保存されたのか?

これについても調べてみたので軽く書いておきます。

$ cd /etc/NetworkManager/
$ ls -tlr
合計 24
-rw-r--r-- 1 root root 98 3月 26 2018 NetworkManager.conf
drwxr-xr-x 2 root root 4096 11月 3 2018 dnsmasq.d
drwxr-xr-x 2 root root 4096 11月 3 2018 dnsmasq-shared.d
drwxr-xr-x 2 root root 4096 4月 10 2022 conf.d
drwxr-xr-x 5 root root 4096 4月 10 2022 dispatcher.d
drwxr-xr-x 2 root root 4096 1月 2 16:10 system-connections
$ cd system-connections/
$ ls -tlr
合計 12
-rw------- 1 root root 353 5月 14 2019 Higashinakano
-rw------- 1 root root 342 8月 3 2019 aterm-902f23-a
-rw------- 1 root root 395 1月 2 16:10 '有線接続 1'
$

ファイルのタイムスタンプを足がかりにして調べていくと、/etc/NetworkManager/system-connections ディレクトリにある ‘有線接続1’ というファイルが見つかりました。これに記録されていました。

$ sudo cat '有線接続 1'
[connection]
id=wired1
uuid=83493657-dc45-3586-b91e-6ea694c9ce0c
type=ethernet
autoconnect-priority=-999
permissions=
timestamp=1672643214

[ethernet]
mac-address=04:20:9A:41:1F:35
mac-address-blacklist=

[ipv4]
address1=172.16.1.2/24,172.16.1.1
dns=1.1.1.1;8.8.8.8;
dns-search=
method=manual
route1=10.2.0.0/24,172.16.1.1

[ipv6]
addr-gen-mode=stable-privacy
dns-search=
method=ignore

[proxy]
$

上記青字の箇所にスタティックルートの定義が書かれています。

‘有線接続1’ じゃなくて wired1 というファイル名になっているところが少し気になるところですが、なにかの都合でここでは和訳されて ‘有線接続1’ というファイル名になったのだと思われます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください