Puncte:2

Traficul VLAN de rutare a gazdei Linux nu poate primi sau realiza conexiuni la rețea

drapel bs

Am un sistem CentOS 7 care are trei interfețe. eu recent a convertit unul pe acele interfețe pentru a utiliza VLAN-uri. Acest sistem de servere ca firewall și router între diferitele rețele. Tot părea să funcționeze conform așteptărilor, cu excepția unui articol. Nu mă pot conecta în sau din sistemul CentOS de la/către orice gazdă de pe VLAN-uri.

De exemplu, dacă fac ssh de la 192.168.32.95 (o gazdă pe VLAN 32) la 192.168.32.1 (interfață VLAN 32 pe gazda CentOS), pot vedea pachetele cu tcpdump ajung pe interfața enp3s0, etichetate cu vlan 32. Lanțul de INPUT iptables înregistrează și ACCEPTĂ pachetul. După aceea, pachetul a dispărut. Niciun SYN-ACK trimis, nici un RST trimis.

În mod similar, pentru ceva de genul NTP de la 192.168.32.1 la 192.168.32.3, firewall-ul înregistrează și ACCEPTĂ pachetul NTP de ieșire, dar apoi nu pachetul este văzut de tcpdump care pleacă pe enp3s0 (adică enp3s0.32)

Ping-urile de la VLAN 32 funcționează... Pot ping gazda CentOS de la VLAN 32 și obține un răspuns.

Sistemul CentOS trimite pachete între toate combinațiile de interfețele VLAN și non-VLAN.

Orice gânduri despre ce ar putea explica aceste probleme de conectare sau chiar o modalitate de a urmări în continuare ceea ce se întâmplă?

# afișare adresă ip
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
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP grup implicit qlen 1000
    link/ether c0:25:e9:0e:cb:a1 brd ff:ff:ff:ff:ff:ff
    inet 10.20.30.177/28 brd 10.20.30.191 scope global enp1s0
       valid_lft pentru totdeauna preferred_lft pentru totdeauna
3: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP grup implicit qlen 1000
    link/ether 84:16:f9:05:3a:fb brd ff:ff:ff:ff:ff:ff
    inet 192.168.16.1/24 brd 192.168.16.255 scope global enp2s0
       valid_lft pentru totdeauna preferred_lft pentru totdeauna
4: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP grup implicit qlen 1000
    link/ether 6c:f0:49:42:5b:fa brd ff:ff:ff:ff:ff:ff
5: enp3s0.32@enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue stare UP grup implicit qlen 1000
    link/ether 6c:f0:49:42:5b:fa brd ff:ff:ff:ff:ff:ff
    inet 192.168.32.1/24 brd 192.168.32.255 scope global enp3s0.32
       valid_lft pentru totdeauna preferred_lft pentru totdeauna
6: enp3s0.50@enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue stare UP grup implicit qlen 1000
    link/ether 6c:f0:49:42:5b:fa brd ff:ff:ff:ff:ff:ff
    inet 192.168.50.1/24 brd 192.168.50.255 scope global enp3s0.50
       valid_lft pentru totdeauna preferred_lft pentru totdeauna

Aici este lanțul INPUT unde am pus o regulă de logare și ACCEPT chiar la început.

# iptables -t filter -S INPUT
-P CĂDERARE INTRARE
-A INTRARE -i lo -j ACCEPT
-A INPUT -m stare --stare RELATED,STABLISHED -j ACCEPT
-A INTRARE -s 192.168.32.95/32 -d 192.168.32.1/32 -p tcp -m tcp --dport 22 -j LOG --log-prefix "TEST IN: "
-A INTRARE -s 192.168.32.95/32 -d 192.168.32.1/32 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -m stare --stare INVALID -j INVALID
-A INTRARE -m stare --stare UNTRACKED -j UNTRACKED
-A INTRARE -i enp1s0 -j ​​INTRARE-EXT
-A INTRARE -i enp2s0 -j ​​INTRARE-MID
-A INTRARE -i enp3s0.32 -j INTRARE-V32
-A INTRARE -i enp3s0.50 -j INTRARE-V50
-A INPUT -j LOG --log-prefix "DROP EOC INPUT: " --log-tcp-options --log-ip-options
-A INTRARE -j CĂDERARE

