単一のLinuxボックスでVPNクライアント、VPNサーバー、および通常のトラフィックを同時に受け入れる方法

単一のLinuxボックスでVPNクライアント、VPNサーバー、および通常のトラフィックを同時に受け入れる方法

私は何を達成したいと思うか。

私のLinuxコンピュータ(最近リリースされたRaspberry Pi OSのRaspberry Pi v3)では、次の設定を検討しています。

  1. デフォルトでは、VPNクライアントに送信されるすべての接続は
  2. インターネットからマイボックスへの着信接続に対応するVPNサーバー
  3. 聴覚障害のあるVPNクライアントを迂回し、私をガタガタから抜け出す「一般」インターフェース(ここではeth0)

私はインターフェイス#3を使用してISPが提供するパブリックIP(ホームネットワークのIP)を取得します。たとえば、「実際」(VPNではなくクライアントを読み取る)IPを使用してDNSプロバイダアカウントを正常に更新できます。

curl https://my.dns.provider/refresh_my_account_id_query --interface etho

                                                                                                                                                
                                                                                                                                                
                                                                                                                                                
+---------------------------------------------------------------+    +-----------------+    +---------+                                         
|                         My Linux box                          |    |                 |    |         |                                         
|                                                               |    | My home network |    | My ISP  |                                         
|                                                               |    |                 |    |         |                                         
|  +------------+                                               |    |                 |    |         |     +------------------+                
|  | VPN Client |  Dev: tun0 | IP:<pre-defined by VPN provider> |    |                 |    |         |     |  VPN Provider's  |                
|  | (default   <------------------------------------------------------------------------------------------->  Servers         <---------+      
|  | outgoing)  |                                               |    |                 |    |         |     |                  |         |      
|  +------------+                                               |    |                 |    |         |     +------------------+         |      
|                                                               |    |                 |    |         |                           +------v-----+
|  +------------+                                               |    |                 |    |         |                           |            |
|  |            |  Dev: tun1 | IP:10.8.0.1                      |    |                 |    |         |                           |  Internet  |
|  | VPN Server <----------------------------------------------------------------------------------------------------------------->            |
|  |            |                                               |    |                 |    |         |                           |            |
|  +------------+                                               |    |                 |    |         |                           |            |
|                                                               |    |                 |    |         |                           |            |
|  +------------+                                               |    |                 |    |         |                           |            |
|  |Only for    |   Dev eth0 | IP:192.168.0.200                 |    |    -------------------------------------------------------->            |
|  |explicit VPN<--------------------------------------------------------/             |    |         |                           |            |
|  |bypass      |                                               |    |                 |    |         |                           |            |
|  +------------+                                               |    |                 |    |         |                           +------------+
|                                                               |    |                 |    |         |                                         
|                                                               |    |                 |    |         |                                         
+---------------------------------------------------------------+    +-----------------+    +---------+                                         

私が経験している問題

2 つの VPN (インターフェイス tun0 と tun1) を同時に動作させることはできません。両方のVPNが機能し、設定された後、インターネットからVPNサーバーに接続できなくなります。残りは大丈夫です。インターフェイス tun0 と tun1 のルーティングとルールが確立されると、すべての着信トラフィックがプライマリ インターフェイスでのみ進行または削除されるようです。わかりません。

各インターフェイスの現在の設定

私の設定説明のインターフェースのリストに従ってください。

  1. systemctlクライアントをサービスとして実行するために使用される一般的なopenvpn設定ファイルを使用してVPNクライアントを設定しました。これはそれ自体はうまく機能します。つまり、tun0すべてのトラフィックがデフォルトでそのインターフェイスを通過します。
  2. を使用してVPNサーバーを設定しましたPiVPN。本当に簡単で、一度だけ試してみてください。
  3. 手動で追加していますが、期待ip route default via 192.168.0.1 dev eth0 proto dhcp src 192.168.0.200 metric 202どおりに機能します。

