เปลี่ยนเส้นทางการรับส่งข้อมูลจาก IP หนึ่งและพอร์ตไปยัง IP และพอร์ตอื่น

สิ่งที่พบบ่อยมากเมื่อจัดการเซิร์ฟเวอร์กำลังเปลี่ยนเส้นทางการรับส่งข้อมูล

สมมติว่าเรามีเซิร์ฟเวอร์ที่มีบริการบางอย่างทำงานอยู่ แต่ไม่ว่าด้วยเหตุผลใดก็ตามเราจึงเปลี่ยนบริการเหล่านั้น (ฉันไม่รู้เช่น pop3 ซึ่งเป็นพอร์ต 110) ไปยังเซิร์ฟเวอร์อื่น ปกติและบ่อยที่สุดคือเพียงแค่เปลี่ยน IP ในระเบียน DNS อย่างไรก็ตามหากมีคนใช้ IP แทนโดเมนย่อยจะได้รับผลกระทบ

จะทำอย่างไร? ... ง่ายๆเปลี่ยนเส้นทางการรับส่งข้อมูลที่ได้รับจากเซิร์ฟเวอร์นั้นผ่านพอร์ตนั้นไปยังเซิร์ฟเวอร์อื่นที่มีพอร์ตเดียวกัน

เซิร์ฟเวอร์โหนด lan-ethernet

เราจะเริ่มเปลี่ยนเส้นทางการรับส่งข้อมูลได้อย่างไร

สิ่งแรกคือเราต้องเปิดใช้งานไฟล์ ส่งต่อ บนเซิร์ฟเวอร์สำหรับสิ่งนี้เราจะใส่สิ่งต่อไปนี้:

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

คำสั่งทั้งหมดที่แสดงในบทช่วยสอนนี้ต้องดำเนินการด้วยสิทธิ์ระดับผู้ดูแลระบบขอแนะนำให้ดำเนินการโดยตรงกับผู้ใช้รูท

คุณยังสามารถใช้คำสั่งอื่นนี้ได้ในกรณีที่คำสั่งก่อนหน้าไม่เหมาะกับคุณ (มันเกิดขึ้นกับฉันใน CentOS):
sysctl net.ipv4.ip_forward=1
จากนั้นเราจะรีสตาร์ทเครือข่าย:

service networking restart

ใน RPM distros เช่น CentOS และอื่น ๆ จะเป็น:

service nertwork restart

ตอนนี้เราจะไปยังสิ่งที่สำคัญบอกเซิร์ฟเวอร์ผ่าน iptables สิ่งที่จะเปลี่ยนเส้นทาง:

iptables -t nat -A PREROUTING -p tcp --dport <puerto receptor> -j DNAT --to-destination <ip final>:<puerto de ip final>

นั่นคือและตามตัวอย่างที่ฉันพูดถึงสมมติว่าเราต้องการเปลี่ยนเส้นทางการรับส่งข้อมูลทั้งหมดที่เซิร์ฟเวอร์ของเราได้รับผ่านพอร์ต 110 ไปยังเซิร์ฟเวอร์อื่น (เช่น 10.10.0.2) ซึ่งจะยังคงได้รับการเข้าชมผ่าน 110 (เป็นบริการเดียวกัน):

iptables -t nat -A PREROUTING -p tcp --dport 110 -j DNAT --to-destination 10.10.0.2:110

เซิร์ฟเวอร์ 10.10.0.2 จะเห็นว่าแพ็กเก็ตหรือคำขอทั้งหมดมาจาก IP ของไคลเอนต์ในกรณีที่พวกเขาต้องการว่ายน้ำตามคำขอนั่นคือเซิร์ฟเวอร์ที่ 2 เห็นว่าคำขอมาพร้อมกับ IP ของเซิร์ฟเวอร์ที่ 1 (และใน ซึ่งเราใช้การเปลี่ยนเส้นทาง) ก็จะใส่บรรทัดที่สองนี้ด้วย:

iptables -t nat -A POSTROUTING -j MASQUERADE

คำถามและคำตอบบางคำถาม

ในตัวอย่างฉันใช้พอร์ตเดียวกันทั้งสองครั้ง (110) แต่สามารถเปลี่ยนเส้นทางการรับส่งข้อมูลจากพอร์ตหนึ่งไปยังอีกพอร์ตหนึ่งได้โดยไม่มีปัญหา ตัวอย่างเช่นสมมติว่าฉันต้องการเปลี่ยนเส้นทางการรับส่งข้อมูลจากพอร์ต 80 เป็น 443 บนเซิร์ฟเวอร์อื่นสำหรับสิ่งนี้จะเป็น:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.10.0.2:443

