ポート25だけをトンネルに送り、ホストは送らない
ポートで選択するルールは、外向きの SMTP だけをトンネル経由で送ります。テーブル、送信元アドレス、戻り経路のすべてが一致しないと、何も機能しません。
Linux ホストが自分の SMTP だけをトンネル経由で送るには、四つの要素が揃っている必要があります:専用テーブル内のルート、通信を選択するポリシールール、ピアが受け入れる送信元アドレス、そして非対称性に耐える戻り経路です。それぞれが独立した設定であり、独自の失敗の仕方を持っています。以下の順序なら、失敗は実際に誤っている箇所を指します。これは ポート単位のルーティング作業であり、VPN のデフォルトルートを求めるものではありません。
ポートルールはデフォルトルートではない
ローカルで生成された TCP を宛先ポート 25 と照合するルールは、その通信を指定したテーブルへ送ります。ルール自体は何も作りません:ルールは選択を行い、テーブルにはパケットを運べるルートが必要です。両者を組み合わせても対象は一つのプロトコルの外向き方向だけで、他のホストへの転送、受信メール接続、IPv6 はこの仕組みの外に残ります。VPN のデフォルトではなくポート固有のポリシーと呼ぶことで、その境界を正直に保てます。
wg-quick の二つの設定は前提条件であり、ポリシーの一部ではありません。AllowedIPs = 0.0.0.0/0 はピアに任意の IPv4 宛先を運ばせ、Table = off はそのプレフィックスに対する wg-quick 自身のデフォルトルート導入を止めます。これらの指示を、独自のルートポリシーを適用するマネージャーと混ぜないでください、両者は主テーブルの所有権をめぐって食い違います。
ルート、セレクタ、ガードを書く
他が使っていないテーブル番号と優先度の組を選び、その順にルート、セレクタ、ガードを適用し、以下の番号は例であり、予約値ではありません。
ip -4 route add default dev wg0 src 10.77.0.2 table 51825
ip -4 rule add priority 10000 iif lo ipproto tcp dport 25 lookup 51825
ip -4 rule add priority 10001 iif lo ipproto tcp dport 25 unreachableiif lo はルールをローカル発の通信に限定し、ipproto tcp dport 25 は接続の方向を識別し、ip-rule のリファレンスに両方のセレクタが記載されています。これらは現在のカーネルと iproute2 のリリースに存在し、古いシステムではルール自体が明確に拒否され、読み込まれて何にも一致しないルールより、はるかに分かりやすい失敗です。
次の優先度の unreachable ルールがガードです。これがないと、テーブル 51825 にルートがない場合に通常のデフォルトへ落ち、トンネル障害中にメールが物理リンクから出てしまいますが、まさにポリシーが防ぎたかったケースです。
送信元アドレスを一致させる
ルートの src 設定は、自分で送信元を束縛していない接続にしか送信元を補いません。これは変換ではなく、明示的なバインドを上書きもしないため、物理アドレスに束縛されたデーモンはそのアドレスから送り続けます。もしそうなっているなら、後付けの全体的な masquerade は別の結果を伴う別の解決策ですから、デーモン自身の設定を変えるか、意図的な変換ポリシーを設計してください。
ゲートウェイでは、クライアントのピアが実際に受け取る送信元を承認する必要があり、それは広い宛先プレフィックスではなく 10.77.0.2/32 です。クライアントの 0.0.0.0/0 をすべてのゲートウェイピアにコピーすると、どのピアがどの通信を持つのかが曖昧になります。ゲートウェイには転送、フローを許可するファイアウォールポリシー、戻り経路も必要で、上流がプライベートなトンネルアドレスをルーティングできない場合は外向きの変換も含みます。
戻り経路を確認し、次に永続性
何かを信じる前にルックアップを読んでください。各方向がどのテーブルとどの送信元を得るかが分かり、ポート 25 の宛先と同じ宛先のポート 443 があれば十分です:
ip -4 route get 198.51.100.25 ipproto tcp dport 25
ip -4 route get 198.51.100.25 ipproto tcp dport 443最初のルックアップは wg0 と意図した送信元を示し、二番目は通常の上りリンクを保つべきです。アプリケーションが自分のアドレスを束縛する場合は、そのアドレスを from としてルックアップに加えます。wg0 に届いてからローカルで破棄される応答方向は、外向きポートだけのルールが逆引きにトンネルを選ばせないため、IPv4 のリバースパスフィルタリングを示します。
非対称ルーティングが許可されている場合、net.ipv4.conf.wg0.rp_filter=2 によるインターフェース単位のルースモードが適切かもしれず、まず all とインターフェースの値の実効最大を確認する価値があります。検証を近道として全体で無効にしないでください。その後、テーブル、優先度、ガードを設定の所有者に引き渡し、再接続後に新しい接続を開いて選択が維持されることを確認します。ローカル SMTP リスナーの応答は宛先ポート 25 ではなく送信元ポート 25 を運ぶ点に注意してください(これは別のポリシー上の問題です)。