Linuxマシンをセカンダリルーター/ ISPにフックする:ルーティングを正しくセットアップする方法?


8

概要:

セカンダリISPを既存のネットワーク設定に追加するときに(ルーティングを想定している)問題があります。着信トラフィックRouter1は応答しませんが、ローカルトラフィックと着信スルーRouter0は正常に機能しています。

Router1仕事を通じて着信トラフィックを作成しながら、現在は正常に機能しているパーツをどのように維持できますか?

詳細:

以下の図は、状況の基本を示したものです(実際には、各LANにさらに多くのデバイスがありますが、それらは重要ではありません)。

これは状況です:

  • 私は2つの内部ネットワークを持っています:LAN0is 192.168.x.0/24LAN1is 192.168.y.0/24です。どちらも内部トラフィック(たとえばcURLを使用したhttp)に対しては正常に機能します。
  • LAN0常にを介して接続されているRouter0ISP0しますInternet
  • LAN1常に持っていましたがRouter1、現在はに接続されISP1ていInternetます。
  • のみでLAN0デフォルトのルートが設定されているマシンはRouter0、発信トラフィックと着信トラフィックに対して適切に機能します。
  • のみでLAN1デフォルトのルートが設定されているマシンはRouter1、発信トラフィックと着信トラフィックに対して適切に機能します。
  • 内部トラフィックはオンでLAN0LAN1常に正常に機能しています。
  • 着信トラフィック経由Router1のためWindowsBに正しく到着した:私はからRDPを介してそれに接続することができますWindowsC
  • 受信トラフィックRouter1LinuxB到着しますが(tcpdumpによる)、curl http://e.f.g.hフロンLinuxCtcpdumpで LinuxB表示されているため、応答が返されません。

これは、tcpdump出力フォーマットに従って、SYNフラグが設定されているパケットのみを示します。

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画像は、無料のオンラインPlantUMLエンジンを介してUMLテキストに生成されます。元のUMLテキストを表示するには、PNG画像リンクをこのPlantUMLフォームに貼り付けて、を押します。Submit

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


unix.stackexchange.com/a/23345/69111で興味深い答えを見つけたところ、それが私のケースに当てはまるかどうか、およびを使用して実装する方法を調査していyastます。
Jeroen Wiert Pluimers 14

1
Yastは複雑なルーティングを行うことrouteを考えており、非推奨となっているためですipopensuse.14.x6.nabble.com/yast2-advanced-routing-td3083578.htmlおよびsuse.com/documentation/sles11/book_sle_admin/data/…を
Jeroen Wiert Pluimers 14

1
unix.stackexchangeのリンクされたソリューションは正しい方向に進んでおり、Linuxの問題を解決します-Linuxノードには2つの個別のルーティングテーブルがあり、接続が開始されたインターフェイスに応じて適切なテーブルを使用します。私はそのようなWindowsの解決策を知りません。2つのサブネットが本当に必要な場合を除いて、1つを取り除き、両方のISPに1つのルーターを使用します。2つのWANを適切に処理できるルーターを購入するか、別のLinuxシステムを使用してそれを行うことができます。これにより、背後にあるシステムでのルーティングが簡素化されます。
デビッドマッキントッシュ2014

@DavidMackintosh将来的には。これは一時的なものです。ファイバーは実際にはDSLであり、別のファイバーアドレスに移動します。マシンはDNSとMXなので、ファイバーがアクティブになる前または後にDSLがシャットダウンされるかどうかわからないため、2つのISPからアクセスできるようにして継続性を確保します。
Jeroen Wiert Pluimers、2014

回答:


1

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

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

    101 isp1 102 isp2

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

    ip route add default via $ Gateway1 dev $ Interface1 table isp1 ip route add default via $ Gateway2 dev $ Interface2 table isp2

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

    $ DefaultGateway dev $ DefaultInterfaceを介したip route add default

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

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

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

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

すべての準備が整ったら、WANアップリンクとの接続を受信して​​開始し、発信接続のバランスをとることができます。

それらが基本になります。Iptables + "IPルート" + "IPルール"で問題ありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.