Puncte:1

Comportament neașteptat al subsistemului Linux neboring atunci când lucrați cu bridge

drapel gw

Aceasta este o întrebare despre Linux subsistemul vecin și punte virtuală(Linux este nou pentru mine, îmi pare rău pentru asta).
Testul este efectuat pe UBUNTU21(uname -a):
Linux dlw 5.11.0-16-generic #17-Ubuntu SMP Miercuri 14 aprilie 20:12:43 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

Configurație inițială

Diagrama topologiei:

        ||==============================================||  
        ||---------------| |------||  
PC2 --- ||enx00e04c369b80| |wlp1s0||--- PC4    
        ||---------------| |------|| 
        || PC1(UBUNTU 21) ||       
        ||---------------| ||
PC3 --- ||enx8800669997d7| ||
        ||---------------| ||
        ||==============================================||

Toate cardurile din PC1 sunt configurate cu ip static prin următoarele comenzi:
ifconfig enx00e04c369b80 192.168.0.31 netmask 255.255.255.0
ifconfig enx8800669997d7 192.168.0.32 netmask 255.255.255.0
ifconfig wlp1s0 192.168.0.33 mască de rețea 255.255.255.0
iar âip_forwardâ este dezactivat prin verificarea /proc/sys/net/ipv4/ip_forward:
cat /proc/sys/net/ipv4/ip_forward
0

PC2/PC3/PC4 sunt terminale cu IP static și firewall-ul este dezactivat.

Pe scurt, relația dintre PC1 și PCx este:

--------------------------------------------- --------------------------
PC1-interfețe static ip direct-linked-extern-dispozitiv-pe-port
--------------- ----------- ------------------------ -----------------
enx00e04c369b80 192.168.0.31 PC2 192.168.0.17 40:8d:5c:21:db:57
enx8800669997d7 192.168.0.32 PC3 192.168.0.10 50:3e:aa:05:64:f7
wlp1s0 192.168.0.33 PC4 192.168.0.254 00:85:00:07:AA:3A

După ce le afișează cu comanda âifconfig xxx upâ, trei carduri din PC1 sunt separate în trei subrețele și pot comunica numai cu PCx conectat direct (verificat prin âpingâ cu -Eu opțiune). În special, PC2 și PC3 și PC4 nu pot ajunge unul la celălalt.

Scop și funcționare

Apoi vreau să conectez PC2 și PC3 prin punte virtuală, adică să adaug o punte âbr0â în PC1 și să adaug interfețele enx00e04c369b80 și enx8800669997d7 la acesta, iar wlp1s0 rămâne neschimbat.

La aceasta se ajunge prin:

brctl addbr br0
brctl addif br0 enx00e04c369b80
brctl addif br0 enx8800669997d7
ifconfig enx8800669997d7 0.0.0.0
ifconfig enx00e04c369b80 0.0.0.0
ifconfig br0 192.168.0.30 netmask 255.255.255.0
ifconfig br0 sus

acest lucru rezultând în următoarea configurație în PC1:

root@dlw:/home/dlw# ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
        inet 192.168.0.30 netmask 255.255.255.0 difuzare 192.168.0.255
        inet6 fe80::a4d0:5bff:fe4a:8f76 prefixlen 64 scopeid 0x20<link>
        ether a6:d0:5b:4a:8f:76 txqueuelen 1000 (Ethernet)
        Pachete RX 440 octeți 20303 (20,3 KB)
        Erori RX 0 a scăzut 0 depășiri 0 cadru 0
        Pachete TX 41 octeți 5530 (5,5 KB)
        Erori TX 0 a scăzut 0 depășiri 0 purtător 0 coliziuni 0

enx00e04c369b80: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
        ether 00:e0:4c:36:9b:80 txqueuelen 1000 (Ethernet)
        Pachete RX 684 octeți 34203 (34,2 KB)
        Erori RX 0 a scăzut 0 depășiri 0 cadru 0
        Pachete TX 100 octeți 8901 (8,9 KB)
        Erori TX 0 a scăzut 0 depășiri 0 purtător 0 coliziuni 0

