วิธีส่งต่อแพ็คเก็ตระหว่างสองอินเตอร์เฟสได้อย่างไร


5

แล็ปท็อปของฉัน (ใช้งาน Ubuntu 13.10) เชื่อมต่อกับอินเทอร์เน็ตโดยใช้การเชื่อมต่อแบบมีสายที่eth0ด้วย ip 192.168.42.13และยังทำหน้าที่เป็นwifi hotspotat wlan0ด้วย ip 192.168.1.1(ฉันใช้ airbase-ng เพื่อตั้งค่า ap) ตอนนี้ฉันมีอุปกรณ์ Android ที่ต้องเชื่อมต่อกับ wifi นั้น ฉันเห็นว่า Android ของฉันสามารถเชื่อมต่อhotspotและรับการตั้งค่าเครือข่ายต่อไปนี้จากdhcpเซิร์ฟเวอร์ที่ฉันตั้งค่า (ฉันใช้เครื่องมือเรียกNet Info IIจาก PlayStore เพื่อดูรายละเอียดด้านล่างเกี่ยวกับ android ของฉัน)

# My android network settings (connected to the wlan0 of my laptop):
ip address: 192.168.1.10
subnetmask: 255.255.255.0
gateway   : 192.168.1.254
ap-mac    : xx:xx:xx:xx:xx:xx

# My pc's eth0 configuration
ip address: 192.168.42.13
submetmask: 255.255.255.0
gateway   : 192.168.42.129
iface mac : yy:yy:yy:yy:yy:yy

# My pc's wlan0 (hotspot interface) configuration
ip address: 192.168.1.1
subnetmask: 255.255.255.0
gateway   : 192.168.1.1
iface mac : zz:zz:zz:zz:zz:zz

หัวข้อนี้ที่นี่พูดถึงปัญหาที่คล้ายกัน ฉันเห็นว่าฉันต้องส่งต่อแพ็กเก็ตระหว่างeth0และwlan0เครือข่ายเพื่อเชื่อมต่ออุปกรณ์ไร้สายของฉันกับอินเทอร์เน็ต ตอนนี้ฉันจะส่งต่อแพ็กเก็ตที่ฉันได้รับจากwlan0 to eth0และeth0 to wlan0เพื่อให้อุปกรณ์ของฉันเชื่อมต่อกับอินเทอร์เน็ตได้อย่างไร


1
คุณอาจมีปัญหาอื่น: เหตุใดอุปกรณ์ Android ของคุณถึงมีรายการ 192.168.1.254 เป็นเกตเวย์ ฉันคิดว่าคุณมีอินเทอร์เฟซสองตัวในการตั้งค่าของคุณ
MariusMatutiae

ฉันอาจกำหนดค่าไม่dhcpd.confถูกต้อง ฉันควรตั้งให้192.168.1.1ฉันเดา ขอบคุณสำหรับการแก้ไข !!!
vikkyhacks

อีกสิ่งหนึ่ง: คุณมีกฎในตารางเส้นทางของพีซีที่บอกให้ใช้ IF wlan0 สำหรับเครือข่าย 192.168.1.0/24 หรือไม่
MariusMatutiae

ไม่ฉันไม่มีฉันจะเพิ่มได้อย่างไร และจำเป็นหรือไม่ที่ฉันต้องเพิ่มเนื่องจาก 192.168.1.1 เชื่อมโยงกับ wlan0 กฎนั้นจำเป็นหรือไม่
vikkyhacks

1
มันจำเป็น. คำสั่งคือเส้นทาง sudo เพิ่ม -net 192.168.1.0/24 dev wlan0
MariusMatutiae

คำตอบ:


6

ก่อนอื่นคุณต้องเปิดใช้งานการส่งต่อ IP บนระบบของคุณ เมื่อต้องการทำสิ่งนี้เพียงครั้งเดียวให้ใช้

sysctl -w net.ipv4.ip_forward=1

หรือ

echo 1 > /proc/sys/net/ipv4/ip_forward

ในฐานะที่เป็นราก หากคุณต้องการทำให้มันถาวรให้แก้ไข

/etc/sysctl.conf

และเพิ่มบรรทัดที่มี

net.ipv4.ip_forward = 1

สิ่งนี้จะถูกนำไปใช้ในการรีบูตหรือเมื่อคุณเรียกใช้

sysctl -p /etc/sysctl.conf

เมื่อเสร็จแล้วคุณอาจต้องทำการเชื่อมต่อ NAT เนื่องจากไม่น่าจะเป็นเราเตอร์ของคุณรู้ว่าเครือข่าย 192.168.1.0/24 สามารถเข้าถึงได้ผ่าน 192.168.42.13 ถ้า 192.168.42.13 เป็นค่าคงที่คุณสามารถใช้

iptables -t nat -A POSTROUTING -i wlan0 -s 192.168.1.0/24 -j SNAT --to-source 192.168.42.13

มิฉะนั้นใช้

iptables -t nat -A POSTROUTING -i wlan0 -s 192.168.1.0/24 -j MASQUERADE

ตรวจสอบUbuntu Iptablesวิธีการบันทึกกฎเหล่านั้นเมื่อรีบูตเครื่อง


ขอบคุณมากสำหรับคำตอบของคุณ แต่ฉันยังใหม่กับ iptables วิธีที่ฉันเห็นกฎของคุณดูเหมือนว่าคุณเปลี่ยนเส้นทางการรับส่งข้อมูลจาก wlan0 เป็น 192.168.42.13 แต่ฉันไม่ควรย้อนกลับเช่นกันเพื่อส่งต่อการรับส่งข้อมูลจาก 192.168.42.13 ไปยัง wlan0 หรือว่าทำโดยอัตโนมัติ
vikkyhacks

1
@vikkyhacks เมื่อคุณตั้งค่า SNAT แพ็กเก็ตที่ส่งคืนจะถูกส่งกลับไปยังปลายทางที่เหมาะสมโดยอัตโนมัติ Netfilter ติดตามการเชื่อมต่อเพื่อทราบว่า IP ดั้งเดิมใดที่ส่งแพ็กเก็ตและส่งต่อคำตอบกลับไปยังที่อยู่นั้น
user2313067

4
ฉันไม่สามารถใช้ตัวเลือก iptables -i ร่วมกับ POSTROUTING คำสั่งนี้ช่วยฉันออก:iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
Pablo López Torres
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.