Linux デュアルネットワークインターフェースルーティング設定ガイド
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. ベストプラクティス
- 同一サブネット内の複数IPを避ける:可能な限り、ネットワークインターフェースを異なるサブネットに設定する
- 明確なルーティングポリシーを定義する:各IPに対して明示的なルーティングポリシーとテーブルを設定する
- リバースパスフィルタリングを調整する:マルチインターフェース環境では緩和モード(
rp_filter=2
)を使用する - メトリックを使用して優先度を区別する:異なるインターフェースに異なるメトリック値を設定する
- 永続的な設定:再起動後も設定が維持されるようにnetplanを使用する
- AWS固有の考慮事項:
- セキュリティグループ設定を確認する
- ソース/宛先チェックを無効にする
- 正しいルートテーブルの関連付けを設定する
これらの設定原則とトラブルシューティング方法に従うことで、デュアルネットワークインターフェースを持つLinuxサーバーでのルーティング問題を効果的に解決し、マルチIP環境でアプリケーションが正しく動作することを確保できます。