enx8800669997d7: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
        ether 88:00:66:99:97:d7 txqueuelen 1000 (Ethernet)
        Pachete RX 298 octeți 35266 (35,2 KB)
        Erori RX 0 a scăzut 4 depășiri 0 cadru 0
        Pachete TX 487 octeți 32918 (32,9 KB)
        Erori TX 0 a scăzut 0 depășiri 0 purtător 0 coliziuni 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
        inet 127.0.0.1 netmask 255.0.0.0
        inet6 ::1 prefixlen 128 scopeid 0x10<gazdă>
        loop txqueuelen 1000 (Loopback local)
        Pachete RX 5235 octeți 423013 (423,0 KB)
        Erori RX 0 a scăzut 0 depășiri 0 cadru 0
        Pachete TX 5235 octeți 423013 (423,0 KB)
        Erori TX 0 a scăzut 0 depășiri 0 purtător 0 coliziuni 0

wlp1s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
        inet 192.168.0.33 netmask 255.255.255.0 difuzare 192.168.0.255
        inet6 fe80::ea0b:12c0:2ebf:b5c6 prefixlen 64 scopeid 0x20<link>
        ether 84:5c:f3:52:98:60 txqueuelen 1000 (Ethernet)
        Pachete RX 23040 octeți 22183801 (22,1 MB)
        Erori RX 0 a scăzut 53 depășiri 0 cadru 0
        Pachete TX 8987 octeți 994399 (994,3 KB)
        Erori TX 0 a scăzut 0 depășiri 0 purtător 0 coliziuni 0
root@dlw:/home/dlw# brctl show
numele podului ID pod Interfețe activate STP
br0 8000.a6d05b4a8f76 nu enx00e04c369b80
                            enx8800669997d7
root@dlw:/home/dlw# ls /sys/class/net/br0/brif/
enx00e04c369b80 enx8800669997d7

Puntea br0 este lucrată în mod normal prin âpingâ unul pe altul în PC2 și PC3.

Întrebare

Dar întrebarea mea este, PC2 poate ajunge la wlp1s0 PC1 (prin ping),

ping 192.168.0.33
PING 192.168.0.33 (192.168.0.33) 56(84) octeți de date.
64 de octeți de la 192.168.0.33: icmp_seq=1 ttl=64 time=1,05 ms
64 de octeți din 192.168.0.33: icmp_seq=2 ttl=64 time=1,05 ms

totuși, adevăratul „răspuns” este br0 (verificați adresa mac), dar nu wlp1s0. Acest lucru este verificat de pachetul capturat în PC2 folosind wireshark:

23 2021-09-30 10:56:17.231255 Tp-LinkT_05:64:f7 Broadcast ARP 42 Cine are 192.168.0.33? Spune la 192.168.0.10
0000 ff ff ff ff ff 50 3e aa 05 64 f7 08 06 00 01
0010 08 00 06 04 00 01 50 3e aa 05 64 f7 c0 a8 00 0a
0020 00 00 00 00 00 00 c0 a8 00 21
24 2021-09-30 10:56:17.231999 a6:d0:5b:4a:8f:76 Tp-LinkT_05:64:f7 ARP 60 192.168.0.33 este la a6:d0:5b:4a:8f:76
0000 50 3e aa 05 64 f7 a6 d0 5b 4a 8f 76 08 06 00 01
0010 08 00 06 04 00 02 a6 d0 5b 4a 8f 76 c0 a8 00 21
0020 50 3e aa 05 64 f7 c0 a8 00 0a 55 55 55 55 55 55
0030 55 55 55 55 55 55 55 55 55 55 55 55
25 2021-09-30 10:56:17.232010 192.168.0.10 192.168.0.33 ICMP 74 0xc634 (50740) Echo (ping) cerere id=0x0002, seq=2040174, seq=2404174 (2021)
0000 a6 d0 5b 4a 8f 76 50 3e aa 05 64 f7 08 00 45 00
0010 00 3c c6 34 00 00 80 01 00 00 c0 a8 00 0a c0 a8
0020 00 21 08 00 fd 5f 00 02 4f fa 61 62 63 64 65 66
0030 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76
0040 77 61 62 63 64 65 66 67 68 69
26 2021-09-30 10:56:17.232711 192.168.0.33 192.168.0.10 ICMP 74 0x8d96 (36246) Echo (ping) id de răspuns=0x0002, seq=20474, seq=24074, 64074, 24=2404 (2021)
0000 50 3e aa 05 64 f7 a6 d0 5b 4a 8f 76 08 00 45 00
0010 00 3c 8d 96 00 00 40 01 6b af c0 a8 00 21 c0 a8
0020 00 0a 00 00 05 60 00 02 4f fa 61 62 63 64 65 66
0030 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76
0040 77 61 62 63 64 65 66 67 68 69

