จะทำการส่งต่อ / เปลี่ยนเส้นทางพอร์ตบน Debian ได้อย่างไร


12

ฉันมีสองคำถาม

คำถามที่ 1: เครื่องเดเบียนของฉันมีอินเตอร์เฟส eth3 ที่มี ip 192.168.57.28 หากมีคนพยายามเชื่อมต่อกับ 192.168.57.28:1234 ฉันจะเปลี่ยนเส้นทางคำขอไปยังเครื่องอื่นได้อย่างไร: 192.168.57.25:80

คำถามที่ 2: ถ้าเครื่องเดเบียนของฉันมีสองอินเตอร์เฟส: eth3 ที่มี 192.168.57.28 และ ppp0 ที่มี IP แบบไดนามิกบางอย่างและมีคนพยายามเชื่อมต่อผ่าน ppp0 ที่พอร์ต 1234 ฉันจะเปลี่ยนเส้นทางคำขอไปที่ 192.168.57.25:80 ได้อย่างไร

ฉันได้ลองสิ่งนี้แล้ว:

$ iptables -t nat -A PREROUTING -p tcp --dport 1234 -j DNAT --to-destination 192.168.57.25:80
$ echo 1 > /proc/sys/net/ipv4/ip_forward

แต่มันไม่ทำงาน

คำตอบ:


12
iptables -A PREROUTING -t nat -i eth3 -p tcp --dport 1234 -j DNAT --to-destination 192.168.57.25:80
iptables -A FORWARD -p tcp -d 192.168.57.25 --dport 80 -j ACCEPT
iptables -A POSTROUTING -t nat -s 192.168.57.25 -o eth3 -j MASQUERADE

คนแรกระบุว่าการเชื่อมต่อ tcp ขาเข้าทั้งหมดไปยังพอร์ต 1234 ควรถูกส่งไปยังพอร์ต 80 ของเครื่องภายใน 192.168.57.25 กฎนี้เพียงอย่างเดียวไม่ได้ทำงานให้เสร็จสมบูรณ์เพราะ iptables ปฏิเสธการเชื่อมต่อที่เข้ามาทั้งหมด จากนั้นเรายอมรับการเชื่อมต่อขาเข้ากับพอร์ต 1234 จาก eth3 ซึ่งเชื่อมต่อกับอินเทอร์เน็ตด้วย publich IP ตามกฎข้อที่สอง เราเพิ่มกฎข้อที่สองในห่วงโซ่ FORWARD เพื่ออนุญาตให้ส่งต่อแพ็คเก็ตไปยังพอร์ต 80 จาก 192.168.57.25

แก้ไข: เพิ่มการโพสต์

เพื่อติดตามการเชื่อมต่อ มิฉะนั้นโฮสต์ภายนอกจะเห็น IP ภายใน 192.168.57.25 ซึ่งเขาไม่มีเงื่อนงำ

EDIT2:เพิ่งได้รับคำใบ้ว่ามันควรจะเป็น - ถึงจุดหมายแทนที่จะเป็น - ถึง(sry)


ฉันลองคำแนะนำของคุณแล้ว แต่มันไม่ทำงาน ฉันสามารถเรียกดู 192.168.57.25 และเว็บเพจกลับมา แต่การเรียกดู 192.168.57.28:1234 ไม่ทำงาน
Dánjal Salberg Adlersson

@ DánjalSalbergAdlerssonอัปเดตโพสต์ของฉัน (พลาดบางสิ่ง sry.)
Daywalker

3
ฉันลองคำแนะนำของคุณแล้ว แต่มันไม่ทำงาน จากนั้นฉันเปลี่ยนเป็นอันสุดท้าย: iptables -A POSTROUTING -t nat -j MASQUERADE จากนั้นก็ใช้ได้!
Dánjal Salberg Adlersson

8

ขอบคุณ Daywalker และDánjal Salberg Adlersson หลังจากเวลาผ่านไปหลายชั่วโมงสาบานว่าการส่งต่อพอร์ตด้วย iptables จะใช้งานได้ในที่สุด (ทดสอบบน Debian)

ทุบตีสคริปต์

#!/bin/bash

IPTBL=/sbin/iptables

IF_IN=eth0
PORT_IN=40022

IP_OUT=172.16.93.128
PORT_OUT=22

echo "1" > /proc/sys/net/ipv4/ip_forward
$IPTBL -A PREROUTING -t nat -i $IF_IN -p tcp --dport $PORT_IN -j DNAT --to-destination ${IP_OUT}:${PORT_OUT}
$IPTBL -A FORWARD -p tcp -d $IP_OUT --dport $PORT_OUT -j ACCEPT
$IPTBL -A POSTROUTING -t nat -j MASQUERADE

มีเหตุผลใดที่ละเว้น "-s 192.168.57.25" จากบรรทัด POSTROUTING
edwardsmarkf

ยังละเว้น "-o eth3" ด้วย
edwardsmarkf

ฉันเห็น -s และ -o บนบรรทัด POSTROUTING ดูเหมือนว่าจะเป็นตัวเลือก มีความคิดเห็นเกี่ยวกับการใช้ SSL หรือไม่ ฉันถามคำถามที่นี่อ้างอิงสคริปต์ของคุณ: superuser.com/questions/1387902/ …
edwardsmarkf
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.