作業現場
次の 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) ルーティングを無効にします。