วิธีใช้กฎ NAT iptables สำหรับ hostapd


9

คอมพิวเตอร์ของฉันเป็นอุปกรณ์ที่มีอินเตอร์เฟซสุทธิสองwlan0และและฉันต้องการที่จะใช้พอร์ตอินเตอร์เน็ตไร้สายเป็นจุดการเข้าถึงeth0wlan0

  • ฉันใช้hostapdสิ่งอำนวยความสะดวกและทำงานอย่างถูกต้องในโหมดเส้นทางภายในเครือข่ายท้องถิ่น ผู้ใช้สามารถเชื่อมต่อกับจุดเชื่อมต่อและ DHCP ทำงานได้อย่างถูกต้องในทั้งสองส่วน
  • พีซีที่hostapdไม่มีไฟร์วอลล์หรือiptablesกฎใด ๆ( iptablesและไฟร์วอลล์ปิดใช้งาน) เนื่องจากฉันต้องการใช้ไฟร์วอลล์ในตัวของเราเตอร์ ADSL เท่านั้น

การกำหนดค่าเน็ตของฉันเป็นดังนี้:

  • PC with hostapd -> cable connection -> ADSL router
  • wlan0 -> eth0 <-> 192.168.0.1 <-> internet
  • 192.168.10.1 -> 192.168.0.7 -> static routing to 192.168.10.X

พีซีifconfig:

eth0  Link encap:Ethernet  HWaddr 00:12:3F:F2:31:65
      inet addr:192.168.0.7  Bcast:192.168.0.255  Mask:255.255.255.0
      inet6 addr: fe80::212:3fff:fef2:3165/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:2169539 errors:0 dropped:0 overruns:0 frame:0
      TX packets:1008097 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:3056198487 (2.8 GiB)  TX bytes:72727161 (69.3 MiB)
      Interrupt:16

lo    Link encap:Local Loopback
      inet addr:127.0.0.1  Mask:255.0.0.0
      inet6 addr: ::1/128 Scope:Host
      UP LOOPBACK RUNNING  MTU:65536  Metric:1
      RX packets:3398 errors:0 dropped:0 overruns:0 frame:0
      TX packets:3398 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0
      RX bytes:495444 (483.8 KiB)  TX bytes:495444 (483.8 KiB)

mon.wlan0  Link encap:UNSPEC  HWaddr 00-14-A5-04-94-3C-90-F0-00-00-00-00-00-00-00-00
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:151 errors:0 dropped:0 overruns:0 frame:0
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:17092 (16.6 KiB)  TX bytes:0 (0.0 b)

wlan0 Link encap:Ethernet  HWaddr 00:14:A5:04:94:3C
      inet addr:192.168.10.1  Bcast:192.168.10.255  Mask:255.255.255.0
      inet6 addr: fe80::214:a5ff:fe04:943c/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0
      TX packets:1502 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:0 (0.0 b)  TX bytes:279392 (272.8 KiB)

ฉันจะกำหนดค่า NAT แบบธรรมดาiptablesให้กับพีซีได้อย่างไร

  • ฉันต้องการให้ผู้ใช้ทุกคนเชื่อมต่อกับเครือข่ายผ่านทางhostapd(เครือข่าย192.168.10.X) เพื่อเข้าถึงและจากอินเทอร์เน็ต
  • ฉันไม่ต้องการกรองการเข้าชมใด ๆ เพียง NAT เท่านั้น

ฉันไม่สามารถเชื่อมต่ออินเทอร์เน็ตจากส่วน WiFi:

  • ไคลเอนต์ที่เชื่อมต่อกับ WiFi มีที่อยู่ DHCP 192.168.10.48และทราฟฟิกเดียวเปิดeth0จากที่อยู่:
    16:50:14.671587 ARP, Request who-has 192.168.0.48 tell 192.168.0.1, length 46
    
    หมายเหตุ: ที่อยู่192.168.0.48ไม่ได้192.168.10.48ดังนั้น Masquerade จึงสามารถทำงานได้
  • ฉันไม่สามารถ ping 192.168.0.1[เราเตอร์ ADSL] อีกต่อไปซึ่งเป็นไปได้ก่อนหน้านี้
  • สิ่งที่เกี่ยวกับการเข้าถึงจากอินเทอร์เน็ตไปยังผู้ใช้ WIFI? แน่นอนฉันจะตั้งค่าในเราเตอร์ ADSL ส่งต่อพอร์ต IP รวมเฉพาะจากอินเทอร์เน็ตไปยังที่อยู่ IP เฉพาะของผู้ใช้ WiFi ดังกล่าว

