Puncte:0

Cum se accesează serverul Ubuntu pe două ip-uri publice diferite

drapel cn

Mă confrunt cu problema actuală:

Informații de fundal: Ubuntu 20.04 pe dell R710

Am 2 conexiuni la internet diferite cu 2 routere furnizate de ISP. Am conectat eno2 la routerul isp1 și am obținut ip-ul 192.168.2.102 prin închiriere permanentă dhcp. Am conectat eno3 la routerul isp2 și am obținut ip-ul 192.168.88.254 prin închiriere permanentă dhcp.

ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue stare UNKNOWN grup implicit qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft pentru totdeauna preferred_lft pentru totdeauna
    inet6 ::1/128 scope host
       valid_lft pentru totdeauna preferred_lft pentru totdeauna
2: eno1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq stare JOS grup implicit qlen 1000
    link/ether d4:be:d9:ee:7b:75 brd ff:ff:ff:ff:ff:ff
3: eno2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq stare UP grup implicit qlen 1000
    link/ether d4:be:d9:ee:7b:77 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.102/24 brd 192.168.2.255 scope global dynamic noprefixroute eno2
       valid_lft 41588sec preferred_lft 41588sec
    inet6 fe80::d6be:d9ff:feee:7b77/64 scope link
       valid_lft pentru totdeauna preferred_lft pentru totdeauna
4: eno3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq stare UP grup implicit qlen 1000
    link/ether d4:be:d9:ee:7b:79 brd ff:ff:ff:ff:ff:ff
    inet 192.168.88.254/24 brd 192.168.88.255 scope global dynamic noprefixroute eno3
       valid_lft 486sec preferred_lft 486sec
    inet6 fe80::d6be:d9ff:feee:7b79/64 scope link
       valid_lft pentru totdeauna preferred_lft pentru totdeauna
5: eno4: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq stare JOS grup implicit qlen 1000
    link/ether d4:be:d9:ee:7b:7b brd ff:ff:ff:ff:ff:ff
...

netstat -rn

Tabelul de rutare IP al nucleului
Destination Gateway Genmask Flags Fereastra MSS irtt Iface
0.0.0.0 192.168.88.1 0.0.0.0 UG 0 0 0 eno3
0.0.0.0 192.168.2.1 0.0.0.0 UG 0 0 0 eno2
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eno2
192.168.88.0 0.0.0.0 255.255.255.0 U 0 0 0 eno3

Problema este că pot accesa serverul doar pe un singur IP public (aleatoriu) la un moment dat dacă sunt în afara rețelei de lan. Dacă 77.xx.xx.158 (isp 2) poate fi accesat, 5.xx.xx.55 (isp 1) este inaccesibil și invers, aleatoriu după fiecare boot.

Trebuie să pot accesa serverul de pe oricare dintre IP-urile publice în orice moment.

Va multumesc anticipat pentru orice solutie posibila.

FedKad avatar
drapel cn
Acest lucru este normal, deoarece pachetele pot fi direcționate prin oricare dintre cele două interfețe (și nu există preferințe). Cum „accesezi” serverul tău? Dacă este ssh, puteți porni o instanță de ssh care ascultă pe un port, de exemplu 22 și legată la o interfață, și o altă instanță care ascultă la un alt port (să zicem 2222) și să fie legată de cealaltă interfață.
Puncte:1
drapel br

Aveți două rute implicite în coliziune:

Tabelul de rutare IP al nucleului
Destination Gateway Genmask Flags Fereastra MSS irtt Iface
0.0.0.0 192.168.88.1 0.0.0.0 UG 0 0 0 eno3
0.0.0.0 192.168.2.1 0.0.0.0 UG 0 0 0 eno2

Aceasta este o situație anormală. PC-ul/serverul dvs. este confuz deoarece nu există o regulă exactă pentru a decide care dintre cele două interfețe ar trebui să fie utilizată ca poartă de acces la Internet. Decizia de rutare depinde de valorile setate dinamic pe interfețe sau de alți factori, care se pot schimba aleatoriu. Prin urmare, uneori este preferată interfața eno2 și alteori eno3 ca gateway principală.

Presupun că pachetele primite din exterior spre interior ajung la serverul dvs. pe calea corectă, în funcție de adresa IP utilizată ca destinație (din punctul de vedere al utilizatorului din exterior).

  • Pachetul SYN TCP trimis de pe Internet către adresa publică ISP1 intră prin eno2
  • Pachetul SYN TCP trimis de pe Internet către adresa publică ISP2 intră prin eno3

Îl puteți verifica folosind Wireshark sau Tshark sau tcpdump.

Dar pachetul de răspuns (SYN ACK TCP) este trimis înapoi NUMAI prin MAIN GATEWAY selectat de sistem în acest moment. Doar un GW din doi este de preferat și al doilea NU ESTE UTILIZAT deloc în același timp (cu excepția faptului că faci niște setări speciale). Înseamnă că conexiunea vizată către o interfață funcționează bine, dar a doua conexiune este răspunsă printr-o interfață greșită. Această situație se numește „rutare asimetrică”. Pachetul intră prin eno3 și răspunsul pleacă prin eno2, de ex.

De obicei, furnizorii verifică și aruncă un astfel de pachet, deoarece arată ca un atac de rețea. Adresa IP sursă nu se potrivește cu adresa de rețea a interfeței sursă.

Deciziile de rutare ale serverului dumneavoastră NU depind de interfața utilizată pentru intrarea pachetelor, ci de gateway-ul principal de ieșire preferat. Modul de intrare și cel de ieșire sunt diferite pentru o anumită conexiune și acesta este motivul problemei dvs.

Situația poate fi rezolvată prin rutare avansată (de ex.rutare bazată pe politici și tabele/reguli speciale de rutare separate pentru fiecare interfață). Căutați exemple iproute2.

Poate că aceste link-uri vă pot ajuta:

https://www.thomas-krenn.com/en/wiki/Two_Default_Gateways_on_One_System

https://tweenpath.net/multiple-default-gateways-system/

Dan Hendli avatar
drapel cn
Mulțumesc! O să mă uit la asta

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.