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.