Điểm:1

Hành vi hệ thống con nội bộ linux không mong muốn khi làm việc với cầu nối

lá cờ gw

Đây là một câu hỏi về linux hệ thống con lân cậncầu ảo(linux là mới đối với tôi, xin lỗi vì điều đó).
Thử nghiệm được thực hiện trên UBUNTU21(uname -a):
Linux dlw 5.11.0-16-generic #17-Ubuntu SMP Thứ tư ngày 14 tháng 4 20:12:43 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

Cấu hình ban đầu

Sơ đồ cấu trúc liên kết:

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

Tất cả các card trong PC1 đều được cấu hình ip tĩnh bằng lệnh sau:
ifconfig enx00e04c369b80 192.168.0.31 mặt nạ mạng 255.255.255.0
ifconfig enx8800669997d7 192.168.0.32 mặt nạ mạng 255.255.255.0
ifconfig wlp1s0 192.168.0.33 mặt nạ mạng 255.255.255.0
và âip_forwardâ bị tắt bằng cách kiểm tra /proc/sys/net/ipv4/ip_forward:
mèo /proc/sys/net/ipv4/ip_forward
0

PC2/PC3/PC4 là các thiết bị đầu cuối có IP tĩnh và tường lửa bị tắt.

Tóm lại, mối quan hệ giữa PC1 và PCx là:

--------------------------------------------- --------------------------
Giao diện PC1 ip tĩnh được liên kết trực tiếp với thiết bị bên ngoài trên mỗi cổng
--------------- -------- ------------------------ -----------------
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

Sau khi đưa chúng lên bằng lệnh ifconfig xxx upâ, ba thẻ trong PC1 được tách thành ba mạng con và chỉ có thể giao tiếp với PCx được liên kết trực tiếp (được xác minh bằng âpingâ với -TÔI Tùy chọn). Đặc biệt PC2, PC3, PC4 không liên lạc được với nhau.

Mục đích & hoạt động

Sau đó, tôi muốn kết nối PC2 và PC3 bằng cầu nối ảo, tức là thêm một cầu nối âbr0â trong PC1 và thêm các giao diện enx00e04c369b80 và enx8800669997d7 vào đó và wlp1s0 vẫn không thay đổi.

Điều này đạt được bằng cách:

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 mặt nạ mạng 255.255.255.0
ifconfig br0 lên

điều này dẫn đến cấu hình sau trong 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 phát sóng 192.168.0.255
        inet6 fe80::a4d0:5bff:fe4a:8f76 tiền tốlen 64 phạm vi 0x20<link>
        ether a6:d0:5b:4a:8f:76 txqueuelen 1000 (Ethernet)
        Gói RX 440 byte 20303 (20,3 KB)
        Lỗi RX 0 bị rớt 0 tràn 0 khung hình 0
        Gói TX 41 byte 5530 (5,5 KB)
        Lỗi TX 0 bị rớt 0 tràn 0 sóng mang 0 va chạm 0

enx00e04c369b80: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
        ether 00:e0:4c:36:9b:80 txqueuelen 1000 (Ethernet)
        Gói RX 684 byte 34203 (34,2 KB)
        Lỗi RX 0 bị rớt 0 tràn 0 khung hình 0
        Gói TX 100 byte 8901 (8,9 KB)
        Lỗi TX 0 bị rớt 0 tràn 0 sóng mang 0 va chạm 0

enx8800669997d7: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
        ether 88:00:66:99:97:d7 txqueuelen 1000 (Ethernet)
        Gói RX 298 byte 35266 (35,2 KB)
        Lỗi RX 0 rớt 4 tràn 0 khung hình 0
        Gói TX 487 byte 32918 (32,9 KB)
        Lỗi TX 0 bị rớt 0 tràn 0 sóng mang 0 va chạm 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
        inet 127.0.0.1 mặt nạ mạng 255.0.0.0
        inet6 ::1 tiền tốlen 128 phạm vi 0x10<máy chủ>
        vòng lặp txqueuelen 1000 (Local Loopback)
        Gói RX 5235 byte 423013 (423,0 KB)
        Lỗi RX 0 bị rớt 0 tràn 0 khung hình 0
        Gói TX 5235 byte 423013 (423,0 KB)
        Lỗi TX 0 bị rớt 0 tràn 0 sóng mang 0 va chạm 0

wlp1s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
        inet 192.168.0.33 netmask 255.255.255.0 phát sóng 192.168.0.255
        inet6 fe80::ea0b:12c0:2ebf:b5c6 tiền tốlen 64 phạm vi 0x20<link>
        ether 84:5c:f3:52:98:60 txqueuelen 1000 (Ethernet)
        Gói RX 23040 byte 22183801 (22,1 MB)
        Lỗi RX 0 bị rớt 53 tràn 0 khung hình 0
        Gói TX 8987 byte 994399 (994,3 KB)
        Lỗi TX 0 bị rớt 0 tràn 0 sóng mang 0 va chạm 0
root@dlw:/home/dlw# brctl show
tên cầu id cầu giao diện hỗ trợ STP
br0 8000.a6d05b4a8f76 không có enx00e04c369b80
                            enx8800669997d7
root@dlw:/home/dlw# ls /sys/class/net/br0/brif/
enx00e04c369b80 enx8800669997d7

Bridge br0 hoạt động bình thường bằng cách âpingâ nhau trong PC2 và PC3.

Câu hỏi

Nhưng câu hỏi của tôi là, PC2 có thể tiếp cận PC1âs wlp1s0(bằng cách ping),