Firewall înregistrează pachetul SYN.

4 iulie 14:21:49 în afara nucleului: [112380.489332] TEST IN: IN=enp3s0.32 OUT= MAC=6c:f0:49:42:5b:fa:52:54:00:35:f4:e4:08 :00:45:00:00:3c SRC=192.168.32.95 DST=192.168.32.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=17731 DF PROTO=TCP SPT=51926 DPTRES=2900INDOW=292 0x00 SYN URGP=0

Ieșirea tcpdump arată mai multe copii ale pachetului SYN care sosesc.

# tcpdump -e -nn -i enp3s0 gazdă 192.168.32.95 și gazdă 192.168.32.1
14:21:49.516122 52:54:00:35:f4:e4 > 6c:f0:49:42:5b:fa, ethertype 802.1Q (0x8100), lungime 78: vlan 32, p 0, ethertype IPv4, 192. 32.95.51926 > 192.168.32.1.22: steaguri [S], seq 3631520692, win 29200, opțiuni [mss 1460,sackOK,TS val 69303507 ecr 0,nop],wscale 07
14:21:50.529043 52:54:00:35:f4:e4 > 6c:f0:49:42:5b:fa, ethertype 802.1Q (0x8100), lungime 78: vlan 32, p 0, ethertype IPv4, 192. 32.95.51926 > 192.168.32.1.22: Steaguri [S], seq 3631520692, win 29200, opțiuni [mss 1460,sackOK,TS val 69303760 ecr 0,nop],wscale07,wscale
14:21:52.543926 52:54:00:35:f4:e4 > 6c:f0:49:42:5b:fa, ethertype 802.1Q (0x8100), lungime 78: vlan 32, p 0, ethertype IPv4, 192. 32.95.51926 > 192.168.32.1.22: Steaguri [S], seq 3631520692, win 29200, opțiuni [mss 1460,sackOK,TS val 69304264 ecr 0,nop],wscale 07
14:21:56.607938 52:54:00:35:f4:e4 > 6c:f0:49:42:5b:fa, ethertype 802.1Q (0x8100), lungime 78: vlan 32, p 0, ethertype IPv4, 192. 32.95.51926 > 192.168.32.1.22: Steaguri [S], seq 3631520692, win 29200, opțiuni [mss 1460,sackOK,TS val 69305280 ecr 0,nop],wscale07,wscale
14:22:04.799936 52:54:00:35:f4:e4 > 6c:f0:49:42:5b:fa, ethertype 802.1Q (0x8100), lungime 78: vlan 32, p 0, ethertype IPv4, 192. 32.95.51926 > 192.168.32.1.22: Steaguri [S], seq 3631520692, win 29200, opțiuni [mss 1460,sackOK,TS val 69307328 ecr 0,nop],wscale07,wscale

Informații suplimentare solicitate:

