本ページでは、CentOSのスタティックルーティングについて説明します。

Linuxのルーティング

Linuxサーバにおいて外部のネットワークと通信をしたいときは、基本的にスタティックルーティングを使います。

ネットワーク構成上末端に存在するサーバは、外部ネットワークへの唯一の出口であるデフォルトゲートウェイを設定します。デフォルトゲートウェイは、サーバと同一セグメントに存在するルータやL3スイッチがその役目を負います。
自分の所属していないネットワークと通信するときは、このデフォルトゲートウェイにパケットが転送されます。デフォルトゲートウェイは適切なルーティングを行い外部ネットワークへパケットを転送してくれます。

NICが複数搭載されていて、通信の宛先ごとに経路を変えたい場合はスタティックルートを設定します。特定の宛先のみ、デフォルトルート以外のネットワークの出口(ネクストホップアドレス)へパケットを転送が転送されるようにします。

外部ネットワークとの通信は、原則的にデフォルトゲートウェイ経由、例外の宛先ネットワークはスタティックルート経由という設定方針がよいでしょう。

ルーティング情報の確認

現在動作しているルーティング情報の確認

実際に動作しているルーティング情報を表示するには、ip routeコマンドを使用します。
defaultの行はデフォルトゲートウェイの設定を示しています。viaの後に続くIPアドレスはパケット転送先のネクストホップアドレス、devはパケットの出て行くNICのDevice名を示しています。
また、192.168.1.0/24192.168.56.0/24の2行はローカルネットワークを示しています。この2つのネットワークは、自ホストのNICが所属しているネットワークで、proto linkと表示されています。この種類の経路は、自ホストのNICと同じネットワーク内が宛先のため、デフォルトゲートウェイに転送されません。

# ip route
default via 10.0.2.2 dev enp0s3  proto static  metric 100
192.168.1.0/24 dev enp0s3  proto kernel  scope link  src 192.168.1.1  metric 100
192.168.56.0/24 dev enp0s8  proto kernel  scope link  src 192.168.56.102  metric 100

OS設定上のルーティング情報の確認

前出の実際に動作しているルーティング情報とは別に、設定ファイルとしてOS上に保存されているルーティング情報もあります。これはあくまでもパラメータが保存されているだけであり、適用作業を行わないと現在動作しているルーティング情報とイコールにはならないので注意してください。

ルーティングを確認したいコネクションに対して、nmcli con show <Connection名>で設定情報を確認します。本作業ではIPv4に関する設定値だけ表示させればよいので、-f ipv4オプションで、表示する項目を絞っています。
以下表示結果では、ipv4.methodautoipv4--になっており、DHCPで取得したデフォルトゲートウェイが設定されていることを示しています。
設定ファイル上は経路情報が設定されていないということになります。
以上の情報から、ip routeコマンドの結果で表示された10.0.2.2がDHCPで設定された現在のデフォルトゲートウェイということになります。

# nmcli -f ipv4 con show enp0s3
ipv4.method:                            auto
ipv4.dns:
ipv4.dns-search:
ipv4.addresses:
ipv4.gateway:                           --
ipv4.routes:
ipv4.route-metric:                      -1
ipv4.ignore-auto-routes:                no
ipv4.ignore-auto-dns:                   no
ipv4.dhcp-client-id:                    --
ipv4.dhcp-send-hostname:                yes
ipv4.dhcp-hostname:                     --
ipv4.never-default:                     no
ipv4.may-fail:                          yes

デフォルトゲートウェイの設定

nmcli com mod <Connection名> ipv4.gateway <ネクストホップアドレス>コマンドで、デフォルトゲートウェイを設定します。
以下の例ではenp0s3に対して、DHCPの自動割り当てではなく固定割り当てとしてデフォルトゲートウェイを10.0.0.1に設定しています。
設定後は、現在動作しているルーティング情報に内容を反省させるため、nmcli con reloadコマンドで設定をリロードします。

# nmcli con mod enp0s3 ipv4.gateway 10.0.0.1
# nmcli con reload

なお、デフォルトゲートウェイは1つしか設定出来ないので注意してください。

スタティックルートの設定

nmcli com mod <Connection名> +ipv4.routes "<宛先ネットワークアドレス/プレフィックス> <ネクストホップアドレス>"でスタティックルートを設定します。
スタティックルートを追加する場合は、ipv4.routesパラメータに+を付けます。また、既に追加済みのスタティックルートを削除する場合は、ipv4.routesパラメータに-を付けます。デフォルトゲートウェイと異なり、スタティックルートは複数の経路を設定できます。

以下の例では、192.168.2.0/24192.168.3.0/24宛てのパケットをデフォルトゲートウェイとは別に192.168.1.1に転送するよう、enp0s8コネクションにスタティックルートを追加しています。

# nmcli con mod enp0s8 +ipv4.routes "192.168.2.0/24 192.168.1.1"
# nmcli con mod enp0s8 +ipv4.routes "192.168.3.0/24 192.168.1.1" 
# nmcli con reload

スタティックルートの設定結果はnmcli con show <Connection名>で確認します。以下の例では、-f ipv4.routesオプションでスタティックルートの項目に絞って結果を表示させています。先ほど追加した2つの経路が設定されていることがわかります。

# nmcli -f ipv4.routes con show enp0s8
ipv4.routes:                            { ip = 192.168.2.0/24, nh = 192.168.1.1 }; { ip = 192.168.3.0/24, nh = 192.168.1.1 }