ฉันจะตั้งค่ากล่อง linux เป็นเราเตอร์เพื่อส่งต่อแพ็กเก็ต ip ได้อย่างไร


25

ฉันกำลังทำการทดสอบเครือข่ายเกี่ยวกับการส่งต่อแพ็กเก็ตไอพี แต่ฉันไม่รู้ว่าทำไมมันจึงใช้ได้

ฉันมีเครื่อง linux ที่มีอินเตอร์เฟสเครือข่ายสองตัวคือ eth0 และ eth1 ทั้งสองที่มีที่อยู่ IP แบบคงที่ (eth0: 192.168.100.1, eth1: 192.168.101.2)

เป้าหมายของฉันง่ายมากฉันแค่ต้องการส่งต่อแพ็กเก็ต ip จาก eth1 ที่มีปลายทางในซับเน็ต 192.168.100.0/24 ถึง eth0 และส่งต่อแพ็กเก็ต ip จาก eth0 ที่มีปลายทางในซับเน็ต 192.168.101.0/24 ไปยัง eth1

ฉันเปิดการส่งต่อไอพีด้วย:

sysctl -w net.ipv4.ip_forward=1

ตารางเส้นทางของฉันเป็นดังนี้:

# route -n
Kernel IP routing table
Destination     Gateway     Genmask        Flags Metric Ref   Use  Iface
192.168.100.0   0.0.0.0     255.255.255.0  U     0      0       0  eth0
192.168.101.0   0.0.0.0     255.255.255.0  U     0      0       0  eth1

แต่เมื่อฉันพยายาม ping จาก 192.168.100.25 ถึง 192.168.101.47 มันไม่ทำงาน

คำตอบ:


23

คุณต้องเพิ่มกฎการส่งต่อโดยใช้iptablesคำสั่งดังนี้:

modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth1 -j ACCEPT

ดูman iptablesรายละเอียดเพิ่มเติมหรือค้นหาบทความวิธีใช้อินเทอร์เน็ตเช่นวิธีตั้งค่าเราเตอร์ NAT บนคอมพิวเตอร์ที่ใช้ Linux

นี่คือLinux IP Masquerade HOWTOซึ่งพูดถึงหัวข้อในรายละเอียด

คุณควรตรวจสอบให้แน่ใจว่าคุณไม่มีกฎอื่น ๆ (เช่นในFORWARDห่วงโซ่) ที่เอาชนะACCEPTกฎข้างต้น หากมีคุณอาจต้องการลบ


ฉันไม่รู้ว่าทำไม แต่ก็ยังใช้งานไม่ได้ ฉันเพิ่มทั้งสองiptables -A FORWARD -i eth0 -o eth1 -j ACCEPTและiptables -A FORWARD -i eth1 -o eth0 -j ACCEPTตารางของฉัน ACCEPTและนำเข้าส่งออกและนโยบายไปข้างหน้าของฉันที่มีอยู่ทั้งหมด
Yishu Fang

มีหลายสิ่งที่สามารถกำหนดค่าผิดได้ ตัวอย่างเช่นคุณควรระบุ IP ของโฮสต์เป็น "เกตเวย์ IP" บนโฮสต์ในเครือข่าย "ภายใน" ดังนั้นพวกเขาจึงรู้ว่าหาก IP ไม่อยู่ในช่วงของเครือข่าย "ท้องถิ่น" ของพวกเขาแพ็กเก็ตจะต้องส่งถึงคุณ เครื่องเกตเวย์ คล้ายกับการตั้งค่าปกติที่เราเตอร์ ADSL จดทะเบียนเป็นเกตเวย์สำหรับโฮสต์ใน LAN
Sergey

เมื่อฉันใช้tracerouteกับโฮสต์ของฉันมันแสดงให้เห็นว่าแพ็คเก็ตไปที่ "เราเตอร์" (192.168.100.1) แต่มันจะไม่ไปอีก
Yishu Fang

1
@UniMouS: ดูเหมือนว่าฉันลืมเรื่อง MASQUERADE ไปแล้ว - ฉันได้แก้ไขคำตอบของฉันแล้วเพิ่มลิงก์ใหม่ไปยังบทความ
Sergey

2

คุณต้องเพิ่มเส้นทางไปยังทั้ง 192.168.100.25 และ 192.168.101.47

หากเซิร์ฟเวอร์การส่งต่อของคุณมี IP 192.168.100.1 และ 192.168.101.1 คุณจะต้องเพิ่มลูกค้า 192.168.100.25

ip route 192.168.101.0/24 via 192.1268.100.1

และในไคลเอนต์ 192.168.101.47

ip route 192.168.100.0/24 via 192.168.101.1

(ใช้ได้กับการส่งต่อที่เปิดใช้งานเท่านั้นไม่มี iptables)

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