
抽象的な:
既存のネットワーク設定にセカンダリ ISP を追加するときに問題が発生します (ルーティングの問題と思われます)。つまり、受信トラフィックはRouter1
応答されませんが、ローカル トラフィックと受信はRouter0
正常に動作しています。
受信トラフィックを正常に処理しながら、現在正常に機能している部分を維持するにはどうすればよいですかRouter1
?
詳細:
以下に、状況の基本的な概要を示す図を示しました (実際には、各 LAN にはさらに多くのデバイスがありますが、問題にはなりません)。
状況は次のとおりです。
LAN0
私には192.168.x.0/24
とLAN1
の2つの内部ネットワークがあります192.168.y.0/24
。どちらも内部トラフィックには問題なく動作します(例えばhttp使用してカール)。LAN0
は常に を通じてにRouter0
接続されています。ISP0
Internet
LAN1
常に がありましたRouter1
が、現在はISP1
を介して接続されていますInternet
。- マシンのみがオンになっており
LAN0
、デフォルトのルートを経由する場合は、Router0
送信トラフィックと受信トラフィックの両方で正常に動作します。 - マシンのみがオンになっており
LAN1
、デフォルトのルートを経由する場合は、Router1
送信トラフィックと受信トラフィックの両方で正常に動作します。 - 内部トラフィックはオンになっており
LAN0
、LAN1
常に正常に動作しています。 Router1
を経由した着信トラフィックはWindowsB
正常に到着します。 から RDP 経由で接続できますWindowsC
。- 受信トラフィック
Router1
はLinuxB
(tcpダンプ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 経由の接続は正常に機能するためWindowsC
、WindowsB
これは確かにルーティングの問題であると結論付けます。これは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画像生成されるUMLS とは無料のオンラインテキストプラントUMLエンジン。元のUMLテキストを見たい場合は、PNG画像リンクこの中にPlantUMLフォームを押しますSubmit
。
答え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 経由でデフォルトを追加します
iptables 接続追跡を有効にする (modprobe nf_conntrack)
- 新しい着信接続のiptablesルールを設定して、パケットを何らかの方法で-j MARKにします(例:0x201、0x202)。
インターフェースを介して送信されるトラフィックが適切なルーティングテーブルを使用するようにIPルールを設定します。
$Ip1 テーブル isp1 から IP ルールを追加 $Ip2 テーブル isp2 から IP ルールを追加
「0x201 とマークされたパケットはルーティング テーブル 201 を検索する」という IP ルール (ip rule add ...) を、アップリンクごとに 1 つ設定します。
すべてが整っていれば、任意の WAN アップリンクで接続を受信および開始し、送信接続のバランスをとることもできるはずです。
これらが基本です。Iptables + 「ip route」 + 「ip rule」で準備完了です。