本ページでは、CentOSのスタティックルーティングについて説明します。
Linuxのルーティング
Linuxサーバにおいて外部のネットワークと通信をしたいときは、基本的にスタティックルーティングを使います。
ネットワーク構成上末端に存在するサーバは、外部ネットワークへの唯一の出口であるデフォルトゲートウェイを設定します。デフォルトゲートウェイは、サーバと同一セグメントに存在するルータやL3スイッチがその役目を負います。
自分の所属していないネットワークと通信するときは、このデフォルトゲートウェイにパケットが転送されます。デフォルトゲートウェイは適切なルーティングを行い外部ネットワークへパケットを転送してくれます。
NICが複数搭載されていて、通信の宛先ごとに経路を変えたい場合はスタティックルートを設定します。特定の宛先のみ、デフォルトルート以外のネットワークの出口(ネクストホップアドレス)へパケットを転送が転送されるようにします。
外部ネットワークとの通信は、原則的にデフォルトゲートウェイ経由、例外の宛先ネットワークはスタティックルート経由という設定方針がよいでしょう。
ルーティング情報の確認
現在動作しているルーティング情報の確認
実際に動作しているルーティング情報を表示するには、ip route
コマンドを使用します。
default
の行はデフォルトゲートウェイの設定を示しています。via
の後に続くIPアドレスはパケット転送先のネクストホップアドレス、dev
はパケットの出て行くNICのDevice名を示しています。
また、192.168.1.0/24
と192.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.method
がauto
、ipv4
が--
になっており、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/24
と192.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 }