IP転送を有効にしたときのルーティングの問題

IP転送を有効にしたときのルーティングの問題

作業現場

次の 2 つのシナリオがあります。サブネット

  Subnet 1: 192.168.1.0/24
  Subnet 2: 192.168.2.0/24

そして三ルーター

Router 1: 192.168.1.1
Router 2: 192.168.2.1
Router 3: 192.168.1.10 / 192.168.2.10

ルータ 1 と 2 は、各サブネットをインターネットに接続し、すべてのクライアントコンピュータでデフォルトゲートウェイとして設定されます。ルータ 3 は 2 つのサブネットを接続します。サブネット間のルーティングが機能するように2を設定しました。静的ルーティング

  Router 1: Destination 192.168.2.0, Netmask 255.255.255.0, Gateway 192.168.1.10
  Router 2: Destination 192.168.1.0, Netmask 255.255.255.0, Gateway 192.168.2.10

私の目標は、サブネット1のクライアントがサブネット2のhttp / httpsサーバーにアクセスできるようにすることです。

Client 1: 192.168.1.20        (Debian 9)
Server 1: 192.168.2.20        (Windows Server)

クライアント1からサーバー1をpingしてwgetできます。

# ping 192.168.2.20
PING 192.168.2.20 (192.168.2.20) 56(84) bytes of data.
64 bytes from 192.168.2.20: icmp_seq=2 ttl=128 time=0.993 ms
64 bytes from 192.168.2.20: icmp_seq=3 ttl=128 time=0.943 ms
64 bytes from 192.168.2.20: icmp_seq=4 ttl=128 time=1.06 ms
64 bytes from 192.168.2.20: icmp_seq=5 ttl=128 time=1.77 ms
^C
--- 192.168.2.20 ping statistics ---
5 packets transmitted, 4 received, 20% packet loss, time 4046ms
rtt min/avg/max/mdev = 0.943/1.193/1.774/0.338 ms

# wget -O- http://192.168.2.20/
--2019-06-26 08:59:12--  http://192.168.2.20/
Connecting to 192.168.2.20:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: /Test [following]
--2019-06-26 08:59:15--  http://192.168.2.20/Test
Reusing existing connection to 192.168.2.20:80.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘STDOUT’

-                                   [<=>                                                   ]       0  --.-KB/s
<!DOCTYPE html>
<html>Hello World!</html>
-                                   [ <=>                                                  ]   5.77K  --.-KB/s    in 0.002s

2019-06-26 08:59:15 (2.79 MB/s) - written to stdout [5912]

今まではそんなに良くなった。時々最初のpingだけが失われるかもしれませんが、私が理解しているように、これは問題ではありません。

質問

これで、クライアント1(tun0、サブネット10.0.0.0/24)にOpenVPNサーバーを設定する必要があります。 VPNクライアントがクライアント1だけでなく、サブネット1の他のクライアントにもアクセスできるようにしました。IP転送/etc/sysctl.confから

net.ipv4.ip_forward=1

IP転送を有効にすると、上記のルーティング設定に問題が発生し始めました。クライアント1はまだサーバー1をpingできますが、wgetを使用した通信は正常に機能しません。

# ping 192.168.2.20
PING 192.168.2.20 (192.168.2.20) 56(84) bytes of data.
From 192.168.1.1: icmp_seq=2 Redirect Host(New nexthop: 192.168.1.10)
64 bytes from 192.168.2.20: icmp_seq=2 ttl=128 time=0.935 ms
From 192.168.1.1: icmp_seq=3 Redirect Host(New nexthop: 192.168.1.10)
64 bytes from 192.168.2.20: icmp_seq=3 ttl=128 time=0.880 ms
From 192.168.1.1: icmp_seq=4 Redirect Host(New nexthop: 192.168.1.10)
64 bytes from 192.168.2.20: icmp_seq=4 ttl=128 time=0.975 ms
^C
--- 192.168.2.20 ping statistics ---
4 packets transmitted, 3 received, 25% packet loss, time 3041ms
rtt min/avg/max/mdev = 0.880/0.930/0.975/0.038 ms

# wget -O-  http://192.168.2.20
--2019-06-26 14:08:38--  http://192.168.2.20/
Connecting to 192.168.2.20:80... connected.
HTTP request sent, awaiting response... Read error (Connection reset by peer) in headers.
Retrying.

--2019-06-26 14:09:12--  (try: 2)  http://192.168.2.20/
Connecting to 192.168.2.20:80... connected.
HTTP request sent, awaiting response... Read error (Connection reset by peer) in headers.
Retrying.

^C

wgetはまだサーバー1の接続設定を管理しますが、上記のエラーを表示する前に応答のために約30秒待ちます。

IP転送によってクライアント1とサーバー1間の通信が中断される理由についてのアイデアはありますか? OpenVPN クライアントから同時にサーバー 1 にルーティングし、サブネット 1 にアクセスするようにクライアント 1 を正しく構成する方法に関する提案はありますか?

クライアント1に追加の固定パスを設定したくないが、デフォルトゲートウェイには固定パスを維持したいと思います。

ベストアンサー1

現在の設定の影響と結果をまとめるには:

