การส่งต่อพอร์ตอย่างง่าย


19

ฉันมีปัญหาเล็กน้อยในขณะที่ฉันกำลังพยายามตั้งค่าพร็อกซีย้อนกลับด้วยและเซิร์ฟเวอร์ที่สอง ความคิดของฉันคือการให้ไฟร์วอลล์ส่งต่อ https ไปยัง reverse proxy และพอร์ต 29418 (gerrit ssh) ไปยังเซิร์ฟเวอร์ที่สอง ตอนนี้คนที่ให้ความร่วมมือด้านไอทีของฉันพูดว่า: ไม่ได้! ทั้งสองพอร์ตไปที่เซิร์ฟเวอร์ 1 หรือทั้งสองพอร์ตไปที่เซิร์ฟเวอร์ 2

โอเคฉันพยายามตั้งค่าการส่งต่อพอร์ตบนพร็อกซีย้อนกลับของพอร์ต 29418 -> เซิร์ฟเวอร์ 2: 29418

รายละเอียด:

  • เซิร์ฟเวอร์ 1 IP: 10.0.0.132 และ 192.168.10.2 บน Ubuntu 12.04.2 LTS
  • IP ของเซิร์ฟเวอร์ 2: 10.0.0.133 และ 192.168.10.3 บน Ubuntu 12.04.2 LTS

ตอนนี้ทั้ง https และพอร์ต 29418 เปลี่ยนจากไฟร์วอลล์เป็น 10.0.0.132 ฝ่ายไอทีบอกว่าเป็นวิธีเดียว :(

ดังนั้นโปรดบอกวิธีส่งต่อจาก 10.0.0.132:29418 -> 192.168.10.3:29418 หรือ 10.0.0.133:29418

เมื่อฉันทำงานบน 10.0.0.132 ฉันสามารถเชื่อมต่อกับทั้ง 10.0.0.133:29418 และ 192.168.10.3:29418 เพื่อให้พอร์ตเปิด

- อัปเดต -

iptables ของฉัน -t nat -L มีลักษณะเช่นนี้:

root @ dev: / root # iptables -t nat -L
การเตรียมเครือข่าย (ยอมรับนโยบาย)
ปลายทางต้นทางปลายทางเลือก opt
DNAT tcp - ที่ใดก็ได้ dev.example.com tcp dpt: 29418 ถึง: 10.0.0.133

Chain INPUT (นโยบายยอมรับ)
ปลายทางต้นทางปลายทางเลือก opt

เชนเอาท์พุท (นโยบายยอมรับ)
ปลายทางต้นทางปลายทางเลือก opt

การโพสต์เครือข่าย (ยอมรับนโยบาย)
ปลายทางต้นทางปลายทางเลือก opt
root @ dev: / root # cat / proc / sys / net / ipv4 / ip_forward
1

คำตอบ:


32

ในกรณีที่คนอื่นกำลังมองหาวิธีที่ใช้งานได้จริง แม้ว่า @HorsePunchKid นั้นถูกต้องในคำแนะนำของเขา แต่ฉันก็ได้พบกับคำแนะนำที่เติมเต็มในขั้นตอนที่หายไป:

http://www.debuntu.org/how-to-redirecting-network-traffic-to-a-new-ip-using-iptables/

ในสาระสำคัญ:

เปิดใช้งานการส่งต่อ IP:

sysctl net.ipv4.ip_forward=1

เพิ่มกฎการส่งต่อของคุณ (ใช้ nnnn: พอร์ต):

iptables -t nat -A PREROUTING -p tcp -d 10.0.0.132 --dport 29418 -j DNAT --to-destination 10.0.0.133:29418

ถาม IPtables เพื่อปลอมตัว:

iptables -t nat -A POSTROUTING -j MASQUERADE

และนั่นมัน! มันทำงานให้ฉันในกรณีใด ๆ :)


1
นี่คือคำตอบที่ดีที่สุดที่ฉันพบในหัวข้อนี้
Victor Piousbox

การเชื่อมต่อจากคอนเทนเนอร์ Docker ของฉันขาดหายไปหลังจากใช้โซลูชันนี้ ต้องลบกฎ กฎใช้งานได้ แต่สูญเสียการรับส่งข้อมูลอื่น ๆ ทั้งหมด ฉันไม่แนะนำสิ่งนี้
Dyin

iptables -t nat -A POSTROUTING -j MASQUERADEว้าว ... แค่นั้นแหละขอบคุณ! ใช้เวลาค้นหาเว็บและหาข้อมูล มันง่ายและใช้งานได้ดี
shrimpwagon

7

หากคุณมี iptables ติดตั้งอยู่ใน 10.0.0.132 ฉันคิดว่านี่จะตรงไปตรงมา:

iptables -t nat -A PREROUTING -j DNAT -d 10.0.0.132 -p tcp --dport 29418 --to 10.0.0.133

สิ่งนี้บอกว่าจะส่งปริมาณข้อมูลเข้ามาที่ 10.0.0.132 บนพอร์ต 29418 ผ่านไปยัง 10.0.0.133 แทนบนพอร์ตเดียวกันก่อนที่จะมีการกำหนดเส้นทางอื่น ๆ ที่ 10.0.0.132 อาจลองทำ หากคุณรันคำสั่งนี้และมีปัญหากับมันให้แทนที่แฟล็ก -A ด้วย -D เพื่อลบออก

หากคุณต้องการให้กฎนี้ทำงานโดยอัตโนมัติเมื่อเริ่มต้น 10.0.0.132 ให้ลองเพิ่มคำสั่งด้านบนเป็นกฎ "post-up" ใน / etc / network / interfaces


นั่นคือสิ่งที่ฉันทำ แต่มันก็ไม่ได้ผล ฉันไม่ใส่เครื่องหมายข้อคิดเห็น net.ipv4.ip_forward = 1 ใน /etc/sysctl.conf แต่ฉันยังคงได้รับข้อผิดพลาดในการเชื่อมต่อกับ 10.0.0.132:29418
uncletall

6

หากใครก็ตามที่ค้นหาวิธีการชั่วคราวลองใช้วิธีแก้ไขด้านล่าง

    ssh -L 192.168.0.10:8080:10.0.0.10:80 root@10.0.0.10

คำสั่งข้างต้นเปลี่ยนเส้นทางการเชื่อมต่อทั้งหมดไปยังพอร์ต 8080 บนเครื่องฐานของคุณไปยัง 80 พอร์ตของเครื่องเสมือนของคุณ คุณสามารถทดสอบการทำงานได้โดยเข้าไปที่หน้าเว็บhttp://192.168.0.10:8080และมันจะแสดงหน้าเว็บให้คุณเห็นบนเครื่องของแขก

สิ่งนี้ใช้ได้กับพอร์ตทั้งหมด :)


0

ในที่สุดฉันต้องติดตั้ง pfSense เป็นเราเตอร์ภายในเซิร์ฟเวอร์ ESXi ของฉันเพื่อกำหนดเส้นทางการรับส่งข้อมูลไปยัง VM ที่แตกต่างกันเนื่องจากฉันไม่สามารถใช้งานได้ใน Ubuntu

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