ボックスを起動すると、3つのインターフェイスがすべて表示され(上部にloip route、次のものが表示されます。

0.0.0.0/1 via 172.94.109.161 dev tun0 
default via 172.94.109.161 dev tun0 
default via 192.168.0.1 dev eth0 proto dhcp src 192.168.0.200 metric 202 
10.8.0.0/24 dev tun1 proto kernel scope link src 10.8.0.1 
128.0.0.0/1 via 172.94.109.161 dev tun0 
172.94.109.4 via 192.168.0.1 dev eth0 
172.94.109.160/28 dev tun0 proto kernel scope link src 172.94.109.163 
192.168.0.0/24 dev eth0 proto dhcp scope link src 192.168.0.200 metric 202 

上記では、私の理解は次のとおりです。

  • 行1と2は同じで、意図したとおり、VPNクライアントを介してすべてのデフォルトの発信トラフィックを取得するように設計されていますが、それらの1つを削除する必要があります。
  • eth0インターフェイスを直接ターゲットにするときにVPNクライアントをバイパスしようとする3行を手動で追加しましたが、他の問題が発生しますか?
  • 4行目の目的は、VPNサーバーIPから受信したすべての内容を自分のVPNサーバーtun1で管理することです。
  • 5~8行よくわかりません。 VPNクライアントが正しく機能する必要があるようです。

欲しいもの

現在のIPルーティングの理解を確認するには、別の脳が必要です。次に、ここで説明されている設定を実装する正しい方法についてのアドバイスを探しています。

これまで私は私の研究に基づいて多くのルールとパスを設定しようとしましたが、成功しませんでした。また、IPルールまたはルーティングオプションを使用して発信および受信パケットを表示する方法について少し読んでいますが、mangle既存の文献は消化するのが非常に難しく、さらに試す前に実際に必要なツールが何であるかを理解したいと思います。

どんな助けでも大変感謝します。設定に関する詳細を提供するか、新しい設定を試してみましょう。お問い合わせください。

答え1

Martinの回答を補完するには:

VPN を介したデフォルトルートは、VPN クライアントへの応答がリモート VPN サーバーを介して送信されるため、ローカル VPN サーバーを破壊します。これにより、応答が別のIPアドレスから来るため、リモートクライアントVPNは機能しなくなります。

デフォルトルートをローカルネットワークに制限するには、ポリシールーティングを使用する必要があります。たぶんこれはクイック紹介設定するのに役立ちます。これスーパーユーザーに質問する役に立つかもしれません。

OpenVPNを使用してデフォルトパスを設定しません。

その後、受信VPNのルートを同じルートテーブルに追加すると、必要な方法で機能します。

答え2

ルーティングテーブルに関するいくつかの洞察は次のとおりです。

default via 172.94.109.161 dev tun0

これがデフォルトパスです。より具体的なルートと一致しないすべてのトラフィックはそのルートを使用します。このパスはデフォルトでdhcpによって設定されます。

0.0.0.0/1 via 172.94.109.161 dev tun0
128.0.0.0/1 via 172.94.109.161 dev tun0 

これらの2つのパスはおそらくopenvpnから来ます - openvpnのマニュアルページから:

def1 - 0.0.0.0/0の代わりに0.0.0.0/1と128.0.0.0/1を使用してデフォルトゲートウェイをオーバーライドするには、このフラグを使用します。これは元のデフォルトゲートウェイを上書きしますが消去しないという利点があります。

したがって、デフォルトでは、これはデフォルトゲートウェイを無効にし、削除せずに新しいゲートウェイに置き換えます。このオプションがないと、VPNトンネルを介してすべてのトラフィックをリダイレクトするデフォルトゲートウェイは、DHCPリースが期限切れになると上書きされます。

172.94.109.4 via 192.168.0.1 dev eth0

「redirect_gateway」オプションでopenvpnを起動するたびに、VPNソフトウェアはremoteVPNトンネルをバイパスし、接続されているプラ​​イマリインターフェイスを介して直接トラフィックを送信するVPNゲートウェイ(openvpn設定で対応するオプションがある行)にルートを追加する必要があります。 ISPへ - それ以外の場合、トンネルが確立されるとすぐに接続が切断されます。これは最も可能性の高いシナリオです。

172.94.109.160/28 dev tun0 proto kernel scope link src 172.94.109.163 
192.168.0.0/24 dev eth0 proto dhcp scope link src 192.168.0.200 metric 202 

これらのパスはシステム設定パスです。これらのパスはネットワークインターフェイスを設定するたびに自動的に作成されるため、同じサブネット上のすべてのネイバーホストに接続できます。アドバイス:このパスに触れないでください!

ルーティングを見ると、無効なIPが使用されているようです... "tun1" openvpnサーバーを無効にしてVPN-clientインスタンスのみを起動し、ルーティングを上記の表と比較します。私の考えでは、この比較で設定がうまくいかない理由を見つけることができます。

また、デフォルトパスを手動で追加しないでください(ポイント3)、openvpnが自動的に実行されるようにしてください。

役に立ったことを願っています!

関連情報