Linux デュアルネットワークインターフェースルーティング設定ガイド

Linux デュアルネットワークインターフェースルーティング設定ガイド

japanese_cover

Linux デュアルネットワークインターフェースルーティング設定ガイド

1. 問題の概要

サーバーにデュアルネットワークインターフェースを設定する際、トラフィックが期待される正しいインターフェースから出入りしないという問題がよく発生します。本ドキュメントでは、実際のケースを基に、Linux(特にUbuntu)システムでのルーティング問題の設定方法とトラブルシューティングについて説明します。

2. 環境説明

サンプルネットワーク構成

  • サーバー:Ubuntu 20.04 LTS、Zabbixサービス実行中
  • ネットワークインターフェース1(ens5):192.168.1.2/24、ゲートウェイ 192.168.1.254
  • ネットワークインターフェース2(ens6):192.168.1.1/24、ゲートウェイ 192.168.1.254
  • サービス:ポート10051でリスニング(Zabbix Server)

問題の説明

  • 支社から 192.168.1.2:10051​ への接続は可能
  • サービスが 0.0.0.0:10051​ でリスニングしているにもかかわらず、192.168.1.1:10051​ への接続が失敗

3. Linuxルーティングの基礎

ルーティングテーブル構造

Linuxは複数のルーティングテーブルとルーティングポリシーを使用してパケットの流れを決定します:

# ルーティングテーブルリストの表示cat /etc/iproute2/rt_tables## reserved values#255	local254	main253	default0	unspec## local#100	primary200	secondary

デフォルトルートとメトリック値

# 現在のルーティングテーブルを表示ip route showdefault via 192.168.1.254 dev ens5 proto dhcp src 192.168.1.2 metric 100192.168.1.0/24 dev ens6 proto kernel scope link src 192.168.1.1192.168.1.0/24 dev ens5 proto kernel scope link src 192.168.1.2 metric 100

4. Netplan設定

UbuntuはNetplanを使用してネットワーク設定を管理します。以下は2つのネットワークインターフェースの設定ファイルです:

プライマリインターフェース設定 /etc/netplan/50-cloud-init.yaml

network:    ethernets:        ens5:            dhcp4: true            dhcp6: false            match:                macaddress: 00:11:22:33:44:55            set-name: ens5            routing-policy:              - from: 192.168.1.2                table: 100              - to: 192.168.1.2                table: 100            routes:              - to: default                via: 192.168.1.254                table: 100                metric: 200  # 高い値は低い優先度を意味します    version: 2

セカンダリインターフェース設定 /etc/netplan/99-ens6.yaml

network:  ethernets:    ens6:      addresses:        - 192.168.1.1/24      routing-policy:        - from: 192.168.1.1          table: 200        - to: 192.168.1.1          table: 200      routes:        - to: default          via: 192.168.1.254          table: 200        - to: default          via: 192.168.1.254          metric: 50  # 低い値は高い優先度を意味します

5. 一般的な問題診断手順

ルーティング問題のチェック

# ルーティングテーブルの表示ip route show# ポリシールーティングの表示ip rule list# リバースパスフィルタリング設定の確認sysctl -a | grep rp_filter# IP転送の確認sysctl -a | grep ip_forward# パケットキャプチャ分析tcpdump -i any port 10051 -nn

カーネルパラメータの調整

# IP転送を有効化sysctl -w net.ipv4.ip_forward=1# リバースパスフィルタリングを緩和モードに設定sysctl -w net.ipv4.conf.all.rp_filter=2sysctl -w net.ipv4.conf.ens5.rp_filter=2sysctl -w net.ipv4.conf.ens6.rp_filter=2

6. 解決策

ルート優先度の調整

メトリック値を設定してデフォルトルートの優先度を制御します:

# 古いデフォルトルートを削除sudo ip route del default via 192.168.1.254 dev ens5# 業務用インターフェースを通じて新しいデフォルトルートを追加sudo ip route add default via 192.168.1.254 dev ens6 metric 50

7. ベストプラクティス

  1. 同一サブネット内の複数IPを避ける:可能な限り、ネットワークインターフェースを異なるサブネットに設定する
  2. 明確なルーティングポリシーを定義する:各IPに対して明示的なルーティングポリシーとテーブルを設定する
  3. リバースパスフィルタリングを調整する:マルチインターフェース環境では緩和モード(rp_filter=2​)を使用する
  4. メトリックを使用して優先度を区別する:異なるインターフェースに異なるメトリック値を設定する
  5. 永続的な設定:再起動後も設定が維持されるようにnetplanを使用する
  6. AWS固有の考慮事項
  • セキュリティグループ設定を確認する
  • ソース/宛先チェックを無効にする
  • 正しいルートテーブルの関連付けを設定する

これらの設定原則とトラブルシューティング方法に従うことで、デュアルネットワークインターフェースを持つLinuxサーバーでのルーティング問題を効果的に解決し、マルチIP環境でアプリケーションが正しく動作することを確保できます。

コメントする