NICは1枚か2枚か?VPNサーバーのインターフェース構成を決める
一枚のアダプターで暗号化された接続とトンネルのトラフィックの両方を運べます。一枚か二枚かは、ハードウェアの決まりではなくルーティングの要件で選びます。
多くのVPNサーバーでは物理アダプター一枚で足りますが、それが万能な設計というわけでもありません。暗号化された接続はそのアダプターに到着し、VPNプロセスが復号し、その後内側のトラフィックは仮想インターフェースから出ていき、ローカルサービスやルーティングされたLANに届きます。うまくいくかどうかは、宛先がどこにあるか、LANにクライアントプールへの戻り経路があるか、共有された物理リンク一本で主張する分離が得られるか、という三つの条件で決まります。この三つに答えれば、アダプターの枚数はおのずと決まります。
これを決める三つの条件
第一の条件は宛先です。VPNホスト上にあるサービスへはトンネルインターフェースだけで到達できますが、LAN上のホストとなると転送と戻り経路が必要です。第二の条件はその戻り経路で、LAN側の機器がクライアントプールへの到達方法を経路で持つかサーバー側の変換で持つかを知っている必要があります。
第三の条件は分離です。アダプターが一枚なら、暗号化の有無にかかわらずすべてのパケットが同じリンクと、たいていは同じポリシーチェーンを共有するので、別ハードウェアに依存する分離の主張は一枚のインターフェースでは満たせません。それは経路についての事実であり、OSの設定方法についての話ではありません。トンネルのトラフィックをフィルタリングすることはできますが、持っていない境界を主張することはできません。
この三つのどれも、筐体のポート数についての話ではありません。ルーティングとアドレスの所有権、そして設計が物理的な分離にどれだけ依存するかについての話です。
物理ゾーン、別のアップリンク、スループット、帯域外の復旧経路が正当化するなら、二枚という選択は今も妥当です。それらは具体的な要件であり、誰かがハードウェアを発注する前に書き出しておく価値があります。
サービスがVPNホスト上で動く場合
最も単純なケースでは転送はまったく要りません。デーモンはトンネルインターフェースでクライアントのパケットを受け取り、ローカルソケットに渡し、応答は同じインターフェースから戻ります。ホストから見れば、クライアントプールのアドレスは本物のローカルアドレスです。
それでも、サービスがトンネルの到達できるアドレスで待ち受け、ホストのファイアウォールがトンネルインターフェースに届くトラフィックを受け入れるという二点は正しくなければなりません。どちらも下のコマンドで確認できます。
ss -lntup | grep -E "5432|8080"
ip -brief addr show
ip route get 10.8.0.6 from 10.8.0.1サービスをパブリックアドレスにだけバインドしたり、誤ってトンネルインターフェースをフィルタリングしたりすると、ホストには届くもののそこで死ぬ接続が生まれます。VPNの障害に見えますが、たいていはソケットかファイアウォールの判断です。
宛先がLAN上にある場合
ここでシングルアダプター設計は厄介という評判を得ます。サーバーはクライアントのパケットをLANへ転送する必要があり、LAN側の機器は応答をクライアントプールへ送り返す必要があります。そのプールをLAN上の経路として持つか、サーバーで送信元アドレスを変換して応答がサーバー自身に戻るようにするかです。
どちらの答えも妥当で、失敗の仕方が異なります。戻り経路は元のクライアントアドレスを宛先から見えるままにするので、ログには良く、LANアドレスを前提とするファイアウォール規則には悪い選択です。変換はLANを単純に保ち、クライアントの身元を宛先から隠します。
sysctl net.ipv4.ip_forward
nft list ruleset | grep -A4 'chain forward'
ip route show table main | grep 10.8.0非対称な経路が典型的な症状で、クライアントの要求は届き、応答は別のルーターから出ていき、両端のどちらにもエラーが出ないまま接続がタイムアウトします。トンネルについて何か結論を出す前に、両側でキャプチャしてください。
エイリアスが第二のゾーンを作らない理由
同じアダプターに二つ目のアドレスを追加しても、二つ目のポートを模したダミーインターフェースを作っても、ほとんど何も変わりません。パケットは同じ物理リンク、同じスイッチポート、そしてたいていは同じファイアウォールチェーンから出ていくので、両者の間に新しい境界は生まれません。それは設定の便利さであって、セグメンテーションではありません。これをゾーン境界として扱うと、分離の主張は紙の上でしか生き残りません。
別のゾーンには経路上の実際の分離が必要で、それを満たすのが二枚目のアダプターです。VPN側のトラフィックがLAN側のトラフィックとブロードキャストドメインを決して共有しないことに規則が依存しているなら、ホストをどうアドレス指定しても一本のケーブルではその性質は得られません。
特定のモードについて製品がマルチインターフェースのトポロジーを記述している場合は、回避策を考案せずにその製品のドキュメントに従ってください。ベンダーはリリース間で対応トポロジーも変えるので、古いウィザードのスクリーンショットより現行のガイドを読むべき理由がもう一つあります。
許可するトラフィックに対して構成を確認する
サーバーが運ぶべきトラフィックのクラスを、クライアントからホスト、クライアントからLAN、ホストからLAN、そして暗号化された外側の接続という形で列挙します。各クラスには送信元、宛先、インターフェースがあり、構成はその四つを同時に満たす必要があります。三つだけを扱う設計は、たいていチケットを生む設計です。
次に、設計書の図ではなく、実際のインターフェースと実際のキャプチャを確認します。下のコマンドは両方のビューを出力します。
ip -brief addr
ip route
tcpdump -ni any udp port 51820 -c 5
tcpdump -ni tun0 -c 5外側のキャプチャが暗号化トラフィックを示し、内側のキャプチャがトンネルインターフェース上の復号済みトラフィックを示し、物理アダプターがその両方を運んでいるなら、NIC 一枚で仕事をしています。内側のキャプチャが空なら、問題はトンネルか転送規則にあり、アダプターの枚数ではありません。その二つのキャプチャとルーティングテーブルからトポロジーを決めれば、次の変更には比較対象があります。