Linux 上の VPN - IP ルーティングの問題

Linux 上の VPN - IP ルーティングの問題

次のようなシナリオがありました。

Ubuntu サーバー 20.04 lts。簡単に言うと、次のネットワーク インターフェイスを持つサーバーという名前です。

  • ループバック
  • enp1s0 (wan) パブリックIP/23
  • enp8s0 (lan) 10.9.96.3/20
  • ppp0 (l2tp) 192.168.42.1

このルーティング テーブルでは (パブリック ルートは意図的に省略されています)、

  • 10.9.96.0/20 dev enp8s0 proto カーネル スコープ リンク src 10.9.96.3
  • 192.168.1.0/24 経由 192.168.42.10 dev ppp0
  • 192.168.42.10 dev ppp0 proto カーネル スコープ リンク src 192.168.42.1

IP 192.168.42.10 に接続されたリモート VPN クライアントがあります。
このクライアントは、リモート LAN ネットワーク 192.168.1.0/24 を提供する MikroTik ルーターです。
私が追加した静的ルート (192.168.42.10 dev ppp0 経由の 192.168.1.0/24) を使用すると、192.168.1.0/24 デバイスにアクセスできます。


別の Ubuntu サーバー 20.04 lts (簡単に言うと B サーバーという名前) には、次のネットワーク インターフェイスがあります。

  • ループバック
  • enp1s0 (wan) パブリックIP/23
  • enp8s0 (lan) 10.9.96.4/20

このルーティング テーブル (パブリック ルートは意図的に省略されています) は次のとおりです。

  • 10.9.96.0/20 dev enp8s0 proto カーネル スコープ リンク src 10.9.96.4

基本的に、サーバー B から 192.168.1.0/24 デバイスにアクセスする必要がありますが、うまくいきません。このサーバー内で
10.9.96.3 dev enp8s0 経由で 192.168.1.0/24 という静的ルートを追加しようとしました
が、成功しませんでした。192.168.1.X 宛てのパケットがサーバー A に到達しているのがわかりますが、ppp0 インターフェイスに転送されないようです (そのため、iptables ルールもいくつか試しました)

この問題を解決するにはどうすればよいですか?

両方のサーバーでファイアウォールが無効になっています。

答え1

注記: この回答では、ネットワークは100.64.10.0/23パブリック ネットワークを表します。これは特に関連性はありませんが、これらの仮想ノードのネットワーク構成を質問で説明したものと一致させるためだけに存在します。


問題は、192.168.1.0/24 ネットワーク上のホストが 10.9.96.0/20 ネットワークに到達する方法を知らないことです。

質問で示された内容に基づくと、microtik ルーター (192.168.42.10/192.168.1.1) のルーティング テーブルはおそらく次のようになります。

192.168.1.0/24 dev h1-eth0 proto kernel scope link src 192.168.1.1
192.168.42.0/24 dev h1-eth1 proto kernel scope link src 192.168.42.10

serverA のルーティング テーブルは次のようになります。

default via 100.64.10.1 dev serverA-eth0
10.9.96.0/20 dev serverA-eth1 proto kernel scope link src 10.9.96.3
100.64.10.0/23 dev serverA-eth0 proto kernel scope link src 100.64.10.10
192.168.1.0/24 via 192.168.42.10 dev serverA-eth2
192.168.42.0/24 dev serverA-eth2 proto kernel scope link src 192.168.42.1

serverA、ネットワーク上のアドレスに ping を実行すると192.168.1.0/24、送信元アドレスは になります192.168.42.1。microtik ルーターにはそのネットワークへのルートがあるため、すべて正常です。

serverB次のようなルーティング テーブルがある場合:

default via 100.64.10.1 dev serverB-eth0
10.9.96.0/20 dev serverB-eth1 proto kernel scope link src 10.9.96.4
100.64.10.0/23 dev serverB-eth0 proto kernel scope link src 100.64.10.20
192.168.1.0/24 via 10.9.96.3 dev serverB-eth1

その後、ネットワーク上のアドレスに接続しようとすると192.168.1.0/24、送信元アドレスは になります10.9.96.4。microtik ルーターはそのアドレスに到達する方法を知りません (または、デフォルト ゲートウェイ経由で応答しようとしますが、これは不適切です)。

解決策は、次のように microtik ルーターにルートを追加することです。

ip route add 10.9.96.0/20 via 192.168.42.1

今:

  • MicrotikルータにはServerBへの有効なルートがあるため、ServerBはMicrotikルータにpingを送信できます。
  • サーバーBはpingできる他の192.168.1.0/24これらのホストは、デフォルト ゲートウェイとして microtik ルーター ( ) を使用しているため、ネットワーク上のホストには接続できません192.168.1.1。また、前の箇条書きで説明したように、ルーターには適切なルートがあります。

私はこれらすべてを、以下の方法で構築したシミュレートされたネットワーク環境でテストしました。ミニネット; 設定はここ興味があれば。

関連情報