สิ่งที่พบบ่อยมากเมื่อจัดการเซิร์ฟเวอร์กำลังเปลี่ยนเส้นทางการรับส่งข้อมูล
สมมติว่าเรามีเซิร์ฟเวอร์ที่มีบริการบางอย่างทำงานอยู่ แต่ไม่ว่าด้วยเหตุผลใดก็ตามเราจึงเปลี่ยนบริการเหล่านั้น (ฉันไม่รู้เช่น pop3 ซึ่งเป็นพอร์ต 110) ไปยังเซิร์ฟเวอร์อื่น ปกติและบ่อยที่สุดคือเพียงแค่เปลี่ยน IP ในระเบียน DNS อย่างไรก็ตามหากมีคนใช้ IP แทนโดเมนย่อยจะได้รับผลกระทบ
จะทำอย่างไร? ... ง่ายๆเปลี่ยนเส้นทางการรับส่งข้อมูลที่ได้รับจากเซิร์ฟเวอร์นั้นผ่านพอร์ตนั้นไปยังเซิร์ฟเวอร์อื่นที่มีพอร์ตเดียวกัน
เราจะเริ่มเปลี่ยนเส้นทางการรับส่งข้อมูลได้อย่างไร
สิ่งแรกคือเราต้องเปิดใช้งานไฟล์ ส่งต่อ บนเซิร์ฟเวอร์สำหรับสิ่งนี้เราจะใส่สิ่งต่อไปนี้:
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 คุณสามารถใช้สิ่งที่รู้อยู่แล้วเพื่อให้เซิร์ฟเวอร์ทำสิ่งที่คุณต้องการให้ทำ😉
ทักทาย!
เราสามารถทำได้จากไฟร์วอลล์ที่อนุญาตให้ส่งต่อพอร์ตใช่ไหม? (ใช้กฎที่เกี่ยวข้อง)
ใช่แน่นอนในท้ายที่สุดไฟร์วอลล์เช่น Pfsense หรืออื่น ๆ ให้ใช้ iptables จากด้านหลัง
เพื่อความถูกต้อง pfsense ไม่ได้ใช้ iptables แต่ pf จำไว้ว่ามันเป็น bsd ภายใน
โอ้ฉันไม่ดี!
ขอบคุณมากสำหรับเคล็ดลับ🙂
ฉันมีข้อสงสัยสองสามประการ:
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: การเชื่อมต่อถูกปฏิเสธ
มีความคิดว่าปัญหาอาจเป็นอย่างไร
ใช่การเปลี่ยนแปลงจะหายไปในการรีบูตคุณจะต้องใช้ iptables-save & iptables-restore หรืออะไรทำนองนั้นเพื่อหลีกเลี่ยงสิ่งนั้น
ฉันไม่ค่อยเข้าใจว่าคุณต้องการทำอะไรเช่น A?
ฉันมีเซิร์ฟเวอร์ที่รองรับเฉพาะการเชื่อมต่อจาก ip เฉพาะ (เซิร์ฟเวอร์ A) ฉันไม่สามารถหรือต้องการเพิ่ม ips เพิ่มเติมในรายการที่อนุญาต (สำหรับปัญหาเรื่องความสามารถในการปรับขนาด) ดังนั้นฉันต้องการให้ทราฟฟิกทั้งหมดไปยังเซิร์ฟเวอร์ภายนอกผ่าน เซิร์ฟเวอร์ดังกล่าว (A)
ตามความเป็นจริงฉันมีการกำหนดค่าทั่วโลกที่กำหนดว่าจะใช้ IP ใดสำหรับแต่ละบริการดังนั้นในกรณีนี้จึงเป็นเช่น "ทุกคนที่ต้องการใช้บริการภายนอกต้องใช้ IP A"
สิ่งนี้ทำได้สำเร็จโดยใช้วิธีการในบทความนี้ แต่ฉันพบปัญหาเมื่อใช้เซิร์ฟเวอร์ A ไม่สามารถเข้าถึงบริการโดยใช้ ip ของตัวเองได้ (แต่เซิร์ฟเวอร์อื่นทั้งหมดทำ)
จนถึงตอนนี้สิ่งที่ดีที่สุดที่ฉันพบคือการเพิ่มการแมปในไฟล์ / etc / hosts ของเซิร์ฟเวอร์ A โดยชี้ไปที่ ip ภายนอกแทนที่การตั้งค่าส่วนกลาง
ดีมากถ้าฉันมีเซิร์ฟเวอร์อีเมลอื่นฉันสามารถส่งต่อการรับส่งข้อมูลจากพอร์ต 143 จากเซิร์ฟเวอร์ 1 ไปยังเซิร์ฟเวอร์ 2 และอีเมลจะไปถึงเซิร์ฟเวอร์ 2 ใช่ไหม
ความนับถือ
ในทางทฤษฎีใช่มันทำงานเช่นนี้ แน่นอนว่าคุณต้องติดตั้งเมลเซิร์ฟเวอร์อย่างถูกต้องบนเซิร์ฟเวอร์ 2 🙂
ประเภทของโพสต์ที่เราชอบอ่านขอบคุณ!
บทความที่ยอดเยี่ยมฉันมีโครงการที่ฉันกำลังทำงานอยู่และฉันต้องการถามคำถามกับคุณมีสวิตช์อุตสาหกรรมที่มีฟังก์ชัน NAT (ฉันคิดว่าพวกเขาใช้ IPTables ด้านล่าง) เพื่อแปลที่อยู่ IP โดยไม่ต้องเปลี่ยนแปลงอุปกรณ์ตัวอย่างเช่นฉันมีเซิร์ฟเวอร์ 10.10.2.1 ที่สื่อสารกับคอมพิวเตอร์ 10.10.2.X และผ่านสวิตช์ได้รับการตั้งโปรแกรมเพื่อให้คอมพิวเตอร์ที่มีที่อยู่ 192.168.2.4 เห็นจริงจากเซิร์ฟเวอร์เป็น 10.10.2.5 แปลว่าที่อยู่ IP จะเห็น จากคอมพิวเตอร์เครื่องอื่นที่มีที่อยู่นั้นฉันต้องการทำจากเซิร์ฟเวอร์ที่มี Ubuntu หรือการแจกจ่ายอื่นกฎของ iptables จะเป็นอย่างไร
ข้อมูลที่ดีมากขอบคุณ ^ _ ^
สวัสดี
ฉันมีปัญหาในการพยายามเปลี่ยนเส้นทาง ฉันอธิบาย:
ฉันมีพร็อกซีเซิร์ฟเวอร์ใน Ubuntu พร้อมการ์ดเครือข่าย 2 ใบ:
eth0 = 192.168.1.1 เชื่อมต่อกับเครือข่ายท้องถิ่นที่เหลือ
eth1 = 192.168.2.2 เชื่อมต่อกับเราเตอร์
ฉันต้องการทุกอย่างที่มาจาก eth0 เพื่อผ่าน eth1 และผ่านพร็อกซี (ฉันใช้ Squid ซึ่งมีพอร์ตเริ่มต้นคือ 3128) และฉันไม่พบคีย์ในการกำหนดค่า IPTABLES
ฉันไม่ต้องการข้อ จำกัด ใด ๆ มีเพียงบันทึกเท่านั้นที่ยังคงอยู่ในบันทึกของที่อยู่เว็บที่เข้าเยี่ยมชม
ฉันหวังว่าคุณจะช่วยฉันได้เนื่องจากเป็นงานที่ค่อนข้างยุ่งยากซึ่งทำให้ฉันกังวลมาสองสามวันแล้ว
ขอบคุณ
เพื่อนฉันใหม่มากสำหรับเซิร์ฟเวอร์อื่นฉันไม่รู้ แต่ฉันเข้าใจเรื่องนี้และฉันเรียนรู้ได้อย่างรวดเร็วคำถามของฉันคือต่อไปนี้ฉันมีเซิร์ฟเวอร์ 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 = (
สวัสดีขอโทษฉันมีสวิตช์ที่รับผิดชอบในการสื่อสารของอุปกรณ์ทั้งหมดที่ประกอบเป็นเครือข่ายของฉันและหลังจากนี้ไฟร์วอลล์และในที่สุดก็ออกจากอินเทอร์เน็ตสิ่งที่เกิดขึ้นคือฉันต้องการให้การเปลี่ยนเส้นทางใน สลับและไม่ต้องเข้าถึงไฟร์วอลล์เว้นแต่บริการที่ร้องขอเป็นอินเทอร์เน็ต
ใช้วิธีนี้คุณสามารถเปลี่ยนเส้นทาง HTTPS เป็น HTTP ได้หรือไม่?
สวัสดีอาจจะช้าไปหน่อย แต่ฉันอยากจะถามคุณว่าฉันจะทำให้ปลาหมึกไม่แก้ไข IP ของไคลเอนต์ได้อย่างไรเมื่อฉันต้องการเชื่อมต่อกับเว็บเซิร์ฟเวอร์ในเครือข่ายเดียวกัน
อย่าปฏิบัติต่อฉันไม่ดีสำหรับการถาม สามารถทำได้ใน Windows หรือไม่?
ข้อมูลนี้มีประโยชน์กับฉัน เช่นเคยพวกคุณสามารถไว้วางใจได้เมื่อฉันหาอะไรเป็นภาษาอังกฤษไม่ได้ฉันมักจะมองเป็นภาษาสเปนในโอกาสนั้นฉันมักจะมาที่ไซต์นี้ขอบคุณ
ฉันมีเราเตอร์ 4G ที่เป็นไคลเอนต์ของเครือข่ายที่ฉันไม่ได้จัดการ (เห็นได้ชัดว่าฉันเป็นลูกค้า)…เราเตอร์นี้เป็นเกตเวย์ไปยังเครือข่ายระยะไกลนั้นผ่าน OpenVPN นอกจากนี้ เราเตอร์ดังกล่าวยังทำหน้าที่ของ portforwarding เพื่อเข้าถึงพอร์ต 80 ของเซิร์ฟเวอร์ของหนึ่งในซับเน็ตเหล่านั้นในฟิลด์
นี่คือการประกาศที่ฉันต้องใส่ในเราเตอร์เป็นกฎที่กำหนดเองของไฟร์วอลล์ «-t nat -A POSTROUTING -j MASQUERADE»
ขอบคุณสำหรับความช่วยเหลือ!