iptables ที่ส่งต่อระหว่างสองอินเตอร์เฟส


26

ดังนั้นฉันจึงมีกล่องลินุกซ์พร้อมอินเตอร์เฟซไร้สายสองอันอันหนึ่งคือสถานีและอีกอันคือ AP

wlan0 (สถานี) - เชื่อมต่อกับการเชื่อมต่ออินเทอร์เน็ต

wlan1 (AP) - ลูกค้ารายอื่นเชื่อมต่อกับมัน

ฉันต้องการให้ลูกค้าที่เชื่อมต่อกับ wlan1 เพื่อให้สามารถเข้าถึงอินเทอร์เน็ตบน wlan0 และฉันต้องการทำสิ่งนี้กับ iptables เนื่องจากเคอร์เนลของฉันไม่รองรับการเชื่อมต่อ ...

นี่คือสิ่งที่ฉันได้ลองกับ iptables แล้ว แต่มันไม่ทำงาน:

iptables -A FORWARD -i wlan0 -o wlan1 -j ACCEPT
iptables -A FORWARD -i wlan1 -o wlan0 -j ACCEPT

ฉันขอขอบคุณความช่วยเหลือใด ๆ


1
IPTABLES เป็นตัวกรองแพ็กเก็ต stateful อนุญาตให้ / ลด / แพ็คเก็ต mangles มันไม่ใช่เราเตอร์หรือบริดจ์ คำสั่งของคุณปรับไฟร์วอลล์เพื่ออนุญาตการรับส่งข้อมูล แต่พวกเขาไม่ได้ทำอะไรเลยเพื่อส่งต่อจริง ๆ
Zoredache

ดังนั้นแทนที่เคอร์เนลด้วยสิ่งที่มีคุณสมบัติที่คุณต้องการ มันคือ "กล่องลินุกซ์" หลังจากทั้งหมด
Michael Hampton

ฉันสามารถทำสิ่งที่ฉันต้องการจะทำกับ 'เส้นทาง' ได้หรือไม่ ฉันจะดูการสร้างเคอร์เนลใหม่ด้วยการสนับสนุนบริดจ์เช่นกัน แต่สงสัยว่ามีตัวเลือกอื่น ๆ หรือไม่
broody

เส้นทางจะบอกว่าจะไปที่ไหนเมื่อเปิดใช้งาน ไมเคิลบอกคุณว่าคุณต้องทำอะไรเพื่อสนับสนุนเส้นทาง จากนั้นคุณต้องเปิดใช้งานผ่าน sysctl
Magellan

คำตอบ:


35

ก่อนอื่นเพื่อเปิดใช้งานโฮสต์ที่เชื่อมต่อกับอินเทอร์เฟซส่วนตัวของคุณให้ออกไปทางอินเทอร์เน็ตคุณไม่จำเป็นต้องเชื่อมต่ออินเตอร์เฟสคุณต้องกำหนดเส้นทางแพ็กเก็ตที่เข้ามาในอินเทอร์เฟซหนึ่งไปยังอีกอินเตอร์เฟสหนึ่ง

ในการทำเช่นนั้นคุณจะต้อง:

  1. เปิดใช้งานการส่งต่อบนกล่อง linux ของคุณ:
  2. อนุญาตให้เฉพาะ (หรือทั้งหมด) แพ็คเก็ตเพื่อสำรวจเราเตอร์ของคุณ
  3. ดังที่มีคนกล่าวไว้ว่า netfilter เป็นไฟร์วอลล์ไร้สัญชาติอนุญาตการรับส่งข้อมูลสำหรับการเชื่อมต่อที่สร้างไว้แล้ว
  4. เปลี่ยนที่อยู่ต้นทางของแพ็คเก็ตที่ออกไปสู่อินเทอร์เน็ต
    echo 1> / proc / sys / net / ipv4 / ip_forward
    iptables -A ไปข้างหน้า -i wlan1 -o wlan0 -j ACCEPT
    iptables -A ไปข้างหน้า -i wlan0 -o wlan1 -m state - รัฐถูกสร้างขึ้น, ที่เกี่ยวข้อง \
             -j ยอมรับ
    iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

ที่ควรทำ


ฉันคิดว่าคุณน่าจะหมายถึง: echo 1 >/proc/sys/net/ipv4/ip_forwardสำหรับบรรทัดแรก
Jason Tan

แค่นั้นแหละ ... ไม่รู้ว่าเกิดอะไรขึ้นกับส่วนสุดท้ายของบรรทัดนั้น ... ถูกต้อง
Torian

ฉันคิดว่าคุณต้องตั้งค่าไคลเอนต์ให้ใช้กล่อง linux เป็นเกตเวย์ของพวกเขาด้วย
Jason Tan

และเพื่อให้การส่งต่อยังคงอยู่ผ่านการรีบูตคุณต้องการทำสิ่งนี้: 'echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf'
Jason Tan

1
@StudentsTea ใช่คุณทำเว้นแต่คุณiptables' FORWARDตารางถูกกำหนดเป็นนโยบายที่ทั่วโลกยอมรับ คุณยังคงต้องการnatกฎตารางอย่างใดอย่างหนึ่ง
โธมัสวอร์ด
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.