เปลี่ยนเส้นทางพอร์ต 80 ถึง 8080 และทำให้มันทำงานบนเครื่องท้องถิ่น


61

ฉันเปลี่ยนเส้นทางการรับส่งข้อมูลสำหรับพอร์ต 80 ถึง 8080 บนเครื่องของฉันด้วย

sudo iptables -A PREROUTING -t nat -p tcp --dport 80 -j REDIRECT --to-ports 8080

มันใช้งานได้ดีสำหรับทุกคนในโลกยกเว้นเครื่องของฉันเอง ฉันเป็นนักพัฒนาซอฟต์แวร์และฉันจำเป็นต้องเปลี่ยนเส้นทางพอร์ต 80 เป็น 8080 ด้วยตนเอง

IP ของฉันคือ 192.168.0.111

เว็บเซิร์ฟเวอร์ของฉันทำงานบนพอร์ต 8080

ฉันต้องการเปิดเว็บไซต์จากhttp://192.168.0.111/แทนที่จะเป็นhttp://192.168.0.111:8080/เครื่องเดียวกับที่เซิร์ฟเวอร์ทำงาน


ขอโทษสำหรับความสามารถในการ abberation แต่อะไรคือวัตถุประสงค์ของการส่งต่อพอร์ต 80 ถึง 8080
ma11hew28

2
@mattdipasquale ผู้ใช้ทั่วไปไม่สามารถเข้าถึงพอร์ต 80 ดังนั้นคุณจึงไม่สามารถเรียกใช้บริการเว็บเช่นขวดหลามในฐานะผู้ใช้ปกติ
Christian

ทำไมคุณไม่ผูกเว็บเซิร์ฟเวอร์เข้ากับพอร์ต 80
David Foerster

5
ฉันเดาเพราะผู้ใช้ที่ไม่ใช่รูทไม่สามารถผูกกับพอร์ต 80/443 และเขาไม่ต้องการเรียกใช้บริการเว็บในฐานะรูท ..
Pavel K.

คำตอบ:


79

คุณต้องใช้OUTPUTลูกโซ่เนื่องจากแพ็คเก็ตที่มีความหมายสำหรับส่วนต่อประสานย้อนกลับไม่ผ่านPREROUTINGสายโซ่ ต่อไปนี้ควรทำงาน; ทำงานเป็นroot:

iptables -t nat -A OUTPUT -o lo -p tcp --dport 80 -j REDIRECT --to-port 8080

1
พอร์ต 80 จำเป็นต้องได้รับการยอมรับอย่างดีหรือไม่? ฉันลองวิธีแก้ปัญหาของคุณแล้วหมายเลขพอร์ต 8080 ของฉันสามารถเข้าถึงได้ แต่ 80 ก็ไม่ได้ใช้งานได้ @heemayl
alper

2
สิ่งนี้ใช้ไม่ได้ไม่แน่ใจว่าทำไมจึงมีการโหวต
diyoda_

@Diyoda_ โปรดกำหนดไม่ได้ทำงาน
heemayl

3
ฉันสามารถยืนยันได้ว่านี่ไม่สามารถใช้ได้กับ Ubuntu 18.04
Ahmed Hamdy

2
ใช้งานไม่ได้กับฉันใน Ubuntu 18.10
Christopher Bradshaw

6

ง่าย ๆ เพียงแค่ใช้ iptables ที่อนุญาตให้ทั้งพอร์ต 80 และ 8080 จากนั้นเปลี่ยนเส้นทาง 80 เป็น 8080 ตรวจสอบให้แน่ใจว่าคุณได้รับมอบหมายให้ถูกต้อง .. ในตัวอย่างฉันใช้ eth0

iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 8080 -j ACCEPT
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

ขอบคุณ! มันทำงานบน Ubuntu 19
Vladimir Ishenko

1
หลังจากนั้นจะเป็นการดีที่จะบันทึกการเปลี่ยนแปลง iptablesudo apt-get install iptables-persistent
Vladimir Ishenko

6

สิ่งนี้ใช้ได้สำหรับฉัน

$ sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

1 งานสำหรับฉันบน Ubuntu 18.04 (อย่างน้อยสำหรับ TCP) ทำพอร์ต 7000-> 7001 และเซิร์ฟเวอร์ฟังพอร์ต 7001 ได้รับการเชื่อมต่อเข้ามาจากพอร์ต 7000 :)
hanshenrik

1
ตรวจสอบให้แน่ใจว่าใช้อินเทอร์เฟซเครือข่ายที่ถูกต้องดังนั้นจึงไม่ถูกเรียกใช้eth0ในทุกระบบ
hanshenrik

4

แทนที่จะiptablesลองดู: sudo ssh -gL 80:127.0.0.1:8080 localhost


2
นั่นเป็นตัวเลือก แต่ไม่ใช่สิ่งที่ฉันต้องการอย่างแน่นอนเพราะฉันมีเว็บเซิร์ฟเวอร์ในพอร์ต 80 แล้วฉันต้องการใช้กับ iptables และทำให้เว็บเซิร์ฟเวอร์ทำงานบนพอร์ต 80 ฉันเดาว่าฉันต้องใช้กฎกับขั้นตอนที่แตกต่างแทนPREROUTING
สูงสุด

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

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