แก้ไข 1:

  • systemctlแสดงiptablesเป็น:
    iptables.service          loaded active exited
    
    แม้ว่าฉันจะวิ่ง:
    systemctl enable iptables.service
    systemctl start iptables.service
    

แก้ไข 2:

  • ใช้งานได้ แต่ทุกครั้งที่ฉันบูตคอมพิวเตอร์เป็นเรื่องปกติหรือไม่ที่จะต้องเพิ่มสิ่งต่อไปนี้ด้วยตนเองผ่านสคริปต์เริ่มต้น
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

ดูการตอบสนองที่อัปเดตของฉันด้านล่าง ...
MLu

คำตอบ:


6

ในรูปแบบที่ง่ายที่สุด:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

ที่จะช่วยให้ทุกคนสามารถเข้าถึงผู้ใช้อินเตอร์เน็ตไร้สายไปยังอินเทอร์เน็ต

แน่นอนว่าการตั้งค่าการกำหนดเส้นทางอื่นของคุณได้ทำไปแล้ว ได้แก่ :

  1. เปิดใช้งานการส่งต่อในเคอร์เนล

    sysctl net.ipv4.ip_forward=1
    
  2. เปิดใช้งานการส่งต่อในiptables:

    iptables -P FORWARD ACCEPT
    iptables -F FORWARD
    

ใช้tcpdump -nn -i eth0เพื่อรับชมทราฟฟิกeth0ในกรณีที่เกิดปัญหาเพื่อดูว่าได้รับ NATed อย่างถูกต้องหรือไม่หากการตอบกลับกลับมาเป็นต้น

แก้ไข: "ฉันต้องเพิ่มด้วยตนเองทุกครั้งที่ฉันบูตคอมพิวเตอร์ (จากสคริปต์เริ่มต้น) ... " มันขึ้นอยู่กับการกระจาย Linux ที่คุณมี น่าเสียดายที่ดิสทริบิวเตอร์แต่ละคนมีเครื่องมือไฟร์วอลล์ของตัวเอง - ในที่สุดพวกเขาก็โทรมาเท่านั้นiptablesแต่ด้วยเหตุผลบางอย่างที่ผู้เขียนเชื่อว่าการทำให้ไอพีเทเบิลทำงานได้ยากนั้นเป็นสิ่งที่ผู้ใช้ต้องการ

เพื่อตอบคำถามของคุณ - ไฟร์วอลล์ของคุณมีโอกาสมากที่สุดที่สามารถกำหนดค่าให้เพิ่มกฎ NAT นี้โดยอัตโนมัติ อย่างไรก็ตามวิธีการที่แน่นอนแตกต่างกันระหว่าง Linux distros โดยไม่มีเหตุผลที่ดี เศร้า แต่จริง


ไฟร์วอลล์ทั้งหมดบนพีซีถูกปิดใช้งาน บริการที่ทำงานเพียงอย่างเดียวคือ iptables
mackowiakp

iptables == firewall - อย่างใดคุณต้องกำหนดค่า iptables เพื่อปล่อยกฎ MASQUERADE อย่างไร? ขึ้นอยู่กับการแจกจ่าย linux ของคุณ จะต้องมีไฟล์กำหนดค่าบางแห่ง ที่ไหน? ขึ้นอยู่กับการแจกจ่าย linux ของคุณ
MLu

ดังนั้นคุณจึงได้ mu iptables ปกครอง:
mackowiakp

ดังนั้นคุณจึงได้ mu iptables ปกครอง: [root @ media ~] # iptables -L Chain INPUT (นโยบาย ACCEPT) เป้าหมาย prot opt ​​ต้นทางปลายทางปลายทาง Chain FORWARD (นโยบาย ACCEPT) เป้าหมาย prot opt ​​ต้นทางปลายทาง Chain OUTPUT (policy ACCEPT) target prot opt ​​ปลายทางปลายทาง . และฉันและบรรทัดดังกล่าวในการเริ่มต้น: iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE ดังนั้นการใช้งาน iptables ของฉันก็คือไฟร์วอลล์ "โปร่งใส" - หรือไม่มีไฟร์วอลล์
mackowiakp

5

ฉันเขียนไฟร์วอลล์สำหรับทุกโอกาส โปรดอ่าน README และ SCRIPT ก่อนใช้ ฉันรวมกฎที่จำเป็นสำหรับ HOSTAP

ส่วนสำคัญ:

HostAP

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 
iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT 
iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

HostAP ต้องใช้บรรทัดด้านล่างเพื่อให้ทั้งสองยอมรับการทำงาน

iptables -A INPUT -j ACCEPT >> /dev/null 2>&1 
iptables -A OUTPUT -j ACCEPT >> /dev/null 2>&1

https://github.com/diveyez/fw.sh

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