# traseu ip
implicit prin 50.196.138.190 dev enp1s0
10.20.30.176/28 dev enp1s0 proto kernel scope link src 10.20.30.177
192.168.16.0/24 dev enp2s0 proto kernel scope link src 192.168.16.1
192.168.32.0/24 dev enp3s0.32 proto kernel scope link src 192.168.32.1
192.168.50.0/24 dev enp3s0.50 proto kernel scope link src 192.168.50.1
# regulă ip
0: din toate căutările locale
32766: din toate căutările principale
32767: din toate căutările implicite
# ip route show table local
difuzare 10.20.30.176 dev enp1s0 proto kernel scope link src 10.20.30.177
local 10.20.30.177 dev enp1s0 proto kernel scope host src 10.20.30.177
difuzare 10.20.30.191 dev enp1s0 proto kernel scope link src 10.20.30.177
difuzare 127.0.0.0 dev la proto kernel scope link src 127.0.0.1
local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1
difuzare 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1
difuzare 192.168.16.0 dev enp2s0 proto kernel scope link src 192.168.16.1
local 192.168.16.1 dev enp2s0 proto kernel scope host src 192.168.16.1
difuzare 192.168.16.255 dev enp2s0 proto kernel scope link src 192.168.16.1
difuzare 192.168.32.0 dev enp3s0.32 proto kernel scope link src 192.168.32.1
local 192.168.32.1 dev enp3s0.32 proto kernel scope host src 192.168.32.1
difuzare 192.168.32.255 dev enp3s0.32 proto kernel scope link src 192.168.32.1
difuzare 192.168.50.0 dev enp3s0.50 proto kernel scope link src 192.168.50.1
local 192.168.50.1 dev enp3s0.50 proto kernel scope host src 192.168.50.1
difuzare 192.168.50.255 dev enp3s0.50 proto kernel scope link src 192.168.50.1

Am adăugat o anumită regulă de logare și ACCEPT în lanțul OUTPUT, dar nimic nu a fost logat din el.

# iptables -S IEȘIRE
-P CADEREA IESIRI
-A IEȘIRE -o lo -j ACCEPT
-A IEȘIRE -m stare --stare RELATED,STABLISHED -j ACCEPT
-A IEȘIRE -s 192.168.32.1/32 -d 192.168.32.95/32 -p tcp -m tcp --sport 22 -j LOG --log-prefix "TEST OUT: "
-A IEȘIRE -s 192.168.32.1/32 -d 192.168.32.95/32 -p tcp -m tcp --sport 22 -j ACCEPT
-A IEȘIRE -m stare --stare INVALID -j INVALID
-A IEȘIRE -m stare --stare NESURMARAT -j NEURMĂRIT
-A IEȘIRE -o enp1s0 -j ​​IEȘIRE-EXT
-A IEȘIRE -o enp2s0 -j ​​IEȘIRE-MID
-A IEȘIRE -o enp3s0.32 -j IEȘIRE-V32
-A IEȘIRE -o enp3s0.50 -j IEȘIRE-V50
-A OUTPUT -j LOG --log-prefix "DROP EOC OUTPUT: " --log-tcp-options --log-ip-options
-A IEȘIRE -j CĂDURA
# ss -atn
State Recv-Q Trimitere-Q Adresă locală:Port Adresă peer:Port
ASCULTĂ 0 128 127.0.0.1:199 *:*
ASCULTĂ 0 128 *:22 *:*
SYN-RECV 0 0 192.168.32.1%if378475780:22 192.168.32.95:36778
ASCULTATE 0 100 127.0.0.1:25 *:*
ESTAB 0 292 192.168.16.1:22 192.168.16.61:49618

# cat /etc/sysconfig/network-scripts/ifcfg-enp3s0.32
DEVICE=enp3s0.32
TYPE=Ethernet
ONBOOT=da
VLAN=da
BOOTPROTO=static
IPADDR=192.168.32.1
NETMASK=255.255.255.0
IPV6INIT=nu

# cat /etc/sysconfig/network-scripts/ifcfg-enp3s0
DEVICE=enp3s0
TYPE=Ethernet
ONBOOT=da
BOOTPROTO=static
IPV6INIT=nu

Iată trei încercări de a ssh în această gazdă. Fiecare listă de mai jos este după ce ssh-ul anterior a ieșit, cu expirarea timpului de conectare și după ce SYN-RECV anterioară a dispărut. Am eliminat liniile LISTEN și ESTAB din exterior, deoarece sunt în esență aceleași cu ieșirea anterioară. De asemenea Liniile SYN-RECV au fost goale în coloana de proces.