あなたのシステム顧客1標準構成では、192.168.2.0/24に関する特定の情報は不明です。これは実際にルーター1192.168.2.0/24への特定のパスは、次のように定義されます。ルーター3。そうするとき顧客1192.168.2.20にアクセスしようとすると、ルーティングテーブルを調べますが、具体的な内容は見つからず、デフォルトのパスを使用します。ルーター1ルーター1自分のルートが同じ LAN にあることを検出し、ルーティングの代わりに通知します。顧客1、使用してICMPリダイレクト、使用ルーター3(192.168.1.10ゲートウェイIP)直接。顧客1デフォルトでは、単純なホストとしてICMPリダイレクトメッセージを受け入れ、現在の宛先192.168.2.20へのパスを変更して、192.168.1.1の代わりに192.168.1.10を通過します。

なぜならあなたのシステム顧客1これで、10.0.0.0/24のノードと192.168.1.0/24のノードの間でルーターとして機能するため、ルーターとしても設定する必要があります(例:次のように)。net.ipv4.ip_forward=1)。

問題は間の基本的な相互作用ですIP転送そしてリダイレクトを受け入れる:

accept_redirects - BOOLEAN
  Accept Redirects.

  Functional default: enabled if local forwarding is disabled.
              disabled if local forwarding is enabled.

今これが現在の問題です。転送が有効になっているため、リダイレクト許可は無効になります。したがって、ICMPリダイレクトを無視し、192.168.1.10を使用しなくなりました。これを防ぐ方法は2つあります。

  • したくないこと(しかしとにかく最初に提案したい):なぜなら顧客1とにかく、特定の設定を持つルータ(VPN...)で特定の設定を完了します。 192.168.2.0/24に正しい特定のパスを追加します。

    # ip route add 192.168.2.0/24 via 192.168.1.10
    

    もし顧客1次のように構成されています上下なら、正しい内容を追加できます。相互作用次の追加行があるセクション:

        up ip route add 192.168.2.0/24 via 192.168.1.10
    

    他の方法では、同等の方法を検索します(たとえば、GUIアプレットを使用してNetworkManagerを設定することもできます)。

    これで、ルーターとして機能するシステムはリダイレクトを必要とせず、リダイレクトの受信をトリガーしないため、自由にICMPリダイレクトを無視できます。

  • あるいは、配信中にICMPリダイレクトが無視されないように、特定のインターフェイスの特定の動作を調整することもできます。

    これインターフェース固有バリエーションの詳細な説明は追加オプションを提供します。

    accept_redirects - BOOLEAN
      Accept ICMP redirect messages.
      accept_redirects for the interface will be enabled if:
      - both conf/{all,interface}/accept_redirects are TRUE in the case
        forwarding for the interface is enabled
      or
      - at least one of conf/{all,interface}/accept_redirects is TRUE in the
        case forwarding for the interface is disabled
      accept_redirects for the interface will be disabled otherwise
      default TRUE (host)
          FALSE (router)
    

    基本設定net.ipv4.ip_forward=1設定に副作用がある可能性がありますnet.ipv4.conf.all.accept_redirects=0(そしてリセットip_forward=0リセットされますnet.ipv4.conf.all.accept_redirects=1! )最初の引用に記載されているとおりです。これで、次のように表示されます。

    # sysctl net.ipv4.conf.all.accept_redirects net.ipv4.conf.default.accept_redirects
    net.ipv4.conf.all.accept_redirects = 0
    net.ipv4.conf.default.accept_redirects = 1
    

    したがって、すべてのインターフェイスは継承されます。基本値は 1 ですが、グローバルに切り替えられます。みんな(この特定の設定ではインターフェイス値は適用されません。) 設定されていません。この値をほぼ反転する必要があります。みんな1として、基本接続インターフェイス以外のすべてのインターフェイスに対して 0 です。サブネット1(と仮定するとイーサネット0) 図1に設定されます. ICMP リダイレクトはセキュリティ上の理由から、または誤って設定された複数のルータ間のループ トリガを防ぐために無視されるため、必要でない場合は無視するのが最善です。とにかく、ここでは必要なものだけを有効にし、何も無効にしません(主に他のインターフェイス名がわからないため)。自由にそうしなさい。インターフェースについてもう一度考えてくださいサブネット1~と呼ばれるイーサネット0:

    # sysctl -w net.ipv4.conf.all.accept_redirects=1 # must be done AFTER net.ipv4.ip_forward=1
    # sysctl -w net.ipv4.conf.eth0.accept_redirects=1 # which should be already set
    

    起動時に設定できます。sysctl.d設定後ろに以前の設定。

今、なぜPingが動作し続け、接続が失敗する前に動作し始めるのかは本当にわかりません。

どちらの場合も注:10.0.0.0/24のシステムは192.168.2.0/24に部分的にアクセスできるようになります(おそらく独自のVPN設定を調整することによって)。その理由の1つは、10.0.0.0/24に戻るルートを知っている人が誰もいないからです。顧客1NATを実行しています。安全効果を必ず考慮してください。ファイアウォール設定を追加する必要があります(例:iptables) ルーティングを無効にします。

おすすめ記事