複数のWireguardインターフェースはそれぞれ「実際の」インターフェースを直接使用し、いずれかを介して任意のIPに到達できる

複数のWireguardインターフェースはそれぞれ「実際の」インターフェースを直接使用し、いずれかを介して任意のIPに到達できる

1 台のマシンに複数のインターフェイスを設定する必要がありますwg-quick。どちらも実際のイーサネット NIC を直接、独立して使用します。
私が直面している問題は、これらのそれぞれを通じてインターネット全体にアクセスしたいということです。つまり、AllowedIPs = ::0すべてwg-quickのトラフィックがこの新しいインターフェイスを通過するように、ローカルにルートを追加したいということです。これには、後続のwg-quick試行も含まれます。

呼び出して、「いや、 'デフォルト ゲートウェイ' ではなく、wg-quick具体的に を使ってほしい」と伝える方法はありますか? おそらく raw を使うのでしょうか?eno1wg

ネットでいろいろ読んでみたのですが、他の人が何を質問しているのかわからず混乱してしまいます。思われる同様の質問ですが、複数の Wireguard サービスなどをホストしていることがわかりました。

以下に、2 つの wg インターフェイスを使用した基本的な gist を示します。wg0このインスタンスでは、wg-quickすべてのトラフィックを透過的に盗むという通常の処理が行われていますが、wg1使用可能なインターフェイスがあり、アプリを具体的に通信するように構成できます。
ソリューションがこのように動作するように強制されているとしてもかまいませんwg0。「トラフィックにこのインターフェイス/IP を使用する」フラグをサポートしていないソフトウェア用に SOCKS および HTTP プロキシを設定して、同じ効果を得ることができます。

                                                             
      Home                ║      ISP       ║       Internet  
                          ║                ║                 
                          ║                ║                 
  ┌─────────────┐         ║                ║                 
  │             │         ║                ║                 
  │             │         ║                ║        ┌───┐    
  │             │         ║                ║     ╔══╪        
  │         eno1│         ║                ║     ║  └───┘    
  │   wg0      ┐│         ╙────────────────╜     ║  VPN0     
  │     ┐      └─────────────┘                   ║           
  │     ╞════════════════════════════════════════╝           
  │     ┘   ╔════════════════════════════════════╗           
  │   wg1   ║  ┌─────────────┐                   ║           
  │     ╓   ║  ┘│  router                        ║  ┌───┐    
  │     ╠═══╝   │         ╓────────────────╖     ╚══╪        
  │     ╙       │         ║                ║        └───┘    
  │             │         ║                ║        VPN1     
  │             │         ║                ║                 
  └─────────────┘         ║                ║                 
        PC                                                   
                                                             

「なぜ?」。私のプロバイダーはオープンポートを許可しており、基本的にローカルファイアウォールが許可しているため、パブリックにルーティング可能で、必要な数のポートでサービスをホストできました。彼らは Wireguard に移行しましたが、これは素晴らしいことですが、Wireguard 接続ごとに 1 つのオープンポートしかサポートしていません。つまり、基本的にポート転送したすべてのアプリに対して、VPN インターフェイスを起動したいのです。

これは、iptables などを使用せずに、wireguard だけを使用して可能ですか (まったく理解できません)?

答え1

はい。わかりました。表面上は解決策は、wg0が存在するかどうかに関係なく、eno1経由でVPN1に接続できるようにするという単純なものです。複数のwgインターフェースsudo ip route add $VPN1 via eno1を持つことは完全に許可されています。::0同じ名前空間アプリケーションが接続用のインターフェイスへのバインディング ( など) をサポートしている限り、そのうちの 1 つがデフォルト (wg0) になります。ただし、 のnetcat -sでは、このようなトンネルは 1 つしか生成できないという点に注意してください。wg-quickTable=auto


しかし、私がこの 1 週間格闘してきたのは、そもそもこれをやりたいと思った目的、つまり、WG インターフェースに着信トラフィックを伝達させることです。

いろいろ試してみましたが、

  • 単純にwg-quickルートを配置した状態で複数回実行するだけです (これによりすべてが停止し、wg-quick downネットワーク スタックが完全に破壊されます)
  • Table=auto上記のように、1つは、他はで複数をスピンアップします。Table=off
  • wg-quick上記のように、1つは、他はで複数をスピンアップします。wg
  • 複数のスピンアップeno1隠れているnamespace(送信トラフィックではこれを機能させることさえできませんでした...)
  • 複数のスピンアップそれぞれwg独自のnamespace

しかし、これらは(それぞれのトンネルを通る送信トラフィックに対して)機能しますが(特に明記しない限り)、これらすべてはnetcat -l -p $assignedPort、「VPN{0,1}」に同じサーバーまたは異なるサーバーを使用しているかどうかに関係なく、着信接続を拒否しました( でテスト)ufw disable


ここでの解決策は私が昨日やっと見つけた魔法のソースはFwMarkwg-quickで実行されていましたTable=auto

私が自分でやり方を学ぶのを避けようとしていたのは、「Wireguardだけでこれが可能か?」ということです。パケットをマークしてテーブルに関連付ける必要はありますが、何をwg-quickするのか理解したり、模倣したり、再実装したりする必要はありません...どうやら、使用それ。

したがって、VPN0へのデフォルトトンネルを設定した後、wg-quickFwMarkを取得し、ip routeVPN1に設定した後FwMarkを再利用する後者のwg接続は、ルートに従って eno1 を通過しますが、VPN1 から転送された着信パケットを許可します (VPN0 のトンネルによって設定されたテーブルのおかげです)。

関連情報