Pe de altă parte, captura pachetul icmp în PC1 arată că wlp1s0 nu primește niciun pachet icmp, dar br0 face:

root@dlw:/home/dlw# tcpdump -i wlp1s0 -XXXX icmp
tcpdump: ieșirea verbosă a fost suprimată, utilizați -v sau -vv pentru decodarea completă a protocolului
ascultare pe wlp1s0, tip link EN10MB (Ethernet), dimensiunea capturii 262144 octeți
^C
0 pachete capturate

root@dlw:/home/dlw# tcpdump -i br0 -XXXX icmp
tcpdump: ieșirea verbosă a fost suprimată, utilizați -v sau -vv pentru decodarea completă a protocolului
ascultare pe br0, tip link EN10MB (Ethernet), dimensiunea capturii 262144 octeți
20:28:32.496062 IP 192.168.0.10 > dlw: cerere de eco ICMP, id 2, seq 20555, lungime 40
    0x0000: a6d0 5b4a 8f76 503e aa05 64f7 0800 4500 ..[J.vP>..d...E.
    0x0010: 003c c665 0000 8001 f2df c0a8 000a c0a8 .<.e............
    0x0020: 0021 0800 fd0e 0002 504b 6162 6364 6566 .!......PKabcdef
    0x0030: 6768 696a 6b6c 6d6e 6f70 7172 7374 7576 ghijklmnopqrstuv
    0x0040: 7761 6263 6465 6667 6869 wabcdefghi
20:28:32.496109 IP dlw > 192.168.0.10: răspuns ecou ICMP, id 2, seq 20555, lungime 40
    0x0000: 503e aa05 64f7 a6d0 5b4a 8f76 0800 4500 P>..d...[J.v..E.
    0x0010: 003c e53f 0000 4001 1406 c0a8 0021 c0a8 .<.?..@......!..
    0x0020: 000a 0000 050f 0002 504b 6162 6364 6566 ........PKabcdef
    0x0030: 6768 696a 6b6c 6d6e 6f70 7172 7374 7576 ghijklmnopqrstuv
    0x0040: 7761 6263 6465 6667 6869 wabcdefghi

În plus, wlp1s0 nu poate ajunge la PC2 în sens invers:

dlw@dlw:~$ ping 192.168.0.10 -I wlp1s0
PING 192.168.0.10 (192.168.0.10) de la 192.168.0.33 wlp1s0: 56(84) octeți de date.
^C
--- 192.168.0.10 statistici ping ---
6 pachete transmise, 0 primite, 100% pierdere de pachete, timp 5121 ms

dlw@dlw:~$ ping 192.168.0.254 -I wlp1s0
PING 192.168.0.254 (192.168.0.254) de la 192.168.0.33 wlp1s0: 56(84) octeți de date.
64 de octeți de la 192.168.0.254: icmp_seq=1 ttl=64 time=4,48 ms
64 de octeți de la 192.168.0.254: icmp_seq=2 ttl=64 time=4,81 ms
^C
--- 192.168.0.254 statistici ping ---
2 pachete transmise, 2 primite, 0% pierdere de pachete, timp 1002 ms
rtt min/avg/max/mdev = 4,477/4,645/4,813/0,168 ms
dlw@dlw:~$ ^C

Tabelul de rute, tabelul arp și fdb din PC1 este următorul:

root@dlw:/home/dlw# ruta -n
Tabelul de rutare IP al nucleului
Destination Gateway Genmask Flags Metric Ref Utilizare Iface
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 wlp1s0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 br0
192.168.0.0 0.0.0.0 255.255.255.0 U 600 0 0 wlp1s0
root@dlw:/home/dlw# arp -a
? (192.168.0.17) la 40:8d:5c:21:db:57 [ether] pe enx00e04c369b80
? (192.168.0.17) la 40:8d:5c:21:db:57 [eter] pe br0
? (192.168.0.10) la 50:3e:aa:05:64:f7 [ether] pe br0
root@dlw:/home/dlw# brctl showmacs br0
port no mac addr este local? temporizator de îmbătrânire
  1 00:e0:4c:36:9b:80 da 0,00
  1 00:e0:4c:36:9b:80 da 0,00
  1 40:8d:5c:21:db:57 nu 65.37
  2 50:3e:aa:05:64:f7 nr 24.93
  2 88:00:66:99:97:d7 da 0.00
  2 88:00:66:99:97:d7 da 0.00

Tabelul arp și ruta din PC2 este:

arp -a
192.168.0.17 40-8d-5c-21-db-57
192.168.0.30 a6-d0-5b-4a-8f-76
192.168.0.33 a6-d0-5b-4a-8f-76
192.168.0.255 ff-ff-ff-ff-ff-ff
224.0.0.2 01-00-5e-00-00-02
224.0.0.22 01-00-5e-00-00-16
224.0.0.251 01-00-5e-00-00-fb
224.0.0.252 01-00-5e-00-00-fc
255.255.255.255 ff-ff-ff-ff-ff-ff

traseul -n
Tabelul de rutare IP al nucleului
Destination Gateway Genmask Flags Metric Ref Utilizare Iface
255.255.255.255 0.0.0.0 255.255.255.255 U 0 0 0 eth0
224.0.0.0 0.0.0.0 240.0.0.0 U 0 0 0 eth0
0.0.0.0 192.168.0.10 255.255.255.255 U 0 0 0 eth0
192.168.0.255 0.0.0.0 255.255.255.255 U 0 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.0.10 0.0.0.0 255.255.255.255 U 0 0 0 eth0

Deci, „problema” este puțin clară acum:
Când PC2 face ping la 192.168.0.33, mai întâi întrebați unde este 192.168.0.33 prin difuzarea arp, acest pachet ajunge la subsistemul învecinat PC1. Întrucât wlp1s0 are IP 192.168.0.33, răspunsul PC1, acest arp difuzează cu mac wlp1s0, dar cumva acest pachet de răspuns arp „Sender mac” și ether-header „mac” sunt modificate. la br0 (Asta m-a derutat).

După obținerea unui răspuns arp, PC2 trimite mesajul ICMP cu Dest(Destination) mac ca br0 și Dest ip ca wlp1s0. Handler-ul icmp PC1 (presupunem că a funcționat în stratul 3) a răspuns, dar subsistemul de rută ia cel cu metrică scăzută â192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 br0â și trimite pachetul la br0. (dacă nu înțelege greșit).

Deci, confuzia mea este de ce răspunsul subsistemului vecin Linux această difuzare arp chiar și PC2 și wlp1s0 nu sunt legate în stratul 2? Și cum merge fluxul de rezoluție arp?(Îmi pare rău, nu sunt familiarizat cu codul de implementare a subsistemului învecinat Linux până acum).

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.