ฉันสังเกตเห็นพฤติกรรมแปลก ๆ บน linux:
ก่อนอื่น ฉันล้างเส้นทางและกฎ iptables ทั้งหมด:
ip เส้นทางล้างตารางหลัก
เริ่มต้นตารางล้างเส้นทาง ip
เส้นทาง ip ล้างตารางในเครื่อง
iptables -P อินพุตที่ยอมรับ
iptables -P ยอมรับไปข้างหน้า
iptables -P เอาต์พุตที่ยอมรับ
iptables -t แนท -F
iptables -t mangle -F
iptables -F
iptables -X
ip6tables -P อินพุตที่ยอมรับ
ip6tables -P ส่งต่อการยอมรับ
ip6tables -P เอาต์พุตที่ยอมรับ
ip6tables -t แนท -F
ip6tables -t พังเกิล -F
ip6tables -F
ip6tables -X
จากนั้นฉันเพิ่มเส้นทางท้องถิ่น:
เส้นทาง ip เพิ่ม local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1 table local
จากนั้น บนเทอร์มินัล ฉันเปิดพอร์ตด้วย nc -lp 12345
และในเทอร์มินัลอื่นที่ฉันเชื่อมต่อกับมัน nc 127.0.0.1 12345
และฉันสามารถส่งและรับข้อมูลระหว่างเซิร์ฟเวอร์ netcat และไคลเอนต์ได้
สำหรับตอนนี้ทุกอย่างดี
ตอนนี้จากมันและหลังจากฆ่าเซิร์ฟเวอร์และไคลเอนต์ netcat ก่อนหน้าแล้ว ถ้าฉันรัน:
iptables -t nat -A โพสต์ -j MASQUERADE
และฉันรีสตาร์ทเซิร์ฟเวอร์ netcat จากนั้นไคลเอ็นต์ไม่สามารถเชื่อมต่อได้ คุณรู้ไหมว่าทำไม?
ฉันสังเกตเห็นว่าการเพิ่ม เส้นทาง ip เพิ่ม local 192.168.0.10 dev wlan0 proto kernel scope host src 192.168.0.10 table local
ทำให้การเชื่อมต่อ netcat ใช้งานได้อีกครั้ง อย่างไรก็ตาม ฉันไม่เข้าใจว่าทำไมอินเทอร์เฟซ wlan0 (ที่มี 192.168.0.10 เป็น IP) จึงส่งผลต่ออินเทอร์เฟซย้อนกลับได้
สำหรับข้อมูล ฉันใช้ ArchLinux