นี่คือ iptablesพวกเขาสามารถใช้พารามิเตอร์อื่น ๆ ทั้งหมดที่เรารู้จักเช่นหากเราต้องการเปลี่ยนเส้นทางการรับส่งข้อมูลจาก IP ที่ระบุก็จะเป็นการเพิ่ม -s …ตัวอย่างเช่นฉันจะเปลี่ยนเส้นทางเฉพาะการเข้าชมที่มาจาก 10.10.0.51:

iptables -t nat -A PREROUTING -p tcp -s 10.10.0.51 --dport 80 -j DNAT --to-destination 10.10.0.2:443

หรือทั้งเครือข่าย (/ 24):

iptables -t nat -A PREROUTING -p tcp -s 10.10.0.0/24 --dport 80 -j DNAT --to-destination 10.10.0.2:443

นอกจากนี้เรายังสามารถระบุอินเทอร์เฟซเครือข่ายด้วย -i :

iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 80 -j DNAT --to-destination 10.10.0.2:443

ตอนจบ!

อย่างที่ฉันพูดไปแล้วคือ iptables คุณสามารถใช้สิ่งที่รู้อยู่แล้วเพื่อให้เซิร์ฟเวอร์ทำสิ่งที่คุณต้องการให้ทำ😉

ทักทาย!

เซิร์ฟเวอร์เฉพาะ_SubImage


20 ความคิดเห็นฝากของคุณ

แสดงความคิดเห็นของคุณ

อีเมล์ของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องการถูกทำเครื่องหมายด้วย *

*

