要約:
既存のネットワーク設定にセカンダリISPを追加すると、(ルーティングと思われる)問題が発生します。Router1
を介した着信トラフィックは応答されませんが、ローカルトラフィックとRouter0
を介した着信は正常に機能しています。
Router1
を介した着信トラフィックを機能させながら、現在機能しているパーツを正常に機能させるにはどうすればよいですか?
詳細:
以下の図を、状況の基本的な部分とともにスケッチしました(実際には、各LANにはより多くのデバイスがありますが、それらは重要ではありません)。
これは状況です:
LAN0
は192.168.x.0/24
で、LAN1
は192.168.y.0/24
です。どちらも内部トラフィックに対しては正常に機能します(たとえば、 http using cURL )。LAN0
は常にRouter0
およびISP0
を介してInternet
に接続されています。LAN1
には常にRouter1
がありましたが、現在はISP1
を介してInternet
に接続されています。LAN0
上にあり、Router0
を経由するデフォルトルートを持つマシンは、発信トラフィックと着信トラフィックに対して正常に機能します。LAN1
上にあり、Router1
を経由するデフォルトルートを持つマシンは、発信トラフィックと着信トラフィックに対して正常に機能します。LAN0
およびLAN1
の内部トラフィックは常に正常に機能しています。WindowsB
のRouter1
を介した着信トラフィックは正しく到着します。WindowsC
からRDP経由で接続できます。LinuxB
のRouter1
を介した着信トラフィックが到着しますが( tcpdump による)、curl http://e.f.g.h
fron LinuxC
が示すように応答されません。 tcpdump onLinuxB
は次のことを示しています: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
WindowsC
からWindowsB
へのRDP経由の接続は正常に機能するため、これは確かにルーティングの問題であると再開します。これは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
のルーティングを次のようにするにはどうすればよいですか。
LinuxB
から192.168.x.1
に維持して、発信トラフィックがRouter0
/ISP0
を使用し続けるようにします。LAN0
のLAN0
からの着信リクエストに引き続き応答しますLAN1
のLAN1
からの着信リクエストに引き続き応答しますRouter0
(a.b.c.d
/192.168.x.1
)から192.168.x.1
経由で着信リクエストに応答し続けますRouter1
(e.f.g.h
/192.168.y.1
)から192.168.y.1
経由で着信リクエストへの応答を開始しますRouter1
フェイルオーバーまたはRouter0
との負荷分散があります追記:
以下のPNG画像 は [〜#〜] uml [〜#〜] 無料のオンライン PlantUML エンジンを介してテキストで生成されます。元のUMLテキストを表示する場合は、 PNG画像リンク をこの PlantUMLフォーム に貼り付けてから、Submit
を押します。
ずっと前にそのようなことをするためのシェルスクリプトを持っていましたが、申し訳ありませんが、それを見つけることができました。そのため、当時実装したソリューションへのポインタしか提供できません。私は主にメモリから書いているので、いくつかの例が欠落しています:
アップリンクごとに1つのルーティングテーブルがありました(ipルート...テーブル101、ipルート...テーブル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
#デフォルトのテーブルを忘れないでください:
ip route add default via $ DefaultGateway dev $ DefaultInterface
Iptables接続追跡を有効にする(modprobe nf_conntrack)
インターフェイスを経由して送信されるトラフィックが正しいルーティングテーブルを使用するようにするIPルールを設定します
ip rule add from $ Ip1 table isp1 ip rule add from $ Ip2 table isp2
「0x201とマークされたパケットはルーティングテーブル201を検索する」というipルール(ip rule add ...)を設定します。これは、アップリンクごとに1つのルールです。
すべてが整っていると、WANアップリンクとの接続を受信および開始でき、発信接続のバランスを取ることもできます。
それが基本です。 Iptables + "ip route" + "iprule"そしてあなたは行ってもいいです。