![วิธีเปิดใช้งานคุณสมบัติการเลื่อนอย่างราบรื่นใน Google Chrome](/f/8d217e26de568ea13c227beab8ffc426.jpg?width=100&height=100)
ดังที่เราได้คาดการณ์ไว้ในบทช่วยสอนก่อนหน้านี้ของเรื่องนี้ สโมสรฟุตบอลลิเวอร์พูล (Linux Foundation Certified Engineer) ในบทความนี้ เราจะพูดถึงการกำหนดเส้นทางของการรับส่งข้อมูล IP แบบคงที่และแบบไดนามิกกับแอปพลิเคชันเฉพาะ
อย่างแรกเลย มาดูคำจำกัดความกันก่อน:
NS iproute แพ็คเกจมีชุดเครื่องมือสำหรับจัดการระบบเครือข่ายและการควบคุมปริมาณข้อมูลที่เราจะใช้ตลอดทั้งบทความนี้ เนื่องจากเป็นเครื่องมือทดแทนเครื่องมือรุ่นเก่า เช่น ifconfig และ เส้นทาง.
ยูทิลิตี้กลางใน iproute เรียกง่ายๆว่า ip ไวยากรณ์พื้นฐานมีดังนี้:
#คำสั่งวัตถุไอพี
ที่ไหน วัตถุ สามารถเป็นได้เพียงอย่างใดอย่างหนึ่งต่อไปนี้ (แสดงเฉพาะวัตถุที่ใช้บ่อยที่สุด – คุณสามารถอ้างถึง man ip สำหรับรายการทั้งหมด):
ในทางตรงกันข้าม สั่งการ แสดงถึงการกระทำเฉพาะที่สามารถทำได้บนวัตถุ คุณสามารถเรียกใช้คำสั่งต่อไปนี้เพื่อแสดงรายการคำสั่งทั้งหมดที่สามารถนำไปใช้กับวัตถุเฉพาะ:
# ip วัตถุช่วย
ตัวอย่างเช่น,
#ไอพีลิงค์ช่วย
รูปภาพด้านบนแสดงให้เห็นว่าคุณสามารถเปลี่ยนสถานะของอินเทอร์เฟซเครือข่ายได้ด้วยคำสั่งต่อไปนี้:
# ip ลิงค์ตั้งค่าอินเตอร์เฟส {up | ลง}
สำหรับตัวอย่างเพิ่มเติมของ 'ip'สั่งอ่าน 10 คำสั่ง 'ip' ที่มีประโยชน์ในการกำหนดค่าที่อยู่ IP
ในตัวอย่างนี้ เราจะปิดการใช้งานและเปิดใช้งาน eth1:
#ไอพีลิงค์โชว์ # ลิงก์ ip ตั้งค่า eth1 ลง #ไอพีลิงค์โชว์
หากคุณต้องการเปิดใช้งาน eth1 อีกครั้ง
# ลิงก์ ip ตั้งค่า eth1 ขึ้น
แทนที่จะแสดงอินเทอร์เฟซเครือข่ายทั้งหมด เราสามารถระบุหนึ่งในอินเทอร์เฟซเหล่านี้:
# ลิงค์ ip แสดง eth1
ซึ่งจะส่งคืนข้อมูลทั้งหมดสำหรับ eth1
คุณสามารถดูตารางเส้นทางหลักปัจจุบันของคุณด้วยคำสั่งใดคำสั่งหนึ่งจาก 3 คำสั่งต่อไปนี้:
#ไอพีแสดงเส้นทาง # เส้นทาง -n. # netstat -rn.
คอลัมน์แรกในผลลัพธ์ของคำสั่งสามคำสั่งระบุเครือข่ายเป้าหมาย ผลลัพธ์ของ เส้นทางไอพี แสดง (ตามคำสำคัญ dev) ยังนำเสนออุปกรณ์เครือข่ายที่ทำหน้าที่เป็นเกตเวย์ทางกายภาพไปยังเครือข่ายเหล่านั้น
แม้ว่าทุกวันนี้ ip คำสั่ง เป็นที่ต้องการมากกว่าเส้นทาง คุณยังสามารถอ้างถึง man ip-route และ เส้นทางคน สำหรับคำอธิบายโดยละเอียดของคอลัมน์ที่เหลือ
เราต้องการเส้นทาง icmp (ping) แพ็กเก็ตจาก dev2 ถึง dev4 และในทางกลับกัน (โปรดทราบว่าเครื่องไคลเอ็นต์ทั้งสองเครื่องอยู่ในเครือข่ายที่ต่างกัน) ชื่อของแต่ละ NIC พร้อมกับที่อยู่ IPv4 ที่สอดคล้องกันนั้นอยู่ในวงเล็บเหลี่ยม
สภาพแวดล้อมการทดสอบของเรามีดังนี้:
ลูกค้า 1: CentOS 7 [enp0s3: 192.168.0.17/24] - dev1.1 เราเตอร์: Debian Wheezy 7.7 [eth0: 192.168.0.15/24, eth1: 10.0.0.15/24] - dev2. ลูกค้า2: openSUSE 13.2 [enp0s3: 10.0.0.18/24] - dev4.
มาดูตารางเส้นทางใน dev1 (กล่อง CentOS):
#ไอพีแสดงเส้นทาง
แล้วแก้ไขเพื่อใช้มัน enp0s3 NIC และการเชื่อมต่อกับ 192.168.0.15 เพื่อเข้าถึงโฮสต์ในเครือข่าย 10.0.0.0/24:
# เส้นทาง ip เพิ่ม 10.0.0.0/24 ผ่าน 192.168.0.15 dev enp0s3
ซึ่งโดยพื้นฐานแล้วอ่านว่า "เพิ่มเส้นทางไปยังเครือข่าย 10.0.0.0/24 ผ่านอินเทอร์เฟซเครือข่าย enp0s3 โดยใช้ 192.168.0.15 เป็นเกตเวย์"
ในทำนองเดียวกันใน dev4 (กล่อง openSUSE) ไปยังโฮสต์ ping ในเครือข่าย 192.168.0.0/24:
# เส้นทาง ip เพิ่ม 192.168.0.0/24 ผ่าน 10.0.0.15 dev enp0s3
สุดท้าย เราต้องเปิดใช้งานการส่งต่อในเราเตอร์ Debian ของเรา:
# echo 1 > /proc/sys/net/ipv4/ip_forward.
ตอนนี้เรามาปิง:
และ,
หากต้องการให้การตั้งค่าเหล่านี้คงอยู่ตลอดการบู๊ต ให้แก้ไข /etc/sysctl.conf บนเราเตอร์และตรวจสอบให้แน่ใจว่า net.ipv4.ip_forward ตัวแปรถูกตั้งค่าเป็นจริงดังนี้:
net.ipv4.ip_forward = 1
นอกจากนี้ กำหนดค่า NIC บนไคลเอนต์ทั้งสอง (ค้นหาไฟล์การกำหนดค่าภายใน /etc/sysconfig/network บน openSUSE และ /etc/sysconfig/network-scripts บน CentOS – ในทั้งสองกรณีจะเรียกว่า ifcfg-enp0s3).
นี่คือไฟล์กำหนดค่าจากกล่อง openSUSE:
BOOTPROTO=คงที่ ออกอากาศ=10.0.0.255. IPADDR=10.0.0.18. NETMASK=255.255.255.0. เกตเวย์=10.0.0.15. NAME=enp0s3. เครือข่าย=10.0.0.0. ONBOOT=ใช่
อีกสถานการณ์หนึ่งที่เครื่อง Linux สามารถใช้เป็นเราเตอร์ได้คือเมื่อคุณต้องการแชร์การเชื่อมต่ออินเทอร์เน็ตของคุณกับ LAN ส่วนตัว
เราเตอร์: Debian Wheezy 7.7 [eth0: IP สาธารณะ, eth1: 10.0.0.15/24] - dev2 ลูกค้า: openSUSE 13.2 [enp0s3: 10.0.0.18/24] - dev4.
นอกเหนือจากการตั้งค่าการส่งต่อแพ็กเก็ตและตารางเส้นทางแบบคงที่ในไคลเอนต์ดังในตัวอย่างก่อนหน้านี้ เราจำเป็นต้องเพิ่มกฎ iptables สองสามข้อในเราเตอร์:
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED, ESTABLISHED -j ACCEPT # iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
คำสั่งแรกเพิ่มกฎให้กับ โพสต์ภาพ chain ในตาราง nat (Network Address Translation) ซึ่งบ่งชี้ว่า eth0 NIC ควรใช้สำหรับแพ็คเกจขาออก
มาสเคอเรด แสดงว่า NIC นี้มีไดนามิก IP และก่อนส่งแพ็คเกจไปที่ “โลกป่าเถื่อน” ของอินเทอร์เน็ต ที่อยู่ต้นทางส่วนตัวของแพ็กเก็ตจะต้องเปลี่ยนเป็นที่อยู่ IP สาธารณะของเราเตอร์
ใน LAN ที่มีโฮสต์จำนวนมาก เราเตอร์จะติดตามการเชื่อมต่อที่สร้างขึ้นใน /proc/net/ip_conntrack ดังนั้นจึงรู้ว่าจะส่งคืนการตอบกลับจากอินเทอร์เน็ตไปที่ใด
เฉพาะส่วนหนึ่งของผลลัพธ์ของ:
# cat /proc/net/ip_conntrack.
จะแสดงในภาพหน้าจอต่อไปนี้
ที่จุดกำเนิด (IP ส่วนตัวของกล่อง openSUSE) และปลายทาง (Google DNS) ของแพ็กเก็ตถูกเน้น นี่เป็นผลมาจากการวิ่ง:
#เคิร์ล www.tecmint.com
บนกล่อง openSUSE
อย่างที่ฉันแน่ใจว่าคุณเดาได้อยู่แล้ว เราเตอร์กำลังใช้ 8.8.8.8 ของ Google เป็นเนมเซิร์ฟเวอร์ ซึ่งอธิบายได้ว่าทำไมปลายทางของแพ็กเก็ตขาออกจึงชี้ไปยังที่อยู่นั้น
บันทึก: แพ็คเกจที่เข้ามาจากอินเทอร์เน็ตนั้นยอมรับได้ก็ต่อเมื่อเป็นส่วนหนึ่งของการเชื่อมต่อที่สร้างไว้แล้ว (คำสั่ง #2) ในขณะที่อนุญาตให้ใช้แพ็คเกจขาออก "ออกฟรี” (คำสั่ง #3)
อย่าลืมทำให้กฎ iptables ของคุณคงอยู่โดยทำตามขั้นตอนที่ระบุไว้ใน ส่วนที่ 8 – กำหนดค่าไฟร์วอลล์ Iptables ของซีรีส์นี้
ปัจจุบัน เครื่องมือที่ใช้มากที่สุดสำหรับการกำหนดเส้นทางแบบไดนามิกใน Linux คือ quagga. ซึ่งช่วยให้ผู้ดูแลระบบสามารถใช้งานกับเซิร์ฟเวอร์ Linux ที่มีราคาค่อนข้างต่ำได้ เช่นเดียวกับที่มีให้โดยเราเตอร์ Cisco อันทรงพลัง (และมีค่าใช้จ่ายสูง)
เครื่องมือนี้ไม่ได้จัดการการกำหนดเส้นทาง แต่จะปรับเปลี่ยนตารางการเราต์เคอร์เนลเนื่องจากเรียนรู้เส้นทางใหม่ที่ดีที่สุดในการจัดการแพ็กเก็ต
เนื่องจากเป็นทางแยกของม้าลาย ซึ่งเป็นโครงการที่หยุดการพัฒนาไปนานแล้ว จึงรักษาคำสั่งและโครงสร้างที่เหมือนกันกับม้าลายด้วยเหตุผลทางประวัติศาสตร์ นั่นคือเหตุผลที่คุณจะเห็นการอ้างอิงถึงม้าลายเป็นจำนวนมากนับจากนี้เป็นต้นไป
โปรดทราบว่าเป็นไปไม่ได้ที่จะครอบคลุมการกำหนดเส้นทางแบบไดนามิกและโปรโตคอลที่เกี่ยวข้องทั้งหมดในรายการเดียว บทความ แต่ผมมั่นใจว่าเนื้อหาที่นำเสนอนี้จะเป็นจุดเริ่มต้นสำหรับคุณในการสร้าง บน.
ในการติดตั้ง quagga บนการกระจายที่คุณเลือก:
# aptitude update && aptitude ติดตั้ง quagga [บน Ubuntu] # yum update && yum ติดตั้ง quagga [CentOS/RHEL] # zypper รีเฟรช && zypper ติดตั้ง quagga [openSUSE]
เราจะใช้สภาพแวดล้อมเดียวกันกับตัวอย่าง #3 โดยมีความแตกต่างเพียงอย่างเดียวที่ eth0 เชื่อมต่อกับเราเตอร์เกตเวย์หลักที่มี IP 192.168.0.1
ถัดไป แก้ไข /etc/quagga/daemons กับ,
ม้าลาย=1. ริป=1.
ตอนนี้สร้างไฟล์การกำหนดค่าต่อไปนี้
# /etc/quagga/zebra.conf. # /etc/quagga/ripd.conf.
และเพิ่มบรรทัดเหล่านี้ (แทนที่ชื่อโฮสต์และรหัสผ่านที่คุณเลือก):
บริการ quagga เริ่มใหม่ ชื่อโฮสต์ dev2 รหัสผ่าน quagga
# บริการ quagga เริ่มต้นใหม่
บันทึก: ที่ rip.conf เป็นไฟล์กำหนดค่าสำหรับ Routing Information Protocol ซึ่งให้ข้อมูลแก่เราเตอร์ว่าเครือข่ายใดสามารถเข้าถึงได้และอยู่ไกลแค่ไหน (ในแง่ของจำนวนฮ็อพ)
โปรดทราบว่านี่เป็นเพียงหนึ่งในโปรโตคอลที่สามารถใช้ร่วมกับ quagga ได้ และฉันเลือกมันสำหรับบทช่วยสอนนี้เนื่องจาก ใช้งานง่ายและเนื่องจากอุปกรณ์เครือข่ายส่วนใหญ่รองรับแม้ว่าจะมีข้อเสียของการส่งข้อมูลรับรองแบบธรรมดา ข้อความ. ด้วยเหตุผลดังกล่าว คุณต้องกำหนดสิทธิ์ที่เหมาะสมให้กับไฟล์การกำหนดค่า:
# chown quagga: quaggavty /etc/quagga/*.conf. # chmod 640 /etc/quagga/*.conf
ในตัวอย่างนี้ เราจะใช้การตั้งค่าต่อไปนี้กับเราเตอร์สองตัว (ตรวจสอบให้แน่ใจว่าได้สร้างไฟล์การกำหนดค่าสำหรับ เราเตอร์ #2 ตามที่อธิบายไว้ก่อนหน้านี้):
สำคัญ: อย่าลืมทำซ้ำการตั้งค่าต่อไปนี้สำหรับเราเตอร์ทั้งสอง
เชื่อมต่อกับม้าลาย (ฟังพอร์ต 2601) ซึ่งเป็นตัวกลางเชิงตรรกะระหว่างเราเตอร์และเคอร์เนล:
# telnet localhost 2601
ป้อนรหัสผ่านที่ตั้งไว้ใน /etc/quagga/zebra.conf ไฟล์แล้วเปิดใช้งานการกำหนดค่า:
เปิดใช้งาน. กำหนดค่าเทอร์มินัล
ป้อนที่อยู่ IP และเน็ตเวิร์กมาสก์ของแต่ละ NIC:
อินเตอร์ eth0. ไอพีแอดเดอร์ 192.168.0.15 อินเตอร์ eth1. ไอพีแอดเดอร์ 10.0.0.15 ทางออก ทางออก เขียน.
ตอนนี้เราต้องเชื่อมต่อกับ ฉีก daemon เทอร์มินัล (พอร์ต 2602):
# telnet localhost 2602
ป้อนชื่อผู้ใช้และรหัสผ่านตามที่กำหนดค่าไว้ใน /etc/quagga/ripd.conf ไฟล์แล้วพิมพ์คำสั่งต่อไปนี้เป็นตัวหนา (ความคิดเห็นจะถูกเพิ่มเพื่อความกระจ่าง):
เปิดใช้งาน เปิดคำสั่งโหมดพิเศษ กำหนดค่าเทอร์มินัล เปลี่ยนเป็นโหมดการกำหนดค่า คำสั่งนี้เป็นขั้นตอนแรกในการกำหนดค่า เราเตอร์ฉีก เปิดใช้งาน RIP เครือข่าย 10.0.0.0/24 ตั้งค่าอินเทอร์เฟซเปิดใช้งาน RIP สำหรับเครือข่าย 10.0.0.0/24 ทางออกทางออกเขียน เขียนการกำหนดค่าปัจจุบันไปยังไฟล์การกำหนดค่า
บันทึก: ในทั้งสองกรณี การกำหนดค่าจะถูกผนวกเข้ากับบรรทัดที่เราเพิ่มไว้ก่อนหน้านี้ (/etc/quagga/zebra.conf และ /etc/quagga/ripd.conf).
สุดท้าย เชื่อมต่ออีกครั้งกับบริการของ zebra บนเราเตอร์ทั้งสอง และสังเกตว่าแต่ละตัวมี “ได้เรียนรู้” เส้นทางไปยังเครือข่ายที่อยู่ด้านหลังอีกเครือข่ายหนึ่งและซึ่งเป็นจุดต่อไปเพื่อไปยังเครือข่ายนั้นโดยเรียกใช้คำสั่ง แสดงเส้นทางไอพี:
# แสดงเส้นทาง IP
หากคุณต้องการลองใช้โปรโตคอลหรือการตั้งค่าอื่น คุณอาจต้องอ้างอิงถึง ไซต์โครงการ Qugga สำหรับเอกสารเพิ่มเติม
ในบทความนี้ เราได้อธิบายวิธีตั้งค่าการกำหนดเส้นทางแบบสแตติกและไดนามิก โดยใช้เราเตอร์กล่อง Linux คุณสามารถเพิ่มเราเตอร์ได้มากเท่าที่คุณต้องการ และทดลองได้มากเท่าที่คุณต้องการ โปรดอย่าลังเลที่จะติดต่อเราโดยใช้แบบฟอร์มติดต่อด้านล่าง หากคุณมีความคิดเห็นหรือคำถามใดๆ