# ss -atnp
State Recv-Q Trimitere-Q Adresă locală:Port Adresă peer:Port
SYN-RECV 0 0 192.168.32.1%if-8096:22 192.168.32.95:47290

# ss -atnp
State Recv-Q Trimitere-Q Adresă locală:Port Adresă peer:Port
SYN-RECV 0 0 192.168.32.1%if378479604:22 192.168.32.95:47440

# ss -atnp
State Recv-Q Trimitere-Q Adresă locală:Port Adresă peer:Port
SYN-RECV 0 0 192.168.32.1%if378479648:22 192.168.32.95:47580

Un alt experiment, am încercat să pornesc mai multe conexiuni ssh, la distanță de 1 secundă:

pentru x în 1 2 3 4 5 6 7 8 9 10 ; face ssh -n 192.168.32.1 data & sleep 1; Terminat

și după ce tot procesul ssh rulează, ieșirea ss a fost ca mai jos. Nu au fost raportate pachete SYN-ACK de către tcpdump. Ieșirea ss a rămas aceeași până când conexiunile au expirat.

# ss -atn
State Recv-Q Trimitere-Q Adresă locală:Port Adresă peer:Port
SYN-RECV 0 0 192.168.32.1%if378480635:22 192.168.32.95:50492
SYN-RECV 0 0 192.168.32.1%if378480636:22 192.168.32.95:50502
SYN-RECV 0 0 192.168.32.1%if378480636:22 192.168.32.95:50498
SYN-RECV 0 0 192.168.32.1%if378480635:22 192.168.32.95:50494
SYN-RECV 0 0 192.168.32.1:22 192.168.32.95:50488
SYN-RECV 0 0 192.168.32.1%if378480634:22 192.168.32.95:50486
SYN-RECV 0 0 192.168.32.1%if378480634:22 192.168.32.95:50490
SYN-RECV 0 0 192.168.32.1:22 192.168.32.95:50504
SYN-RECV 0 0 192.168.32.1%if378480636:22 192.168.32.95:50496
SYN-RECV 0 0 192.168.32.1%if378480636:22 192.168.32.95:50500

Configurarea sistemului este o configurație destul de standard. Înainte de modificarea recentă, interfața enp3s0 era rețeaua 192.168.32.0/24. Singurele schimbări reale au fost fișierele ifcfg-enp3s0* din sysconfig și actualizarea regulilor firewall-ului. Majoritatea gazdelor s-au mutat neschimbat de la vechea subrețea la vlan 32.

A.B avatar
drapel cl
A.B
Puteți oferi și rute? `ruta ip; regulă ip`? Și, de asemenea, reguli iptables de ieșire (filtru/IEȘIRE etc.). Când rulați `ss -atn | grep ^SYN` de mai multe ori, există vreun SYN-RECV chiar în momentul în care a avut loc jurnalul?
A.B avatar
drapel cl
A.B
1/ Intrarea funcționează, SYN-RECV înseamnă că SYN a fost primit, problema este în ieșire 2/ Care este interfața `if378475780`, de ce nu este prezentă în ieșirea `ip addr show`? Și de ce ar fi folosit deloc? nu este descris nicăieri. Folosiți mecanisme LD_PRELOAD pe sshd? Nu cred că are o opțiune de a se lega la un dispozitiv (SO_BINDTODEVICE). Este chiar același proces sshd? încercați din nou `ss`, dar adăugați și opțiunea `-p`. Desigur, adăugați toate informațiile utile pe care parcă le-ați omis.
A.B avatar
drapel cl
A.B
Sunt foarte surprins de ieșirea comenzii `ss`, dar pentru că nu pot explica... îmi pare rău.
djdomi avatar
drapel za
Citesc această pagină zilnic și zilnic învăț mult mai multe comenzi pentru mine, fiind util +1 pentru sugestia ss, chiar și este un termen prost :)

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.