Linux マシンをセカンダリ ルーター/ISP に接続する: ルーティングを正しく設定するにはどうすればよいですか?

Linux マシンをセカンダリ ルーター/ISP に接続する: ルーティングを正しく設定するにはどうすればよいですか?

抽象的な:

既存のネットワーク設定にセカンダリ ISP を追加するときに問題が発生します (ルーティングの問題と思われます)。つまり、受信トラフィックはRouter1応答されませんが、ローカル トラフィックと受信はRouter0正常に動作しています。

受信トラフィックを正常に処理しながら、現在正常に機能している部分を維持するにはどうすればよいですかRouter1?

詳細:

以下に、状況の基本的な概要を示す図を示しました (実際には、各 LAN にはさらに多くのデバイスがありますが、問題にはなりません)。

状況は次のとおりです。

  • LAN0私には192.168.x.0/24LAN1の2つの内部ネットワークがあります192.168.y.0/24。どちらも内部トラフィックには問題なく動作します(例えばhttp使用してカール)。
  • LAN0は常に を通じてにRouter0接続されています。ISP0Internet
  • LAN1常に がありましたRouter1が、現在はISP1を介し​​て接続されていますInternet
  • マシンのみがオンになっておりLAN0、デフォルトのルートを経由する場合は、Router0送信トラフィックと受信トラフィックの両方で正常に動作します。
  • マシンのみがオンになっておりLAN1、デフォルトのルートを経由する場合は、Router1送信トラフィックと受信トラフィックの両方で正常に動作します。
  • 内部トラフィックはオンになっておりLAN0LAN1常に正常に動作しています。
  • Router1を経由した着信トラフィックはWindowsB正常に到着します。 から RDP 経由で接続できますWindowsC
  • 受信トラフィックRouter1LinuxBtcpダンプcurl http://e.f.g.h)だが、フロントLinuxCが示すように返答はなかった。tcpdump オン LinuxB表示:

それは、tcpdump 出力フォーマット- 持っているシンフラグセット:

LinuxB:/tmp/LinuxB.eth1.80 # tcpdump -i eth1 'port 80'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
13:35:19.489779 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 1287047182 ecr 0,sackOK,eol], length 0
13:35:19.788841 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 1287047478 ecr 0,sackOK,eol], length 0
13:35:19.888835 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 1287047578 ecr 0,sackOK,eol], length 0
13:35:19.989412 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 1287047678 ecr 0,sackOK,eol], length 0
13:35:20.089685 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 1287047778 ecr 0,sackOK,eol], length 0
13:35:20.190836 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 1287047877 ecr 0,sackOK,eol], length 0
13:35:20.392123 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 1287048072 ecr 0,sackOK,eol], length 0
13:35:20.693692 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,sackOK,eol], length 0
13:35:21.197162 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,sackOK,eol], length 0
13:35:22.204134 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,sackOK,eol], length 0
13:35:24.115961 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,sackOK,eol], length 0
13:35:27.852374 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,sackOK,eol], length 0
13:35:31.967049 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,sackOK,eol], length 0

ルートテーブルは次のとおりですLinuxB

LinuxB:/tmp/LinuxB.eth1.80 # route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.x.1     0.0.0.0         UG    0      0        0 eth0
loopback        *               255.0.0.0       U     0      0        0 lo
link-local      *               255.255.0.0     U     0      0        0 eth0
192.168.x.0     *               255.255.255.0   U     0      0        0 eth0
192.168.x.0     *               255.255.255.0   U     0      0        0 eth1

からへの RDP 経由の接続は正常に機能するためWindowsCWindowsBこれは確かにルーティングの問題であると結論付けます。これはWindowsBルート テーブルです。

