CentOS 6 で OpenVPN と Quagga を組み合わせた時のルーティング問題について確認します。この記事は単なる構築手順ではなく、VPN 経路と OSPF で配布される経路をどう考えるかというトラブル記録です。
OpenVPN と動的ルーティングを混ぜる難しさ
OpenVPN はトンネルを作り、Quagga は OSPF などで経路を広告します。この二つを組み合わせると、VPN 接続、OS のルーティングテーブル、OSPF の広告、戻り経路が絡みます。
- OpenVPN の tun インターフェイスに経路が乗る
- Quagga がどのインターフェイスを OSPF 対象にするか
- VPN 経路を OSPF へ流すかどうか
- 戻り経路が正しく存在するか
- NAT で逃がしているのかルーティングで通しているのか
接続できることと、経路が正しく設計されていることは別です。片方向だけ通信できる場合、戻り経路や OSPF 広告の範囲を疑います。
状態確認
ip addr show
ip route show
service openvpn status
service zebra status
service ospfd statusまず OS のルーティングテーブルと各サービスの状態を見ます。OpenVPN が作ったインターフェイスが存在するか、期待する経路が入っているかを確認します。
Quagga 側の確認
vtysh -c "show ip route"
vtysh -c "show ip ospf neighbor"
vtysh -c "show running-config"Quagga では、OS のルートと OSPF で見えているルートを分けて確認します。OS には経路があるのに OSPF で広告されていない、またはその逆の状態があり得ます。
設計上の注意点
- VPN の一時的な経路を不用意に OSPF へ流さない
- トンネルの先にあるネットワークを明示する
- 戻り経路を必ず確認する
- NAT とルーティングを混ぜて原因を曖昧にしない
- 障害時に経路が広がりすぎないようにする
OpenVPN と OSPF を組み合わせる場合、VPN が落ちた時に経路がどう消えるかも重要です。正常時だけでなく、断線時の収束や誤広告を考える必要があります。
切り分け手順
ping -c 3 10.8.0.1
traceroute 192.168.10.10
tcpdump -ni tun0
tcpdump -ni eth0 proto ospf
ip route get 192.168.10.10通信確認では、VPN インターフェイス、物理インターフェイス、OSPF パケット、実際の経路選択を分けて見ます。
VPN は張れるが通信できない時の見る順序
OpenVPN と Quagga / OSPF の組み合わせで多いのは、VPN セッション自体は張れているのに、目的ネットワークへ通信できない状態です。この場合、OpenVPN の認証ではなく、経路と戻り経路を疑います。
- クライアントに VPN アドレスが割り当てられているか
- クライアントに目的ネットワークへのルートが入っているか
- VPN サーバーが目的ネットワークへ到達できるか
- 目的ネットワーク側に VPN クライアント宛の戻り経路があるか
- OSPF で広告すべき経路と広告すべきでない経路を分けているか
ip addr show tun0
ip route show
ip route get 192.168.10.10
vtysh -c "show ip route"
vtysh -c "show ip ospf route"
tcpdump -ni tun0 icmpNAT で逃がすか、ルーティングで通すか
VPN 経路の問題は、NAT で隠すと一時的に動くことがあります。ただし、NAT で逃がすのか、ルーティングとして正しく通すのかは設計判断です。拠点間や複数ネットワークを扱うなら、戻り経路を含めたルーティング設計として考える方が自然です。
- NAT は戻り経路問題を隠せるが、通信元が見えにくくなる
- ルーティングは設計が必要だが、通信経路を明示できる
- OSPF に VPN 経路を流す場合は、障害時の経路消失も考える
- 一時的な VPN クライアント経路を不用意に広域広告しない
まとめ
CentOS 6 の OpenVPN + Quagga 構成では、VPN 接続、OS のルーティング、OSPF 広告、戻り経路を分けて確認する必要があります。VPN でつながったから終わりではなく、その経路を動的ルーティングへどう扱わせるかが設計の中心です。
関連する記事
- CentOS 6 サーバー管理ガイド
CentOS 6 系の記事を役割別に確認できるハブページです。 - CentOS 6 OpenVPN サーバー構築
OpenVPN サーバー側の基本構成です。 - OSPF でプロセスを分ける効果
OSPF の設計単位を考える補助記事です。
参考書籍
CentOS 6 のような古い Linux サーバー記事を読み直す時にも、コマンドライン操作の考え方を確認しやすい参考書籍です。
Amazon で見る
