วันนี้ฉันใช้เวลามากในการหาวิธีทำเช่นนี้ แต่ฉันไม่สามารถหาทางออกได้ ในใจคิดว่าน่าจะได้ ฉันกำลังพยายามตั้งค่าต่อไปนี้:
ภาพรวมการตั้งค่า
การอ่าน แตะ1
อินเทอร์เฟซและส่งต่อไปยัง enp0s3
ใช้ไป ควร ทำงานโดยไม่มีปัญหาใด ๆ ... ฉันหวังว่า ถ้าฉันทำ ping 10.0.0.10 -I tap1
ฉันสามารถดูอีเทอร์เฟรมในแอปพลิเคชัน Go (ปัจจุบันผมใช้ https://github.com/songgao/water แต่ฉันอาจจะย้ายไปที่ https://github.com/mdlayher/packet ถ้าฉันทำให้มันใช้งานได้)
ปัญหาที่ฉันมีคือการส่งต่อ etherframes จาก enp0s8
ไปที่ แตะ1
อินเตอร์เฟซ. ฉันลองหลายคำสั่งแล้ว แต่มันไม่ทำงาน ฉันลองใช้ iptables
:
iptables -A ไปข้างหน้า -i enp0s8 -o tap1 -j ยอมรับ
และคำสั่งที่คล้ายกัน
ฉันพบคำถามนี้แล้ว: Tap0 ไม่ได้รับการเข้าชม โดยที่ Sherwood Wang พูดดังต่อไปนี้:
หากคุณต้องการบังคับให้ tap0 รับแพ็กเก็ต IP ของตัวเอง คุณอาจใช้ ebtables เมื่อแพ็กเก็ตถูกทิ้งในเลเยอร์อีเธอร์เน็ตของ tap0 ที่ตาราง broute แพ็กเก็ตเหล่านี้จะเข้าสู่เลเยอร์ IP ของ tap0 แทน eth0 ดูเพิ่มเติม: http://ebtables.sourceforge.net/examples/real.html#example1
สิ่งที่ฟังดูเป็นสิ่งที่ฉันต้องการ ฉันคิดว่าฉันพบคำสั่งที่เขาหมายถึงที่นี่: https://ebtables.netfilter.org/examples/basic.html#ex_brouter
ebtables -t broute -A BROUTING -p ipv4 -i tap1 --ip-dst 172.16.1.1 -j DROP
อย่างไรก็ตาม ฉันได้รับข้อผิดพลาดต่อไปนี้: ebtables: ไม่มีห่วงโซ่/เป้าหมาย/ตรงกับชื่อนั้น
. ถ้าฉันมองไปที่ ผู้ชาย ebtables
ฉันไม่เห็น ปลาแดก
ตารางที่กล่าวถึง ฉันเห็นมันที่นี่แม้ว่า https://linux.die.net/man/8/ebtables. ฉันพลาดอะไรไปหรือเปล่า
ฉันยังพยายาม ebtables -A ไปข้างหน้า -i enp0s8 -o tap1 -j ยอมรับ
จาก https://www.linuxquestions.org/questions/linux-networking-3/ebtables-to-setup-forwarding-and-ethernet-level-nat-4175538316/ แต่นั่นไม่ได้ผลเช่นกัน