แก้ไข systemd แล้ว
ผูกกับ แท้จริง
อินเตอร์เฟซ:
# ss -aunp src == 127.0.0.53 กีฬา == 53
สถานะ Recv-Q Send-Q ที่อยู่ในระบบ:พอร์ตเพียร์ ที่อยู่:พอร์ต
UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:* ผู้ใช้:(("systemd-resolve",pid=44157,fd=17))
สิ่งนี้จำกัดเส้นทางที่มีอยู่แม้แต่ครั้งเดียว net.ipv4.conf.br0.route_localnet=1
นำไปใช้กับการตั้งค่าบน แท้จริง
อินเตอร์เฟซ:
$ ip -4 ตารางแสดงเส้นทางทั้งหมด dev จริง
ออกอากาศ 127.0.0.0 table local proto kernel scope link src 127.0.0.1
local 127.0.0.0/8 ตาราง local proto kernel ขอบเขต host src 127.0.0.1
local 127.0.0.1 ตาราง local proto kernel ขอบเขต host src 127.0.0.1
ออกอากาศ 127.255.255.255 ลิงก์ขอบเขตโปรโตเคอร์เนลในตาราง src 127.0.0.1
ไม่มีจะตรงกัน
ที่อยู่ต้นทางจะต้องมีการเปลี่ยนแปลง ในขณะที่ไม่ค่อยได้ใช้ พิมพ์อินพุต nat hook
ประเภทลูกโซ่จะอนุญาตให้เปลี่ยนที่อยู่ต้นทางก่อนที่แอปพลิเคชันจะได้รับ มันสายเกินไปแล้ว: สิ่งนี้เกิดขึ้นหลังจากกำหนดเส้นทางเสร็จแล้วและแพ็กเก็ตถูกทิ้งแล้ว NAT ที่เก็บสถานะจึงไม่สามารถจัดการกับกรณีนี้ได้
สามารถใช้พร็อกซีแทนได้ (หลังจากลบการตั้งค่า nat เฉพาะทั้งหมดแล้ว) นี่คือตัวอย่างการใช้ โซแคท
. โซแคท
ไม่ใช่แอปพลิเคชันเฉพาะ มีข้อแม้สำหรับ UDP โดยเฉพาะ
การจัดการ TCP (OP ลืมว่า DNS ก็ใช้ TCP ด้วย)
socat TCP4-LISTEN:53,bind=192.168.1.2,reuseaddr,fork TCP4:127.0.0.53:53
ไม่สามารถผูกมัดกับ IN_ADDR_ANY
เนื่องจาก 127.0.0.53:53 ถูกผูกไว้แล้ว ดังนั้นผูกกับที่อยู่ที่ OP ให้ไว้ (ด้วยเหตุผลที่ไม่ถูกต้อง): 192.168.1.2 นอกจากนี้ มันค่อนข้างง่าย
การจัดการ UDP
socat -T 20 UDP4-LISTEN:53,bind=192.168.1.2,reuseaddr,fork UDP4:127.0.0.53:53
หมดเวลาของยุค 20 อยู่ที่นี่เพราะ โซแคท
ไม่สามารถบอกให้หยุดทันทีหลังจากได้รับคำตอบแพ็คเก็ต UDP เดียวและจะแยกส่วนทั้งหมด โซแคท
คำสั่งสะสมเมื่อเวลาผ่านไป
ในขณะที่ UDP ไม่จำเป็นต้องผูกกับที่อยู่ในกรณีนี้ การผูกกับที่อยู่โดยใช้ UDP จะหลีกเลี่ยงข้อแม้ที่เกี่ยวข้องกับการกลับบ้านหลายหลังและความจำเป็นในการใช้ IP_PKTINFO
ตัวเลือกซ็อกเก็ต