สร้างอุปกรณ์ TAP สองเครื่อง ซึ่งแต่ละเครื่องจะถูกอ่านและเขียนโดย userland protocol stack นอกจากนี้ อุปกรณ์ TAP ทั้งสองยังเชื่อมโยงโดย Linux Bridge
สคริปต์ในการเตรียมสภาพแวดล้อมมีดังนี้
sudo ip tuntap เพิ่มโหมด dev tap0 tap
sudo ip tuntap เพิ่มการแตะโหมด dev tap1
sudo ip addr เพิ่ม 10.0.0.1/24 dev tap0
sudo ip addr เพิ่ม 10.0.0.2/24 dev tap1
ลิงก์ sudo ip ตั้งค่า tap0
sudo ip link ตั้งค่า tap1
sudo brctl addbr br0
sudo brctl addif br0 tap1
sudo brctl addif br0 tap0
sudo ip link ตั้งค่า br0 ขึ้น
สแต็กโปรโตคอล userland มีความสามารถในการส่งและรับ ARP ขั้นตอนในการสร้างปัญหานี้มีดังนี้
- ส่งคำขอ ARP จาก tap0
- มันไปถึง tap1 ผ่าน br0 และส่ง ARP Reply
- br0 ได้รับ ARP Reply แต่ไม่ถึง tap0
ฉันจับแพ็กเก็ตดังนี้
คนจรจัด@impish64:~$ sudo tcpdump -i br0 -nv
tcpdump: กำลังฟัง br0, ประเภทลิงก์ EN10MB (Ethernet), ความยาวสแน็ปช็อต 262144 ไบต์
13:14:23.103549 ARP, Ethernet (len 6), IPv4 (len 4), คำขอใครมี 10.0.0.2 บอก 10.0.0.1 ความยาว 28
13:14:23.104203 ARP, Ethernet (len 6), IPv4 (len 4), Reply 10.0.0.2 is-at 3a:2c:25:5b:e1:40, length 28
คนจรจัด@impish64:~$ sudo tcpdump -i tap0 -nv
tcpdump: กำลังฟัง tap0, ประเภทลิงก์ EN10MB (Ethernet), ความยาวสแน็ปช็อต 262144 ไบต์
13:13:40.868761 ARP, Ethernet (len 6), IPv4 (len 4), คำขอใครมี 10.0.0.2 บอก 10.0.0.1 ความยาว 28
คนจรจัด@impish64:~$ sudo tcpdump -i tap1 -nv
tcpdump: กำลังฟัง tap1, ประเภทลิงก์ EN10MB (Ethernet), ความยาวสแน็ปช็อต 262144 ไบต์
13:12:50.368294 ARP, Ethernet (len 6), IPv4 (len 4), คำขอใครมี 10.0.0.2 บอก 10.0.0.1 ความยาว 28
13:12:50.368699 ARP, Ethernet (len 6), IPv4 (len 4), Reply 10.0.0.2 is-at 3a:2c:25:5b:e1:40, length 28
แผนภาพของปัญหานี้มีดังนี้
แผนภาพ
เหตุใด ARP Reply จึงไม่บินไปที่ แตะ 0
ด้วยการตั้งค่านี้?