ping 192.168.0.33
PING 192.168.0.33 (192.168.0.33) 56(84) byte dữ liệu.
64 byte từ 192.168.0.33: icmp_seq=1 ttl=64 time=1,05 ms
64 byte từ 192.168.0.33: icmp_seq=2 ttl=64 time=1,05 ms

tuy nhiên, âresponserâ thực sự là br0(kiểm tra địa chỉ mac) chứ không phải wlp1s0. Điều này được xác minh bằng gói được chụp trong PC2 bằng cách sử dụng Wireshark:

23 2021-09-30 10:56:17.231255 Tp-LinkT_05:64:f7 Phát ARP 42 Ai có 192.168.0.33 không? Cho biết 192.168.0.10
0000 ff 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 ở 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) yêu cầu id=0x0002, seq=20474/64079, ttl=128 (trả lời sau 26)
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 reply=0x0002, seq=20474/64079, ttl=64 (yêu cầu trong 25)
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

Mặt khác, chụp gói icmp trong PC1 cho thấy wlp1s0 không nhận được gói icmp nhưng br0 thì:

root@dlw:/home/dlw# tcpdump -i wlp1s0 -XXXX icmp
tcpdump: đầu ra dài dòng bị chặn, sử dụng -v hoặc -vv để giải mã giao thức đầy đủ
nghe trên wlp1s0, loại liên kết EN10MB (Ethernet), kích thước chụp 262144 byte
^C
0 gói bị bắt

root@dlw:/home/dlw# tcpdump -i br0 -XXXX icmp
tcpdump: đầu ra dài dòng bị chặn, sử dụng -v hoặc -vv để giải mã giao thức đầy đủ
nghe trên br0, loại liên kết EN10MB (Ethernet), kích thước chụp 262144 byte
20:28:32.496062 IP 192.168.0.10 > dlw: ICMP echo request, id 2, seq 20555, độ dài 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: ICMP echo reply, id 2, seq 20555, độ dài 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

Ngoài ra, wlp1s0 không thể truy cập ngược lại PC2:

dlw@dlw:~$ ping 192.168.0.10 -Tôi wlp1s0
PING 192.168.0.10 (192.168.0.10) từ 192.168.0.33 wlp1s0: 56(84) byte dữ liệu.
^C
--- Thống kê ping 192.168.0.10 ---
Truyền 6 gói, nhận 0 gói, mất gói 100%, thời gian 5121ms

dlw@dlw:~$ ping 192.168.0.254 -Tôi wlp1s0
PING 192.168.0.254 (192.168.0.254) từ 192.168.0.33 wlp1s0: 56(84) byte dữ liệu.
64 byte từ 192.168.0.254: icmp_seq=1 ttl=64 time=4,48 ms
64 byte từ 192.168.0.254: icmp_seq=2 ttl=64 time=4,81 ms
^C
--- Thống kê ping 192.168.0.254 ---
Truyền 2 gói, nhận 2 gói, mất gói 0%, thời gian 1002ms
rtt tối thiểu/trung bình/tối đa/mdev = 4,477/4,645/4,813/0,168 ms
dlw@dlw:~$ ^C

Bảng định tuyến, bảng arp và fdb trong PC1 như sau:

root@dlw:/home/dlw# route -n
Bảng định tuyến IP hạt nhân
Cổng đích Genmask Flag Metric Ref Sử dụng 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) ở 40:8d:5c:21:db:57 [ether] trên enx00e04c369b80
? (192.168.0.17) ở 40:8d:5c:21:db:57 [ether] trên br0
? (192.168.0.10) lúc 50:3e:aa:05:64:f7 [ether] trên br0
root@dlw:/home/dlw# brctl showmacs br0
cổng không mac addr là địa phương? hẹn giờ lão hóa
  1 00:e0:4c:36:9b:80 đúng 0,00
  1 00:e0:4c:36:9b:80 đúng 0,00
  1 40:8d:5c:21:db:57 không 65,37
  2 50:3e:aa:05:64:f7 không 24,93
  2 88:00:66:99:97:d7 có 0,00
  2 88:00:66:99:97:d7 có 0,00

Bảng arp và route trong PC2 là:

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

tuyến đường -n
Bảng định tuyến IP hạt nhân
Cổng đích Genmask Flag Metric Ref Sử dụng 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

Vì vậy, vấn đềâ hiện đã rõ ràng một chút:
Khi PC2 ping 192.168.0.33, trước tiên hãy hỏi xem 192.168.0.33 ở đâu bằng quảng bá arp, gói này đến hệ thống con lân cận PC1. Vì wlp1s0 có IP 192.168.0.33, PC1 phản hồi quảng bá arp này bằng wlp1s0âs mac, nhưng bằng cách nào đó, gói phản hồi arp này là âSender macâ và ether-header âSource macâ đã bị sửa đổi đến br0 (Đây là điều khiến tôi bối rối).

Sau khi nhận được phản hồi arp, PC2 gửi tin nhắn ICMP với Dest(Destination) mac là br0 và Dest ip là wlp1s0. icmp hanlder của PC1â (giả sử nó hoạt động ở lớp 3) đã phản hồi, nhưng hệ thống con tuyến đường lấy số liệu thấp một â192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 br0â và gửi gói tin tới br0 (nếu không hiểu lầm).

Vì vậy, sự nhầm lẫn của tôi là tại sao hệ thống con lân cận của Linux phản hồi quảng bá arp này ngay cả PC2 và wlp1s0 không được liên kết trong lớp 2? Và luồng phân giải arp diễn ra như thế nào?(xin lỗi, tôi không quen thuộc với mã triển khai hệ thống con lân cận của Linux cho đến bây giờ).

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.