Abstrakcyjny:
Mam problemy (zakładam, że routing) podczas dodawania dodatkowego usługodawcy internetowego do mojej istniejącej konfiguracji sieci: ruch przychodzący Router1
nie jest odbierany, ale ruch lokalny i ruch przychodzący Router0
działa dobrze.
Jak mogę utrzymać działające części, które obecnie działają dobrze, jednocześnie generując ruch przychodzący przez Router1
pracę?
Opracowanie:
Naszkicowałem poniższy schemat z podstawowymi elementami sytuacji (w praktyce w każdej sieci LAN jest więcej urządzeń, ale nie mają one znaczenia).
Oto sytuacja:
- Mam dwie sieci wewnętrzne:
LAN0
jest192.168.x.0/24
iLAN1
jest192.168.y.0/24
. Oba działają dobrze dla ruchu wewnętrznego (na przykład http za pomocą cURL ). LAN0
zawsze był podłączony przezRouter0
iISP0
doInternet
.LAN1
zawsze miałemRouter1
, ale teraz jest podłączonyISP1
doInternet
.- Komputery działają tylko
LAN0
z domyślną trasą iRouter0
działają prawidłowo dla ruchu wychodzącego i przychodzącego. - Komputery działają tylko
LAN1
z domyślną trasą iRouter1
działają prawidłowo dla ruchu wychodzącego i przychodzącego. - Wewnętrzny ruch włączony
LAN0
iLAN1
zawsze działał dobrze. - Ruch przychodzący
Router1
dlaWindowsB
przychodzi poprawnie: mogę połączyć się z nim przez RDP zWindowsC
. - Przychodzący ruch przychodzący
Router1
dlaLinuxB
przybywa (zgodnie z tcpdump ), ale nie odpowiedział, gdycurl http://e.f.g.h
fronLinuxC
pokazuje z tcpdump naLinuxB
pokazach:
Pokazuje tylko pakiety, które - zgodnie z formatem wyjściowym tcpdump - mają ustawioną flagę 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
Oto LinuxB
tabela tras:
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
Ponieważ łączenie się przez RDP z WindowsC
do WindowsB
działa dobrze, wznawiam, że jest to rzeczywiście problem z routingiem. Oto WindowsB
tabela tras:
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
Jak mogę LinuxB
ustawić routing tak:
- zachowaj domyślną trasę,
LinuxB
aby192.168.x.1
ruch wychodzący nadal używałRouter0
/ISP0
- wciąż odpowiadaj na przychodzące żądania od
LAN0
dniaLAN0
- wciąż odpowiadaj na przychodzące żądania od
LAN1
dniaLAN1
- odpowiadać na przychodzące żądania za pośrednictwem
Router0
(a.b.c.d
/192.168.x.1
) przez192.168.x.1
- zacznij odpowiadać na przychodzące żądania przez
Router1
(e.f.g.h
/192.168.y.1
) przez192.168.y.1
- bonus: mieć
Router1
przełączenie awaryjne lub równoważenie obciążeniaRouter0
Postscriptum:
Poniższy obraz PNG jest generowany na tekście UML za pośrednictwem bezpłatnego silnika PlantUML online . Jeśli chcesz zobaczyć oryginalny tekst UML, wklej link obrazu PNG do tego formularza PlantUML , a następnie naciśnij Submit
.
źródło
yast
.Yast
wydaje się, że wykonuje skomplikowane routing iroute
wydaje się być przestarzały na korzyśćip
. Zobacz opensuse.14.x6.nabble.com/yast2-advanced-routing-td3083578.html i suse.com/documentation/sles11/book_sle_admin/data/...Odpowiedzi:
Miałem skrypt powłoki do robienia czegoś takiego dawno temu, ale przepraszam, mogłem to znaleźć. Mogę więc podać tylko wskazówki dotyczące rozwiązań, które wówczas wdrożyłem. Piszę głównie z pamięci, więc brakuje niektórych przykładów:
Miałem jedną tabelę routingu na łącze wysyłające (trasa ip ... tabela 101, trasa ip ... tabela 102). To idzie do / etc / iproute2 / rt_tables.
101 isp1 102 isp2
Musisz również skonfigurować te tabele:
ip route dodaj domyślnie przez $ Gateway1 dev $ Interfejs1 tabela isp1 ip route dodaj domyślnie przez $ Gateway2 dev $ Interfejs2 tabela isp2
# Nie zapomnij o domyślnej tabeli:
ip route dodaj domyślnie przez $ DefaultGateway dev $ DefaultInterface
Włącz śledzenie połączeń iptables (modprobe nf_conntrack)
Ustaw regułę ip, która zapewni, że ruch wychodzący, gdy interfejs korzysta z właściwej tabeli routingu
dodawanie reguły ip z tabeli $ Ip1 isp1 dodawanie reguły ip z tabeli $ Ip2 isp2
Ustaw regułę ip (dodaj regułę ip ...) stwierdzającą, że „pakiety oznaczone 0x201 będą sprawdzać tablicę routingu 201”, jedna reguła dla każdego łącza wysyłającego.
Mając wszystko na swoim miejscu, powinieneś być w stanie odbierać i inicjować połączenia z dowolnym połączeniem wstępującym, a nawet balansować połączenia wychodzące.
To byłyby podstawy. Iptables + „ip route” + „ip rule” i możesz zacząć.
źródło