ฉันมีเซิร์ฟเวอร์ Proxmox Linux ซึ่งสามารถส่งและรับแพ็กเก็ตไปยังโฮสต์บนเครือข่ายท้องถิ่น แต่จะไม่ประมวลผลแพ็กเก็ตจากเกตเวย์ สิ่งนี้ทำให้การรับส่งข้อมูลทางอินเทอร์เน็ตล้มเหลว ดังนั้นฉันจึงไม่สามารถเรียกใช้ apt เพื่ออัปเดตแพ็คเกจได้ ดูเหมือนว่าโปรโตคอลทั้งหมดจะได้รับผลกระทบ
VM ที่ทำงานบนเซิร์ฟเวอร์ สามารถ เข้าถึงเกตเวย์ได้ดี
ไฟล์ /etc/network/interfaces ของฉันประกอบด้วย:
อัตโนมัติ
iface lo inet ย้อนกลับ
คู่มือการใช้งาน iface enp10s0 inet
vmbr0 อัตโนมัติ
iface vmbr0 inet แบบคงที่
ที่อยู่ 10.0.1.200/24
เกตเวย์ 10.0.1.1
bridge_ports enp10s0
ปิด bridge_stp
บริดจ์_fd 0
wlp7s0 อัตโนมัติ
iface wlp7s0 inet แบบคงที่
hostapd /etc/hostapd/hostapd.conf
ที่อยู่ 10.0.2.1
เน็ตมาสก์ 255.255.255.0
vmbr1 อัตโนมัติ
iface vmbr1 inet แบบคงที่
ที่อยู่ 10.1.2.1
เน็ตมาสก์ 255.255.255.0
ไม่มี bridge_ports
ปิดสะพาน
บริดจ์-fd 0
โพสต์อัพ echo 1 > /proc/sys/net/ipv4/ip_forward
โพสต์อัพ iptables -t nat -A POSTROUTING -s '10.1.2.0/24' -o wlp7s0 -j MASQUERADE
โพสต์ลง iptables -t nat -D POSTROUTING -s '10.1.2.0/24' -o wlp7s0 -j MASQUERADE
wlp7s0 และ vmbr1 เป็น NAT เพื่ออนุญาตให้ VM เข้าถึงอุปกรณ์ IOT ไร้สายที่ไม่ควรเข้าถึงเครือข่าย/อินเทอร์เน็ตทั่วไป
ตารางเส้นทางของฉัน:
เส้นทาง $ ip
ค่าเริ่มต้นผ่าน 10.0.1.200 dev vmbr0 เมตริก 100
10.0.1.0/24 dev vmbr0 ลิงก์ขอบเขตเคอร์เนลโปรโต src 10.0.1.200
10.0.2.0/24 dev wlp7s0 ลิงก์ขอบเขตเคอร์เนลโปรโต src 10.0.2.1
10.1.2.0/24 dev vmbr1 โปรโตเคอร์เนลขอบเขตลิงก์ src 10.1.2.1
หลังจากอ่านจบ ฉันลองเปลี่ยน rp_filter แต่การเปลี่ยนค่าจาก 2 เป็น 0 ไม่ได้ผล การตั้งค่าเริ่มต้น (โดยนำอินเทอร์เฟซ VM ออก):
$ sysctl -a | grep \.rp_filter
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.enp10s0.rp_filter = 0
net.ipv4.conf.lo.rp_filter = 0
net.ipv4.conf.vmbr0.rp_filter = 0
net.ipv4.conf.vmbr1.rp_filter = 0
net.ipv4.conf.wlp7s0.rp_filter = 0
ip_forward ถูกตั้งค่า:
$ cat /proc/sys/net/ipv4/ip_forward
1
ฉันได้ตรวจสอบผ่าน tcpdump ว่าได้รับแพ็กเก็ตจากเกตเวย์ เมื่อฉันลองส่ง Ping จากเซิร์ฟเวอร์ไปยังเกตเวย์ หรือจากเซิร์ฟเวอร์ไปยังเกตเวย์ ตัวอย่างนี้ใช้ ping:
# tcpdump -n -i vmbr0 โฮสต์ 10.0.1.1 และ icmp
tcpdump: เอาต์พุต verbose ถูกระงับ ใช้ -v หรือ -vv สำหรับการถอดรหัสโปรโตคอลแบบเต็ม
กำลังฟัง vmbr0, ประเภทลิงก์ EN10MB (Ethernet), ขนาดการจับภาพ 262144 ไบต์
22:42:37.136341 IP 10.0.1.200 > 10.0.1.1: คำขอเสียงสะท้อน ICMP, id 22073, seq 1, ความยาว 64
22:42:37.136478 IP 10.0.1.1 > 10.0.1.200: ICMP echo reply, id 22073, seq 1, length 64
22:42:38.142240 IP 10.0.1.200 > 10.0.1.1: คำขอเสียงสะท้อน ICMP, id 22073, seq 2, ความยาว 64
22:42:38.142429 IP 10.0.1.1 > 10.0.1.200: ICMP echo reply, id 22073, seq 2, length 64
ผลลัพธ์ของ ping -v นั้นว่างเปล่า:
$ ping -v 10.0.1.1
PING 10.0.1.1 (10.0.1.1) 56(84) ไบต์ของข้อมูล
^ซี
--- สถิติ ping 10.0.1.1 ---
ส่ง 22 แพ็กเก็ต ได้รับ 0 แพ็กเก็ต สูญเสียแพ็กเก็ต 100% เวลา 511 มิลลิวินาที
รายการเดียวในตาราง ip คือ NAT:
# iptables-save -c
# สร้างโดย iptables-save v1.8.2 เมื่อวันเสาร์ที่ 29 มกราคม 22:45:46 น. 2565
*ดิบ
: ยอมรับ [1828405583:1847667077335]
: ยอมรับเอาต์พุต [10762322:981310704]
ให้สัญญา
# เสร็จสิ้นเมื่อวันเสาร์ที่ 29 มกราคม 22:45:46 น. 2565
# สร้างโดย iptables-save v1.8.2 เมื่อวันเสาร์ที่ 29 มกราคม 22:45:46 น. 2565
*กรอง
: ยอมรับอินพุต [10597558:1212589593]
:ส่งต่อ ยอมรับ [1782904005:1841102268241]
: ยอมรับเอาต์พุต [10762351:981313827]
ให้สัญญา
# เสร็จสิ้นเมื่อวันเสาร์ที่ 29 มกราคม 22:45:46 น. 2565
# สร้างโดย iptables-save v1.8.2 เมื่อวันเสาร์ที่ 29 มกราคม 22:45:46 น. 2565
*แนท
: ยอมรับ [29808561:4940456833]
: ยอมรับอินพุต [2456738:231340403]
: ยอมรับเอาต์พุต [1168080:75403202]
: ยอมรับภายหลัง [2829337:181352732]
[190:11400] -A โพสต์ -s 10.1.2.0/24 -o wlp7s0 -j MASQUERADE
ให้สัญญา
# เสร็จสิ้นเมื่อวันเสาร์ที่ 29 มกราคม 22:45:46 น. 2565