C:\temp>route print
===========================================================================
Interface List
0x1 ........................... MS TCP Loopback interface
0x2 ...00 0c 29 35 77 e1 ...... AMD PCNET Family PCI Ethernet Adapter - Packet Scheduler Miniport
0x3 ...00 0c 29 35 77 eb ...... VMware Accelerated AMD PCNet Adapter - Packet Scheduler Miniport
===========================================================================
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0      192.168.x.1     192.168.x.4      10
          0.0.0.0          0.0.0.0      192.168.y.1     192.168.y.4       5
        127.0.0.0        255.0.0.0        127.0.0.1       127.0.0.1       1
      192.168.x.0    255.255.255.0      192.168.x.4     192.168.x.4      10
      192.168.x.4  255.255.255.255        127.0.0.1       127.0.0.1      10
    192.168.x.255  255.255.255.255      192.168.x.4     192.168.x.4      10
      192.168.y.0    255.255.255.0      192.168.y.4     192.168.y.4      10
      192.168.y.4  255.255.255.255        127.0.0.1       127.0.0.1      10
    192.168.y.255  255.255.255.255      192.168.y.4     192.168.y.4      10
        224.0.0.0        240.0.0.0      192.168.x.4     192.168.x.4      10
        224.0.0.0        240.0.0.0      192.168.y.4     192.168.y.4      10
  255.255.255.255  255.255.255.255      192.168.x.4     192.168.x.4       1
  255.255.255.255  255.255.255.255      192.168.y.4     192.168.y.4       1
Default Gateway:       192.168.y.1
===========================================================================
Persistent Routes:
  Network Address          Netmask  Gateway Address  Metric
          0.0.0.0          0.0.0.0      192.168.y.1       5
          0.0.0.0          0.0.0.0      192.168.x.1      10

では、ルーティングをLinuxB次のようにするにはどうすればよいでしょうか。

  • デフォルトルートをオンのままにしてLinuxB192.168.x.1送信トラフィックがRouter0/ を使用し続けるようにします。ISP0
  • LAN0からのリクエストに応答し続けるLAN0
  • LAN1からのリクエストに応答し続けるLAN1
  • Router0a.b.c.d/ 192.168.x.1)経由で受信したリクエストに応答し続ける192.168.x.1
  • Router1e.f.g.h/ 192.168.y.1)経由で着信リクエストに応答し始める192.168.y.1
  • ボーナス:Router1フェイルオーバーまたは負荷分散機能Router0

追記:

下のPNG画像生成されるUMLS とは無料のオンラインテキストプラントUMLエンジン。元のUMLテキストを見たい場合は、PNG画像リンクこの中にPlantUMLフォームを押しますSubmit

ここに画像の説明を入力してください

答え1

かなり昔に、そのようなことをするためのシェル スクリプトを持っていたのですが、残念ながら見つけることができませんでした。そのため、当時私が実装したソリューションへのポインターしか提供できません。ほとんど記憶を頼りに書いているため、例がいくつか抜けています。

  1. アップリンクごとに 1 つのルーティング テーブルがありました (ip route ... table 101、ip route ... table 102)。これは /etc/iproute2/rt_tables に格納されます。

    101 ISP1 102 ISP2

    これらのテーブルも設定する必要があります:

    ip ルートは $Gateway1 dev $Interface1 テーブル isp1 経由でデフォルトを追加します。 ip ルートは $Gateway2 dev $Interface2 テーブル isp2 経由でデフォルトを追加します。

    #デフォルトのテーブルを忘れないでください:

    ip ルートは $DefaultGateway dev $DefaultInterface 経由でデフォルトを追加します

  2. iptables 接続追跡を有効にする (modprobe nf_conntrack)

  3. 新しい着信接続のiptablesルールを設定して、パケットを何らかの方法で-j MARKにします(例:0x201、0x202)。
  4. インターフェースを介して送信されるトラフィックが適切なルーティングテーブルを使用するようにIPルールを設定します。

    $Ip1 テーブル isp1 から IP ルールを追加 $Ip2 テーブル isp2 から IP ルールを追加

  5. 「0x201 とマークされたパケットはルーティング テーブル 201 を検索する」という IP ルール (ip rule add ...) を、アップリンクごとに 1 つ設定します。

すべてが整っていれば、任意の WAN アップリンクで接続を受信および開始し、送信接続のバランスをとることもできるはずです。

これらが基本です。Iptables + 「ip route」 + 「ip rule」で準備完了です。

関連情報