*

  1. ผู้รับผิดชอบข้อมูล: Miguel ÁngelGatón
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา

  1.   Fer dijo

    เราสามารถทำได้จากไฟร์วอลล์ที่อนุญาตให้ส่งต่อพอร์ตใช่ไหม? (ใช้กฎที่เกี่ยวข้อง)

    1.    KZKG ^ กาอาระ dijo

      ใช่แน่นอนในท้ายที่สุดไฟร์วอลล์เช่น Pfsense หรืออื่น ๆ ให้ใช้ iptables จากด้านหลัง

      1.    นักล่า dijo

        เพื่อความถูกต้อง pfsense ไม่ได้ใช้ iptables แต่ pf จำไว้ว่ามันเป็น bsd ภายใน

        1.    KZKG ^ กาอาระ dijo

          โอ้ฉันไม่ดี!

  2.   นิโคลัส dijo

    ขอบคุณมากสำหรับเคล็ดลับ🙂

    ฉันมีข้อสงสัยสองสามประการ:
    1 - การเปลี่ยนแปลงถาวรหรือไม่? หรือสูญหายเมื่อรีสตาร์ทเซิร์ฟเวอร์?
    2 - ฉันมีหลายอินสแตนซ์ (พูด A, B และ C) บนซับเน็ตเดียวกัน ในตัวอย่าง A ฉันใช้กฎเพื่อกำหนดเส้นทางการรับส่งข้อมูลไปยัง IP ภายนอกและลองใช้การหยิกจากอินสแตนซ์ B และ C ทุกอย่างทำงานได้อย่างมหัศจรรย์ ปัญหาคือจากอินสแตนซ์ A มันไม่ทำงาน ฉันลองใช้ทั้ง ip และอินเทอร์เฟซลูปแบ็คของคุณแล้วก็ไม่ได้ผล:
    $ iptables -t nat -A PREROUTING -p tcp –dport 8080 -j DNAT - ไปยังปลายทาง xxxx: 8080
    $ iptables -t nat -A PREROUTING -p tcp -i lo –dport 8080 -j DNAT - ไปยังปลายทาง xxxx: 8080

    $ curl ip-yyyy: 8080 / hello_world
    curl: (7) ล้มเหลวในการเชื่อมต่อกับพอร์ต ip-yyyy 8080: การเชื่อมต่อถูกปฏิเสธ
    $ curl localhost: 8080 / hello_world
    curl: (7) ล้มเหลวในการเชื่อมต่อกับพอร์ต localhost 8080: การเชื่อมต่อถูกปฏิเสธ

    มีความคิดว่าปัญหาอาจเป็นอย่างไร

    1.    KZKG ^ กาอาระ dijo

      ใช่การเปลี่ยนแปลงจะหายไปในการรีบูตคุณจะต้องใช้ iptables-save & iptables-restore หรืออะไรทำนองนั้นเพื่อหลีกเลี่ยงสิ่งนั้น
      ฉันไม่ค่อยเข้าใจว่าคุณต้องการทำอะไรเช่น A?

      1.    นิโคลัส dijo

        ฉันมีเซิร์ฟเวอร์ที่รองรับเฉพาะการเชื่อมต่อจาก ip เฉพาะ (เซิร์ฟเวอร์ A) ฉันไม่สามารถหรือต้องการเพิ่ม ips เพิ่มเติมในรายการที่อนุญาต (สำหรับปัญหาเรื่องความสามารถในการปรับขนาด) ดังนั้นฉันต้องการให้ทราฟฟิกทั้งหมดไปยังเซิร์ฟเวอร์ภายนอกผ่าน เซิร์ฟเวอร์ดังกล่าว (A)
        ตามความเป็นจริงฉันมีการกำหนดค่าทั่วโลกที่กำหนดว่าจะใช้ IP ใดสำหรับแต่ละบริการดังนั้นในกรณีนี้จึงเป็นเช่น "ทุกคนที่ต้องการใช้บริการภายนอกต้องใช้ IP A"
        สิ่งนี้ทำได้สำเร็จโดยใช้วิธีการในบทความนี้ แต่ฉันพบปัญหาเมื่อใช้เซิร์ฟเวอร์ A ไม่สามารถเข้าถึงบริการโดยใช้ ip ของตัวเองได้ (แต่เซิร์ฟเวอร์อื่นทั้งหมดทำ)
        จนถึงตอนนี้สิ่งที่ดีที่สุดที่ฉันพบคือการเพิ่มการแมปในไฟล์ / etc / hosts ของเซิร์ฟเวอร์ A โดยชี้ไปที่ ip ภายนอกแทนที่การตั้งค่าส่วนกลาง

  3.   เบรย์เบาท์ dijo

    ดีมากถ้าฉันมีเซิร์ฟเวอร์อีเมลอื่นฉันสามารถส่งต่อการรับส่งข้อมูลจากพอร์ต 143 จากเซิร์ฟเวอร์ 1 ไปยังเซิร์ฟเวอร์ 2 และอีเมลจะไปถึงเซิร์ฟเวอร์ 2 ใช่ไหม

    ความนับถือ

    1.    KZKG ^ กาอาระ dijo

      ในทางทฤษฎีใช่มันทำงานเช่นนี้ แน่นอนว่าคุณต้องติดตั้งเมลเซิร์ฟเวอร์อย่างถูกต้องบนเซิร์ฟเวอร์ 2 🙂

  4.   MSX dijo

    ประเภทของโพสต์ที่เราชอบอ่านขอบคุณ!

  5.   อับราฮัมอิบาร์รา dijo

    บทความที่ยอดเยี่ยมฉันมีโครงการที่ฉันกำลังทำงานอยู่และฉันต้องการถามคำถามกับคุณมีสวิตช์อุตสาหกรรมที่มีฟังก์ชัน NAT (ฉันคิดว่าพวกเขาใช้ IPTables ด้านล่าง) เพื่อแปลที่อยู่ IP โดยไม่ต้องเปลี่ยนแปลงอุปกรณ์ตัวอย่างเช่นฉันมีเซิร์ฟเวอร์ 10.10.2.1 ที่สื่อสารกับคอมพิวเตอร์ 10.10.2.X และผ่านสวิตช์ได้รับการตั้งโปรแกรมเพื่อให้คอมพิวเตอร์ที่มีที่อยู่ 192.168.2.4 เห็นจริงจากเซิร์ฟเวอร์เป็น 10.10.2.5 แปลว่าที่อยู่ IP จะเห็น จากคอมพิวเตอร์เครื่องอื่นที่มีที่อยู่นั้นฉันต้องการทำจากเซิร์ฟเวอร์ที่มี Ubuntu หรือการแจกจ่ายอื่นกฎของ iptables จะเป็นอย่างไร

  6.   กุก dijo

    ข้อมูลที่ดีมากขอบคุณ ^ _ ^

  7.   yisus dijo

    สวัสดี
    ฉันมีปัญหาในการพยายามเปลี่ยนเส้นทาง ฉันอธิบาย:
    ฉันมีพร็อกซีเซิร์ฟเวอร์ใน Ubuntu พร้อมการ์ดเครือข่าย 2 ใบ:
    eth0 = 192.168.1.1 เชื่อมต่อกับเครือข่ายท้องถิ่นที่เหลือ
    eth1 = 192.168.2.2 เชื่อมต่อกับเราเตอร์
    ฉันต้องการทุกอย่างที่มาจาก eth0 เพื่อผ่าน eth1 และผ่านพร็อกซี (ฉันใช้ Squid ซึ่งมีพอร์ตเริ่มต้นคือ 3128) และฉันไม่พบคีย์ในการกำหนดค่า IPTABLES
    ฉันไม่ต้องการข้อ จำกัด ใด ๆ มีเพียงบันทึกเท่านั้นที่ยังคงอยู่ในบันทึกของที่อยู่เว็บที่เข้าเยี่ยมชม

    ฉันหวังว่าคุณจะช่วยฉันได้เนื่องจากเป็นงานที่ค่อนข้างยุ่งยากซึ่งทำให้ฉันกังวลมาสองสามวันแล้ว

    ขอบคุณ

  8.   Gabriel dijo

    เพื่อนฉันใหม่มากสำหรับเซิร์ฟเวอร์อื่นฉันไม่รู้ แต่ฉันเข้าใจเรื่องนี้และฉันเรียนรู้ได้อย่างรวดเร็วคำถามของฉันคือต่อไปนี้ฉันมีเซิร์ฟเวอร์ 2 เซิร์ฟเวอร์ serv_1 และ serv_2 ซึ่งฉันได้เชื่อมต่อกับอินทราเน็ตเดียวกันในเซิร์ฟเวอร์เหล่านี้ฉันมีการตั้งค่า cloud ของตัวเอง ฉันต้องการดำเนินการดังต่อไปนี้:

    ว่าช่วงของ ips บางช่วงเช่น rangeip_1 เมื่อวาง access ip ไปยัง owncloud (ipowncloud) จะถูกส่งไปยัง serv_1 และถ้าเป็น range อื่น ip_2 ที่วาง ipowncloud เดียวกันจะถูกส่งไปที่ serv_2 ซึ่งจะทำให้เซิร์ฟเวอร์ 2 เครื่องอยู่ ในสองเมืองที่แตกต่างกันและช่วง IP นั้นแตกต่างกัน แต่ทั้งหมดอยู่ในเครือข่ายเดียวกันนั่นจะเป็นส่วนแรกส่วนที่สองที่ชัดเจนคือการซิงโครไนซ์เซิร์ฟเวอร์ทั้ง 2 นี้เพื่อให้เป็นมิเรอร์หรือให้คำแนะนำฉันเพื่อปรับความกว้างให้เหมาะสม วงดนตรีโปรดถ้าคุณจะอธิบายให้ฉันฟังทีละขั้นตอนไม่ใช่โหมด super programmer = (

  9.   อันโตนิโอคาร์ริโซซา dijo

    สวัสดีขอโทษฉันมีสวิตช์ที่รับผิดชอบในการสื่อสารของอุปกรณ์ทั้งหมดที่ประกอบเป็นเครือข่ายของฉันและหลังจากนี้ไฟร์วอลล์และในที่สุดก็ออกจากอินเทอร์เน็ตสิ่งที่เกิดขึ้นคือฉันต้องการให้การเปลี่ยนเส้นทางใน สลับและไม่ต้องเข้าถึงไฟร์วอลล์เว้นแต่บริการที่ร้องขอเป็นอินเทอร์เน็ต

  10.   Juan dijo

    ใช้วิธีนี้คุณสามารถเปลี่ยนเส้นทาง HTTPS เป็น HTTP ได้หรือไม่?

  11.   mati dijo

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

  12.   ลาฟาต 32 dijo

    อย่าปฏิบัติต่อฉันไม่ดีสำหรับการถาม สามารถทำได้ใน Windows หรือไม่?

  13.   นกนางแอ่น dijo

    ข้อมูลนี้มีประโยชน์กับฉัน เช่นเคยพวกคุณสามารถไว้วางใจได้เมื่อฉันหาอะไรเป็นภาษาอังกฤษไม่ได้ฉันมักจะมองเป็นภาษาสเปนในโอกาสนั้นฉันมักจะมาที่ไซต์นี้ขอบคุณ

  14.   Seba dijo

    ฉันมีเราเตอร์ 4G ที่เป็นไคลเอนต์ของเครือข่ายที่ฉันไม่ได้จัดการ (เห็นได้ชัดว่าฉันเป็นลูกค้า)…เราเตอร์นี้เป็นเกตเวย์ไปยังเครือข่ายระยะไกลนั้นผ่าน OpenVPN นอกจากนี้ เราเตอร์ดังกล่าวยังทำหน้าที่ของ portforwarding เพื่อเข้าถึงพอร์ต 80 ของเซิร์ฟเวอร์ของหนึ่งในซับเน็ตเหล่านั้นในฟิลด์

    นี่คือการประกาศที่ฉันต้องใส่ในเราเตอร์เป็นกฎที่กำหนดเองของไฟร์วอลล์ «-t nat -A POSTROUTING -j MASQUERADE»

    ขอบคุณสำหรับความช่วยเหลือ!