การแนะนำ
การอ่านบทความนอกเหนือไปจากความไร้สาระยังได้รับคำถามจากความถี่ของคำถามที่น่าหดหู่ในหัวข้อนี้ในกลุ่มโปรไฟล์ของชุมชนโทรเลขที่พูดภาษารัสเซีย บทความนี้มุ่งเป้าไปที่ผู้ดูแลระบบ Mikrotik RouterOS (ต่อไปนี้เรียกว่า ROS) มือใหม่ มันเกี่ยวข้องกับ multivan เท่านั้นโดยเน้นที่การกำหนดเส้นทาง เป็นโบนัส มีการตั้งค่าขั้นต่ำที่เพียงพอเพื่อให้แน่ใจว่าการทำงานที่ปลอดภัยและสะดวก ผู้ที่กำลังมองหาการเปิดเผยหัวข้อคิว, โหลดบาลานซ์, vlans, บริดจ์, การวิเคราะห์เชิงลึกแบบหลายขั้นตอนของสถานะของแชนเนลและอื่นๆ อาจไม่เสียเวลาและความพยายามในการอ่าน
ข้อมูลดิบ
ผู้เข้าร่วมการทดสอบเลือกเราเตอร์ Mikrotik ห้าพอร์ตที่มี ROS เวอร์ชัน 6.45.3 โดยจะกำหนดเส้นทางการรับส่งข้อมูลระหว่างสองเครือข่ายท้องถิ่น (LAN1 และ LAN2) และผู้ให้บริการสามราย (ISP1, ISP2, ISP3) ช่องสัญญาณไปยัง ISP1 มีที่อยู่ "สีเทา" แบบคงที่, ISP2 - "สีขาว" ได้รับผ่าน DHCP, ISP3 - "สีขาว" พร้อมการอนุญาต PPPoE แผนภาพการเชื่อมต่อแสดงในรูป:
งานคือการกำหนดค่าเราเตอร์ MTK ตามโครงร่างเพื่อให้:
- ให้การสลับไปยังผู้ให้บริการสำรองข้อมูลโดยอัตโนมัติ ผู้ให้บริการหลักคือ ISP2 สำรองแรกคือ ISP1 สำรองที่สองคือ ISP3
- จัดระเบียบเครือข่าย LAN1 เข้าถึงอินเทอร์เน็ตผ่าน ISP1 เท่านั้น
- ให้ความสามารถในการกำหนดเส้นทางการรับส่งข้อมูลจากเครือข่ายท้องถิ่นไปยังอินเทอร์เน็ตผ่านผู้ให้บริการที่เลือกตามรายการที่อยู่
- จัดเตรียมความเป็นไปได้ในการเผยแพร่บริการจากเครือข่ายท้องถิ่นไปยังอินเทอร์เน็ต (DSTNAT)
- ตั้งค่าตัวกรองไฟร์วอลล์เพื่อให้การรักษาความปลอดภัยขั้นต่ำเพียงพอจากอินเทอร์เน็ต
- เราเตอร์สามารถส่งทราฟฟิกของตัวเองผ่านผู้ให้บริการทั้งสามราย โดยขึ้นอยู่กับที่อยู่ต้นทางที่เลือก
- ตรวจสอบให้แน่ใจว่าแพ็กเก็ตการตอบสนองถูกส่งไปยังช่องสัญญาณที่มา (รวมถึง LAN)
หมายเหตุ เราจะกำหนดค่าเราเตอร์ "ตั้งแต่เริ่มต้น" เพื่อรับประกันว่าจะไม่มีเซอร์ไพรส์ในการกำหนดค่าเริ่มต้น "นอกกรอบ" ที่เปลี่ยนจากเวอร์ชันหนึ่งไปยังอีกเวอร์ชันหนึ่ง Winbox ได้รับเลือกเป็นเครื่องมือกำหนดค่าซึ่งการเปลี่ยนแปลงจะแสดงด้วยสายตา การตั้งค่าจะถูกกำหนดโดยคำสั่งในเทอร์มินัล Winbox การเชื่อมต่อทางกายภาพสำหรับการกำหนดค่าทำได้โดยการเชื่อมต่อโดยตรงกับอินเทอร์เฟซ Ether5
เหตุผลเล็กน้อยเกี่ยวกับ multivan คืออะไร เป็นปัญหาหรือไม่ หรือกำลังหลอกคนฉลาดๆ เกี่ยวกับการสานเครือข่ายสมรู้ร่วมคิด
ผู้ดูแลระบบที่อยากรู้อยากเห็นและเอาใจใส่ตั้งค่าโครงร่างดังกล่าวหรือคล้ายกันด้วยตัวเขาเองทันใดนั้นก็ตระหนักว่ามันใช้งานได้ตามปกติแล้ว ใช่ ใช่ หากไม่มีตารางเส้นทางที่คุณกำหนดเองและกฎเส้นทางอื่นๆ ซึ่งบทความส่วนใหญ่ในหัวข้อนี้เต็มไปด้วย มาตรวจสอบกัน?
เราสามารถกำหนดค่าที่อยู่บนอินเทอร์เฟซและเกตเวย์เริ่มต้นได้หรือไม่ ใช่:
บน ISP1 ที่อยู่และเกตเวย์ลงทะเบียนกับ ระยะทาง=2 и ตรวจสอบเกตเวย์ = ping
บน ISP2 การตั้งค่าไคลเอนต์ dhcp เริ่มต้น - ตามนั้น ระยะทางจะเท่ากับหนึ่ง
บน ISP3 ในการตั้งค่าไคลเอนต์ pppoe เมื่อ add-default-route=ใช่ ใส่ ระยะทางเริ่มต้นเส้นทาง = 3.
อย่าลืมลงทะเบียน NAT ที่ทางออก:
/ip ไฟร์วอลล์ nat add action=masquerade chain=srcnat out-interface-list=WAN
เป็นผลให้ผู้ใช้เว็บไซต์ท้องถิ่นสนุกกับการดาวน์โหลด cat ผ่านผู้ให้บริการ ISP2 หลักและมีการจองช่องโดยใช้กลไก ตรวจสอบเกตเวย์ ดูหมายเหตุ 1
จุดที่ 1 ของงานถูกนำไปใช้ multivan ที่มีเครื่องหมายอยู่ที่ไหน? เลขที่…
ไกลออกไป. คุณต้องปล่อยไคลเอนต์เฉพาะจาก LAN ผ่าน ISP1:
/ip ไฟร์วอลล์ mangle เพิ่ม action=route chain=prerouting dst-address-list=!BOGONS
passthrough=ใช่ route-dst=100.66.66.1 src-address-list=Via_ISP1
/ip ไฟร์วอลล์ mangle เพิ่ม action=route chain=prerouting dst-address-list=!BOGONS
passthrough=ไม่มีเส้นทาง-dst=100.66.66.1 src-address=192.168.88.0/24
ดำเนินการรายการที่ 2 และ 3 ของงานแล้ว ป้าย แสตมป์ กฎเส้นทาง อยู่ไหน!
ต้องการให้สิทธิ์การเข้าถึงเซิร์ฟเวอร์ OpenVPN ที่คุณชื่นชอบด้วยที่อยู่ 172.17.17.17 สำหรับลูกค้าจากอินเทอร์เน็ตหรือไม่ โปรด:
/ip cloud ตั้งค่า ddns-enabled=ใช่
ในฐานะเพื่อนร่วมงาน เราให้ผลลัพธ์ที่ออกมาแก่ลูกค้า: “: ใส่ [ip cloud รับชื่อ dns]"
เราลงทะเบียนการส่งต่อพอร์ตจากอินเทอร์เน็ต:
/ip ไฟร์วอลล์ nat เพิ่ม action=dst-nat chain=dstnat dst-port=1194
ในรายการอินเทอร์เฟซ = โปรโตคอล WAN = udp ถึงที่อยู่ = 172.17.17.17
รายการที่ 4 พร้อมแล้ว
เราตั้งค่าไฟร์วอลล์และการรักษาความปลอดภัยอื่น ๆ สำหรับจุดที่ 5 ในขณะเดียวกันเราก็ดีใจที่ทุกอย่างใช้งานได้แล้วสำหรับผู้ใช้ และเราไปถึงภาชนะที่ใส่เครื่องดื่มแก้วโปรด ...
เอ! อุโมงค์ถูกลืม
l2tp-client กำหนดค่าโดยบทความของ Google ได้เพิ่มขึ้นเป็น Dutch VDS ที่คุณชื่นชอบแล้วหรือยัง ใช่.
เซิร์ฟเวอร์ l2tp ที่มี IPsec เพิ่มขึ้นและไคลเอนต์โดยชื่อ DNS จาก IP Cloud (ดูด้านบน) ติดอยู่หรือไม่ ใช่.
เอนหลังพิงเก้าอี้จิบเครื่องดื่ม เราพิจารณาข้อ 6 และ 7 ของงานอย่างเกียจคร้าน เราคิดว่า - เราต้องการหรือไม่ เหมือนกันมันใช้งานได้ (c) ... ดังนั้นหากยังไม่ต้องการก็แค่นั้น Multivan นำมาใช้
มัลติแวนคืออะไร? นี่คือการเชื่อมต่อช่องอินเทอร์เน็ตหลายช่องกับเราเตอร์ตัวเดียว
คุณไม่จำเป็นต้องอ่านบทความเพิ่มเติม เพราะนอกจากการบังคับใช้ที่น่าสงสัยแล้ว มีอะไรอีกบ้าง
สำหรับผู้ที่ยังคงอยู่ซึ่งสนใจในประเด็นที่ 6 และ 7 ของงาน และยังรู้สึกคันจากลัทธินิยมความสมบูรณ์แบบ เราดำดิ่งลงไป
ภารกิจที่สำคัญที่สุดในการปรับใช้ multivan คือการกำหนดเส้นทางการจราจรที่ถูกต้อง คือ: ไม่ว่า (หรือใด) ดู หมายเหตุ 3 ช่องสัญญาณของ ISP ดูที่เส้นทางเริ่มต้นบนเราเตอร์ของเรา ซึ่งควรส่งคืนการตอบกลับไปยังช่องสัญญาณที่แน่นอนของแพ็กเก็ตที่มาจาก งานมีความชัดเจน ปัญหาอยู่ที่ไหน แท้จริงแล้วในเครือข่ายท้องถิ่นที่เรียบง่ายงานจะเหมือนกัน แต่ไม่มีใครรบกวนการตั้งค่าเพิ่มเติมและไม่รู้สึกลำบาก ข้อแตกต่างคือ routable node ใดๆ บนอินเทอร์เน็ตสามารถเข้าถึงได้ผ่านแต่ละช่องสัญญาณของเรา ไม่ใช่ผ่านช่องเฉพาะอย่างเช่นใน LAN แบบธรรมดา และ "ปัญหา" คือหากมีคำขอที่อยู่ IP ของ ISP3 มาหาเรา ในกรณีของเรา คำตอบจะผ่านช่องทาง ISP2 เนื่องจากเกตเวย์เริ่มต้นถูกนำไปที่นั่น ออกและจะถูกทิ้งโดยผู้ให้บริการว่าไม่ถูกต้อง ปัญหาได้รับการระบุ มีวิธีแก้อย่างไร?
การแก้ปัญหาแบ่งออกเป็นสามขั้นตอน:
- การตั้งค่าล่วงหน้า ในขั้นตอนนี้ การตั้งค่าพื้นฐานของเราเตอร์จะถูกตั้งค่า: เครือข่ายท้องถิ่น, ไฟร์วอลล์, รายการที่อยู่, แฮร์พิน NAT เป็นต้น
- มัลติแวน. ในขั้นตอนนี้ การเชื่อมต่อที่จำเป็นจะถูกทำเครื่องหมายและจัดเรียงเป็นตารางเส้นทาง
- การเชื่อมต่อกับ ISP ในขั้นตอนนี้ อินเทอร์เฟซที่ให้การเชื่อมต่ออินเทอร์เน็ตจะได้รับการกำหนดค่า การกำหนดเส้นทางและกลไกการจองช่องสัญญาณอินเทอร์เน็ตจะถูกเปิดใช้งาน
1. การตั้งค่าล่วงหน้า
1.1. เราล้างการกำหนดค่าเราเตอร์ด้วยคำสั่ง:
/system reset-configuration skip-backup=yes no-defaults=yes
เห็นด้วยกับ "อันตราย! รีเซ็ตหรือไม่ [ใช่/ไม่ใช่]:” และหลังจากรีบูตเครื่อง เราเชื่อมต่อกับ Winbox ผ่าน MAC ในขั้นตอนนี้ การกำหนดค่าและฐานผู้ใช้จะถูกล้าง
1.2. สร้างผู้ใช้ใหม่:
/user add group=full name=knight password=ultrasecret comment=”Not horse”
เข้าสู่ระบบภายใต้มันและลบค่าเริ่มต้น:
/user remove admin
หมายเหตุ เป็นการลบและไม่ปิดผู้ใช้เริ่มต้นที่ผู้เขียนเห็นว่าปลอดภัยกว่าและแนะนำให้ใช้
1.3. เราสร้างรายการอินเทอร์เฟซพื้นฐานเพื่อความสะดวกในการใช้งานไฟร์วอลล์ การตั้งค่าการค้นหา และเซิร์ฟเวอร์ MAC อื่นๆ:
/interface list add name=WAN comment="For Internet"
/interface list add name=LAN comment="For Local Area"
การลงนามอินเทอร์เฟซพร้อมความคิดเห็น
/interface ethernet set ether1 comment="to ISP1"
/interface ethernet set ether2 comment="to ISP2"
/interface ethernet set ether3 comment="to ISP3"
/interface ethernet set ether4 comment="to LAN1"
/interface ethernet set ether5 comment="to LAN2"
และกรอกรายการอินเทอร์เฟซ:
/interface list member add interface=ether1 list=WAN comment=ISP1
/interface list member add interface=ether2 list=WAN comment=ISP2
/interface list member add interface=ether3 list=WAN comment="to ISP3"
/interface list member add interface=ether4 list=LAN comment="LAN1"
/interface list member add interface=ether5 list=LAN comment="LAN2"
หมายเหตุ การเขียนความคิดเห็นที่เข้าใจได้นั้นคุ้มค่ากับเวลาที่ใช้ไปกับสิ่งนี้ อีกทั้งยังช่วยอำนวยความสะดวกอย่างมากในการแก้ไขปัญหาและการทำความเข้าใจการกำหนดค่า
ผู้เขียนเห็นว่าจำเป็นด้วยเหตุผลด้านความปลอดภัยในการเพิ่มอินเทอร์เฟซ ether3 ในรายการอินเทอร์เฟซ "WAN" แม้ว่าโปรโตคอล ip จะไม่ผ่านก็ตาม
อย่าลืมว่าหลังจากเพิ่มอินเทอร์เฟซ PPP บน ether3 แล้ว จะต้องเพิ่มในรายการอินเทอร์เฟซ "WAN" ด้วย
1.4. เราซ่อนเราเตอร์จากการตรวจจับและควบคุมพื้นที่ใกล้เคียงจากเครือข่ายผู้ให้บริการผ่าน MAC:
/ip neighbor discovery-settings set discover-interface-list=!WAN
/tool mac-server set allowed-interface-list=LAN
/tool mac-server mac-winbox set allowed-interface-list=LAN
1.5. เราสร้างชุดกฎตัวกรองไฟร์วอลล์ขั้นต่ำที่เพียงพอเพื่อป้องกันเราเตอร์:
/ip firewall filter add action=accept chain=input comment="Related Established Untracked Allow"
connection-state=established,related,untracked
(กฎให้สิทธิ์สำหรับการเชื่อมต่อที่สร้างขึ้นและที่เกี่ยวข้องซึ่งเริ่มต้นจากทั้งเครือข่ายที่เชื่อมต่อและเราเตอร์เอง)
/ip firewall filter add action=accept chain=input comment="ICMP from ALL" protocol=icmp
(ping และไม่ใช่แค่ ping เท่านั้น อนุญาตให้ใช้ icmp ทั้งหมด มีประโยชน์มากสำหรับการค้นหาปัญหา MTU)
/ip firewall filter add action=drop chain=input comment="All other WAN Drop" in-interface-list=WAN
(กฎที่ปิดห่วงโซ่อินพุตห้ามทุกสิ่งที่มาจากอินเทอร์เน็ต)
/ip firewall filter add action=accept chain=forward
comment="Established, Related, Untracked allow"
connection-state=established,related,untracked
(กฎอนุญาตการเชื่อมต่อที่สร้างขึ้นและเกี่ยวข้องที่ผ่านเราเตอร์)
/ip firewall filter add action=drop chain=forward comment="Invalid drop" connection-state=invalid
(กฎจะรีเซ็ตการเชื่อมต่อด้วยการเชื่อมต่อสถานะ=การผ่านเราเตอร์ไม่ถูกต้อง Mikrotik แนะนำอย่างยิ่ง แต่ในบางสถานการณ์ที่เกิดขึ้นได้ยาก มันสามารถบล็อกทราฟฟิกที่เป็นประโยชน์ได้)
/ip firewall filter add action=drop chain=forward comment="Drop all from WAN not DSTNATed"
connection-nat-state=!dstnat connection-state=new in-interface-list=WAN
(กฎห้ามแพ็กเก็ตที่มาจากอินเทอร์เน็ตและไม่ผ่านขั้นตอน dstnat ให้ผ่านเราเตอร์ วิธีนี้จะปกป้องเครือข่ายท้องถิ่นจากผู้บุกรุกที่อยู่ในโดเมนการออกอากาศเดียวกันกับเครือข่ายภายนอกของเรา จะลงทะเบียน IP ภายนอกของเราเป็น เกตเวย์และลอง "สำรวจ" เครือข่ายท้องถิ่นของเรา)
หมายเหตุ สมมติว่าเครือข่าย LAN1 และ LAN2 นั้นเชื่อถือได้และทราฟฟิกระหว่างพวกเขาและจากพวกเขาจะไม่ถูกกรอง
1.6. สร้างรายการที่มีรายการเครือข่ายที่ไม่สามารถกำหนดเส้นทางได้:
/ip firewall address-list
add address=0.0.0.0/8 comment=""This" Network" list=BOGONS
add address=10.0.0.0/8 comment="Private-Use Networks" list=BOGONS
add address=100.64.0.0/10 comment="Shared Address Space. RFC 6598" list=BOGONS
add address=127.0.0.0/8 comment=Loopback list=BOGONS
add address=169.254.0.0/16 comment="Link Local" list=BOGONS
add address=172.16.0.0/12 comment="Private-Use Networks" list=BOGONS
add address=192.0.0.0/24 comment="IETF Protocol Assignments" list=BOGONS
add address=192.0.2.0/24 comment=TEST-NET-1 list=BOGONS
add address=192.168.0.0/16 comment="Private-Use Networks" list=BOGONS
add address=198.18.0.0/15 comment="Network Interconnect Device Benchmark Testing"
list=BOGONS
add address=198.51.100.0/24 comment=TEST-NET-2 list=BOGONS
add address=203.0.113.0/24 comment=TEST-NET-3 list=BOGONS
add address=224.0.0.0/4 comment=Multicast list=BOGONS
add address=192.88.99.0/24 comment="6to4 Relay Anycast" list=BOGONS
add address=240.0.0.0/4 comment="Reserved for Future Use" list=BOGONS
add address=255.255.255.255 comment="Limited Broadcast" list=BOGONS
(นี่คือรายการที่อยู่และเครือข่ายที่ไม่สามารถกำหนดเส้นทางไปยังอินเทอร์เน็ตได้ และจะตามมาด้วย)
หมายเหตุ รายการอาจมีการเปลี่ยนแปลง ดังนั้นฉันขอแนะนำให้คุณตรวจสอบความเกี่ยวข้องเป็นระยะๆ
1.7. ตั้งค่า DNS สำหรับเราเตอร์เอง:
/ip dns set servers=1.1.1.1,8.8.8.8
หมายเหตุ ใน ROS เวอร์ชันปัจจุบัน เซิร์ฟเวอร์แบบไดนามิกจะมีความสำคัญเหนือเซิร์ฟเวอร์แบบคงที่ คำร้องขอการแก้ไขชื่อถูกส่งไปยังเซิร์ฟเวอร์แรกตามลำดับในรายการ การเปลี่ยนไปยังเซิร์ฟเวอร์ถัดไปจะดำเนินการเมื่อเซิร์ฟเวอร์ปัจจุบันไม่พร้อมใช้งาน การหมดเวลามีขนาดใหญ่ - มากกว่า 5 วินาที การย้อนกลับเมื่อ "เซิร์ฟเวอร์ล่ม" กลับมาทำงานต่อ จะไม่เกิดขึ้นโดยอัตโนมัติ ด้วยอัลกอริทึมนี้และการมีอยู่ของ multivan ผู้เขียนไม่แนะนำให้ใช้เซิร์ฟเวอร์ที่ผู้ให้บริการจัดเตรียมไว้ให้
1.8. ตั้งค่าเครือข่ายท้องถิ่น
1.8.1. เรากำหนดค่าที่อยู่ IP แบบคงที่บนอินเทอร์เฟซ LAN:
/ip address add interface=ether4 address=192.168.88.254/24 comment="LAN1 IP"
/ip address add interface=ether5 address=172.16.1.0/23 comment="LAN2 IP"
1.8.2. เราตั้งกฎสำหรับเส้นทางไปยังเครือข่ายท้องถิ่นของเราผ่านตารางเส้นทางหลัก:
/ip route rule add dst-address=192.168.88.0/24 table=main comment=”to LAN1”
/ip route rule add dst-address=172.16.0.0/23 table=main comment="to LAN2"
หมายเหตุ นี่เป็นหนึ่งในวิธีที่ง่ายและรวดเร็วในการเข้าถึงที่อยู่ LAN ด้วยแหล่งที่มาของที่อยู่ IP ภายนอกของอินเทอร์เฟซเราเตอร์ที่ไม่ผ่านเส้นทางเริ่มต้น
1.8.3. เปิดใช้งาน Hairpin NAT สำหรับ LAN1 และ LAN2:
/ip firewall nat add action=src-nat chain=srcnat comment="Hairpin to LAN1"
out-interface=ether4 src-address=192.168.88.0/24 to-addresses=192.168.88.254
/ip firewall nat add action=src-nat chain=srcnat comment="Hairpin to LAN2"
out-interface=ether5 src-address=172.16.0.0/23 to-addresses=172.16.1.0
หมายเหตุ สิ่งนี้ช่วยให้คุณเข้าถึงทรัพยากรของคุณ (dstnat) ผ่าน IP ภายนอกในขณะที่อยู่ในเครือข่าย
2. ที่จริงแล้วการใช้งาน multivan ที่ถูกต้องมาก
เพื่อแก้ปัญหา "การตอบคำถามที่พวกเขาถาม" เราจะใช้เครื่องมือ ROS สองตัว: เครื่องหมายการเชื่อมต่อ и เครื่องหมายบอกเส้นทาง. เครื่องหมายการเชื่อมต่อ ให้คุณทำเครื่องหมายการเชื่อมต่อที่ต้องการ จากนั้นใช้ป้ายกำกับนี้เป็นเงื่อนไขในการนำไปใช้ เครื่องหมายบอกเส้นทาง. และแล้วด้วย เครื่องหมายบอกเส้นทาง สามารถเข้าทำงานได้ เส้นทาง ip и กฎเส้นทาง. เราพบเครื่องมือต่างๆ แล้ว ตอนนี้คุณต้องตัดสินใจว่าจะทำเครื่องหมายการเชื่อมต่อใด - ครั้งเดียว ทำเครื่องหมายที่ใด - สอง
อย่างแรกทุกอย่างง่าย - เราต้องทำเครื่องหมายการเชื่อมต่อทั้งหมดที่มาถึงเราเตอร์จากอินเทอร์เน็ตผ่านช่องทางที่เหมาะสม ในกรณีของเรา ป้ายเหล่านี้จะมีสามป้าย (ตามจำนวนช่องสัญญาณ): “conn_isp1”, “conn_isp2” และ “conn_isp3”
ข้อแตกต่างที่สองคือการเชื่อมต่อขาเข้าจะมีสองประเภท: การขนส่งและการเชื่อมต่อที่มีไว้สำหรับเราเตอร์ กลไกการทำเครื่องหมายการเชื่อมต่อทำงานในตาราง ฉีก. พิจารณาการเคลื่อนไหวของแพ็คเกจบนไดอะแกรมแบบง่ายซึ่งรวบรวมโดยผู้เชี่ยวชาญของทรัพยากร mikrotik-trainings.com (ไม่ใช่โฆษณา):
ตามลูกศร เราจะเห็นว่าแพ็กเก็ตมาถึงที่ “อินเตอร์เฟซการป้อนข้อมูล”, ผ่านห่วงโซ่ “การกำหนดเส้นทางล่วงหน้า” และจากนั้นจะแบ่งออกเป็นการขนส่งและท้องถิ่นในบล็อก “การตัดสินใจกำหนดเส้นทาง". ดังนั้นเราจึงใช้หินก้อนเดียวเพื่อฆ่านกสองตัว เครื่องหมายการเชื่อมต่อ ในตาราง Mangle การกำหนดเส้นทางล่วงหน้า โซ่ การกำหนดเส้นทางล่วงหน้า.
คำพูด. ใน ROS ป้ายกำกับ "การกำหนดเส้นทาง" จะแสดงเป็น "ตาราง" ในส่วน Ip/เส้นทาง/กฎ และเป็น "เครื่องหมายการกำหนดเส้นทาง" ในส่วนอื่นๆ สิ่งนี้อาจทำให้เกิดความสับสนในการทำความเข้าใจ แต่อันที่จริงแล้ว นี่เป็นสิ่งเดียวกัน และเป็นแอนะล็อกของ rt_tables ใน iproute2 บน linux
2.1. เราทำเครื่องหมายการเชื่อมต่อขาเข้าจากผู้ให้บริการแต่ละราย:
/ip firewall mangle add action=mark-connection chain=prerouting
comment="Connmark in from ISP1" connection-mark=no-mark in-interface=ether1 new-connection-mark=conn_isp1 passthrough=no
/ip firewall mangle add action=mark-connection chain=prerouting
comment="Connmark in from ISP2" connection-mark=no-mark in-interface=ether2 new-connection-mark=conn_isp2 passthrough=no
/ip firewall mangle add action=mark-connection chain=prerouting
comment="Connmark in from ISP3" connection-mark=no-mark in-interface=pppoe-isp3 new-connection-mark=conn_isp3 passthrough=no
หมายเหตุ เพื่อไม่ให้ทำเครื่องหมายการเชื่อมต่อที่ทำเครื่องหมายไว้แล้ว ฉันใช้เงื่อนไขการเชื่อมต่อที่มีเครื่องหมาย=ไม่มีเครื่องหมาย แทนการเชื่อมต่อสถานะ=ใหม่ เพราะฉันคิดว่าสิ่งนี้ถูกต้องกว่า เช่นเดียวกับการปฏิเสธการเชื่อมต่อที่ไม่ถูกต้องในตัวกรองอินพุต
passthrough=no - เนื่องจากในวิธีการใช้งานนี้ การทำเครื่องหมายใหม่จะถูกแยกออก และเพื่อให้เร็วขึ้น คุณสามารถขัดจังหวะการแจงนับกฎหลังจากการจับคู่ครั้งแรก
โปรดทราบว่าเรายังไม่ได้รบกวนการกำหนดเส้นทางแต่อย่างใด ขณะนี้มีเพียงขั้นตอนของการเตรียมการเท่านั้น ขั้นตอนต่อไปของการดำเนินการคือการประมวลผลทราฟฟิกการขนส่งที่ส่งคืนการเชื่อมต่อที่สร้างจากปลายทางในเครือข่ายท้องถิ่น เหล่านั้น. แพ็กเก็ตเหล่านั้นที่ (ดูไดอะแกรม) ส่งผ่านเราเตอร์ไปพร้อมกัน:
“อินเทอร์เฟซอินพุต”=>”การกำหนดเส้นทางล่วงหน้า”=>”การตัดสินใจกำหนดเส้นทาง”=>”ส่งต่อ”=>”โพสต์การกำหนดเส้นทาง”=>”อินเทอร์เฟซเอาต์พุต” และไปถึงผู้รับในเครือข่ายท้องถิ่น
ที่สำคัญ! ใน ROS ไม่มีการแบ่งตรรกะออกเป็นอินเทอร์เฟซภายนอกและภายใน หากเราติดตามเส้นทางของแพ็กเก็ตตอบกลับตามแผนภาพด้านบน ก็จะเป็นไปตามเส้นทางตรรกะเดียวกันกับคำขอ:
“อินเทอร์เฟซอินพุต”=>”การกำหนดเส้นทางล่วงหน้า”=>”การตัดสินใจกำหนดเส้นทาง”=>”ส่งต่อ”=>”โพสต์การกำหนดเส้นทาง”=>”อินเทอร์เฟซเอาต์พุต” เพียงเพื่อร้องขอ"อินเตอร์เฟซการป้อนข้อมูล” คืออินเทอร์เฟซ ISP และสำหรับคำตอบ - LAN
2.2. เรากำหนดเส้นทางการรับส่งข้อมูลการตอบกลับไปยังตารางเส้นทางที่เกี่ยวข้อง:
/ip firewall mangle add action=mark-routing chain=prerouting
comment="Routemark transit out via ISP1" connection-mark=conn_isp1
dst-address-type=!local in-interface-list=!WAN new-routing-mark=to_isp1 passthrough=no
/ip firewall mangle add action=mark-routing chain=prerouting
comment="Routemark transit out via ISP2" connection-mark=conn_isp2
dst-address-type=!local in-interface-list=!WAN new-routing-mark=to_isp2 passthrough=no
/ip firewall mangle add action=mark-routing chain=prerouting
comment="Routemark transit out via ISP3" connection-mark=conn_isp3
dst-address-type=!local in-interface-list=!WAN new-routing-mark=to_isp3 passthrough=no
ความคิดเห็น in-interface-list=!WAN - เราทำงานเฉพาะกับการรับส่งข้อมูลจากเครือข่ายท้องถิ่นและ dst-address-type=!local ที่ไม่มีที่อยู่ปลายทางของที่อยู่ของอินเทอร์เฟซของเราเตอร์
เช่นเดียวกับแพ็กเก็ตในเครื่องที่มาถึงเราเตอร์ระหว่างทาง:
“อินเทอร์เฟซอินพุต”=>”การกำหนดเส้นทางล่วงหน้า”=>”การตัดสินใจกำหนดเส้นทาง”=>”อินพุต”=>”กระบวนการในเครื่อง”
ที่สำคัญ! คำตอบจะเป็นไปในลักษณะต่อไปนี้:
”กระบวนการภายในเครื่อง”=>”การกำหนดเส้นทาง”=>”เอาต์พุต”=>”โพสต์การกำหนดเส้นทาง”=>”อินเทอร์เฟซเอาต์พุต”
2.3. เรากำหนดการตอบสนองการรับส่งข้อมูลในพื้นที่ไปยังตารางเส้นทางที่เกี่ยวข้อง:
/ip firewall mangle add action=mark-routing chain=output
comment="Routemark local out via ISP1" connection-mark=conn_isp1 dst-address-type=!local
new-routing-mark=to_isp1 passthrough=no
/ip firewall mangle add action=mark-routing chain=output
comment="Routemark local out via ISP2" connection-mark=conn_isp2 dst-address-type=!local
new-routing-mark=to_isp2 passthrough=no
/ip firewall mangle add action=mark-routing chain=output
comment="Routemark local out via ISP3" connection-mark=conn_isp3 dst-address-type=!local
new-routing-mark=to_isp3 passthrough=no
ในขั้นตอนนี้ ภารกิจในการเตรียมส่งการตอบกลับไปยังช่องทางอินเทอร์เน็ตที่คำขอมานั้นสามารถแก้ไขได้ ทุกอย่างถูกทำเครื่องหมาย ป้ายกำกับ และพร้อมที่จะกำหนดเส้นทาง
เอฟเฟกต์ "ด้าน" ที่ยอดเยี่ยมของการตั้งค่านี้คือความสามารถในการทำงานร่วมกับการส่งต่อพอร์ต DSNAT จากผู้ให้บริการทั้งสอง (ISP2, ISP3) ในเวลาเดียวกัน ไม่เลย เนื่องจากบน ISP1 เรามีที่อยู่ที่ไม่สามารถกำหนดเส้นทางได้ เอฟเฟกต์นี้มีความสำคัญ ตัวอย่างเช่น สำหรับเซิร์ฟเวอร์อีเมลที่มี MX สองตัวที่ดูช่องอินเทอร์เน็ตต่างกัน
เพื่อขจัดความแตกต่างของการทำงานของเครือข่ายท้องถิ่นด้วยเราเตอร์ IP ภายนอก เราใช้วิธีแก้ปัญหาจากย่อหน้า 1.8.2 และ 3.1.2.6
นอกจากนี้ คุณสามารถใช้เครื่องมือที่มีเครื่องหมายเพื่อแก้ปัญหาวรรค 3 เราดำเนินการดังนี้:
2.4. เรากำหนดเส้นทางการรับส่งข้อมูลจากลูกค้าในพื้นที่จากรายการเส้นทางไปยังตารางที่เหมาะสม:
/ip firewall mangle add action=mark-routing chain=prerouting
comment="Address List via ISP1" dst-address-list=!BOGONS new-routing-mark=to_isp1
passthrough=no src-address-list=Via_ISP1
/ip firewall mangle add action=mark-routing chain=prerouting
comment="Address List via ISP2" dst-address-list=!BOGONS new-routing-mark=to_isp2
passthrough=no src-address-list=Via_ISP2
/ip firewall mangle add action=mark-routing chain=prerouting
comment="Address List via ISP3" dst-address-list=!BOGONS new-routing-mark=to_isp3
passthrough=no src-address-list=Via_ISP3
เป็นผลให้มีลักษณะดังนี้:
3. ตั้งค่าการเชื่อมต่อกับ ISP และเปิดใช้งานการกำหนดเส้นทางที่มีตราสินค้า
3.1. ตั้งค่าการเชื่อมต่อกับ ISP1:
3.1.1. กำหนดค่าที่อยู่ IP แบบคงที่:
/ip address add interface=ether1 address=100.66.66.2/30 comment="ISP1 IP"
3.1.2. ตั้งค่าการกำหนดเส้นทางแบบคงที่:
3.1.2.1. การเพิ่มเส้นทาง "ฉุกเฉิน" เริ่มต้น:
/ip route add comment="Emergency route" distance=254 type=blackhole
หมายเหตุ เส้นทางนี้อนุญาตให้ทราฟฟิกจากกระบวนการในพื้นที่ผ่านขั้นตอนการตัดสินใจเส้นทาง โดยไม่คำนึงถึงสถานะของลิงก์ของผู้ให้บริการรายใด ความแตกต่างของการรับส่งข้อมูลภายในเครื่องขาออกคือเพื่อให้แพ็กเก็ตเคลื่อนที่อย่างน้อยที่สุด ตารางเส้นทางหลักต้องมีเส้นทางที่ใช้งานไปยังเกตเวย์เริ่มต้น ถ้าไม่เช่นนั้นแพ็คเกจก็จะถูกทำลาย
เป็นส่วนขยายของเครื่องมือ ตรวจสอบเกตเวย์ สำหรับการวิเคราะห์สถานะแชนเนลในเชิงลึก ฉันขอแนะนำให้ใช้วิธีกำหนดเส้นทางแบบเรียกซ้ำ สาระสำคัญของวิธีการคือเราบอกให้เราเตอร์มองหาเส้นทางไปยังเกตเวย์ไม่ใช่โดยตรง แต่ผ่านเกตเวย์กลาง 4.2.2.1, 4.2.2.2 และ 4.2.2.3 จะถูกเลือกให้เป็นเกตเวย์ "ทดสอบ" สำหรับ ISP1, ISP2 และ ISP3 ตามลำดับ
3.1.2.2. เส้นทางไปยังที่อยู่ "การยืนยัน":
/ip route add check-gateway=ping comment="For recursion via ISP1"
distance=1 dst-address=4.2.2.1 gateway=100.66.66.1 scope=10
หมายเหตุ เราลดค่าขอบเขตเป็นค่าเริ่มต้นในขอบเขตเป้าหมาย ROS เพื่อใช้ 4.2.2.1 เป็นเกตเวย์แบบเรียกซ้ำในอนาคต ฉันเน้นย้ำ: ขอบเขตของเส้นทางไปยังที่อยู่ "ทดสอบ" จะต้องน้อยกว่าหรือเท่ากับขอบเขตเป้าหมายของเส้นทางที่จะอ้างอิงไปยังที่อยู่ทดสอบ
3.1.2.3. เส้นทางเริ่มต้นแบบเรียกซ้ำสำหรับการรับส่งข้อมูลโดยไม่มีเครื่องหมายกำหนดเส้นทาง:
/ip route add comment="Unmarked via ISP1" distance=2 gateway=4.2.2.1
หมายเหตุ ค่า Distance=2 ถูกใช้เนื่องจาก ISP1 ถูกประกาศเป็นข้อมูลสำรองแรกตามเงื่อนไขงาน
3.1.2.4. เส้นทางเริ่มต้นแบบเรียกซ้ำสำหรับการรับส่งข้อมูลที่มีเครื่องหมายการกำหนดเส้นทาง “to_isp1”:
/ip route add comment="Marked via ISP1 Main" distance=1 gateway=4.2.2.1
routing-mark=to_isp1
หมายเหตุ ที่จริง ในที่สุดเราก็เริ่มเพลิดเพลินไปกับผลของการเตรียมงานที่ดำเนินการในวรรค 2
บนเส้นทางนี้ การรับส่งข้อมูลทั้งหมดที่มีเครื่องหมายเส้นทาง “to_isp1” จะถูกส่งตรงไปยังเกตเวย์ของผู้ให้บริการรายแรก โดยไม่คำนึงว่าเกตเวย์เริ่มต้นใดที่ใช้งานอยู่สำหรับตารางหลัก
3.1.2.5. เส้นทางเริ่มต้นแบบเรียกซ้ำทางเลือกแรกสำหรับการรับส่งข้อมูลที่ติดแท็ก ISP2 และ ISP3:
/ip route add comment="Marked via ISP2 Backup1" distance=2 gateway=4.2.2.1
routing-mark=to_isp2
/ip route add comment="Marked via ISP3 Backup1" distance=2 gateway=4.2.2.1
routing-mark=to_isp3
หมายเหตุ เส้นทางเหล่านี้จำเป็นสำหรับการจองการรับส่งข้อมูลจากเครือข่ายท้องถิ่นที่เป็นสมาชิกของรายการที่อยู่ “to_isp*”'
3.1.2.6. เราลงทะเบียนเส้นทางสำหรับทราฟฟิกในเครื่องของเราเตอร์ไปยังอินเทอร์เน็ตผ่าน ISP1:
/ip route rule add comment="From ISP1 IP to Inet" src-address=100.66.66.2 table=to_isp1
หมายเหตุ เมื่อรวมกับกฎจากย่อหน้า 1.8.2 จะให้การเข้าถึงช่องที่ต้องการด้วยแหล่งที่มาที่กำหนด นี่เป็นสิ่งสำคัญสำหรับการสร้างอุโมงค์ที่ระบุที่อยู่ IP ฝั่งโลคัล (EoIP, IP-IP, GRE) เนื่องจากกฎในกฎเส้นทาง ip จะดำเนินการจากบนลงล่าง จนกว่าจะตรงกับเงื่อนไขแรก กฎนี้จึงควรอยู่หลังกฎจากข้อ 1.8.2
3.1.3. เราลงทะเบียนกฎ NAT สำหรับการรับส่งข้อมูลขาออก:
/ip firewall nat add action=src-nat chain=srcnat comment="NAT via ISP1"
ipsec-policy=out,none out-interface=ether1 to-addresses=100.66.66.2
หมายเหตุ NATim ทุกสิ่งที่ออกไป ยกเว้นสิ่งที่ได้รับในนโยบาย IPsec ฉันพยายามไม่ใช้ action=masquerade เว้นแต่จะจำเป็นจริงๆ มันช้ากว่าและใช้ทรัพยากรมากกว่า src-nat เพราะมันคำนวณที่อยู่ NAT สำหรับการเชื่อมต่อใหม่แต่ละครั้ง
3.1.4. เราส่งไคลเอ็นต์จากรายชื่อที่ไม่ได้รับอนุญาตจากการเข้าถึงผ่านผู้ให้บริการรายอื่นไปยังเกตเวย์ของผู้ให้บริการ ISP1 โดยตรง
/ip firewall mangle add action=route chain=prerouting comment="Address List via ISP1 only"
dst-address-list=!BOGONS passthrough=no route-dst=100.66.66.1
src-address-list=Via_only_ISP1 place-before=0
หมายเหตุ action=route มีลำดับความสำคัญสูงกว่าและถูกนำไปใช้ก่อนกฎการกำหนดเส้นทางอื่นๆ
place-before=0 - วางกฎของเราเป็นอันดับแรกในรายการ
3.2. ตั้งค่าการเชื่อมต่อกับ ISP2
เนื่องจากผู้ให้บริการ ISP2 ให้การตั้งค่าแก่เราผ่าน DHCP จึงมีเหตุผลที่จะทำการเปลี่ยนแปลงที่จำเป็นกับสคริปต์ที่เริ่มต้นเมื่อไคลเอ็นต์ DHCP ถูกทริกเกอร์:
/ip dhcp-client
add add-default-route=no disabled=no interface=ether2 script=":if ($bound=1) do={r
n /ip route add check-gateway=ping comment="For recursion via ISP2" distance=1
dst-address=4.2.2.2/32 gateway=$"gateway-address" scope=10r
n /ip route add comment="Unmarked via ISP2" distance=1 gateway=4.2.2.2;r
n /ip route add comment="Marked via ISP2 Main" distance=1 gateway=4.2.2.2
routing-mark=to_isp2;r
n /ip route add comment="Marked via ISP1 Backup1" distance=2 gateway=4.2.2.2
routing-mark=to_isp1;r
n /ip route add comment="Marked via ISP3 Backup2" distance=3 gateway=4.2.2.2
routing-mark=to_isp3;r
n /ip firewall nat add action=src-nat chain=srcnat ipsec-policy=out,none
out-interface=$"interface" to-addresses=$"lease-address" comment="NAT via ISP2"
place-before=1;r
n if ([/ip route rule find comment="From ISP2 IP to Inet"] ="") do={r
n /ip route rule add comment="From ISP2 IP to Inet"
src-address=$"lease-address" table=to_isp2 r
n } else={r
n /ip route rule set [find comment="From ISP2 IP to Inet"] disabled=no
src-address=$"lease-address"r
n } r
n} else={r
n /ip firewall nat remove [find comment="NAT via ISP2"];r
n /ip route remove [find comment="For recursion via ISP2"];r
n /ip route remove [find comment="Unmarked via ISP2"];r
n /ip route remove [find comment="Marked via ISP2 Main"];r
n /ip route remove [find comment="Marked via ISP1 Backup1"];r
n /ip route remove [find comment="Marked via ISP3 Backup2"];r
n /ip route rule set [find comment="From ISP2 IP to Inet"] disabled=yesr
n}r
n" use-peer-dns=no use-peer-ntp=no
สคริปต์ในหน้าต่าง Winbox:
หมายเหตุ ส่วนแรกของสคริปต์จะทำงานเมื่อได้รับสัญญาเช่าสำเร็จ ส่วนที่สอง - หลังจากปล่อยสัญญาเช่าดูหมายเหตุ 2
3.3. เราตั้งค่าการเชื่อมต่อกับผู้ให้บริการ ISP3
เนื่องจากผู้ให้บริการการตั้งค่าให้ไดนามิกแก่เรา จึงมีเหตุผลที่จะทำการเปลี่ยนแปลงที่จำเป็นกับสคริปต์ที่เริ่มต้นหลังจากอินเทอร์เฟซ ppp ถูกยกขึ้นและหลังจากการล่มสลาย
3.3.1. ก่อนอื่นเรากำหนดค่าโปรไฟล์:
/ppp profile
add comment="for PPPoE to ISP3" interface-list=WAN name=isp3_client
on-down="/ip firewall nat remove [find comment="NAT via ISP3"];r
n/ip route remove [find comment="For recursion via ISP3"];r
n/ip route remove [find comment="Unmarked via ISP3"];r
n/ip route remove [find comment="Marked via ISP3 Main"];r
n/ip route remove [find comment="Marked via ISP1 Backup2"];r
n/ip route remove [find comment="Marked via ISP2 Backup2"];r
n/ip route rule set [find comment="From ISP3 IP to Inet"] disabled=yes;"
on-up="/ip route add check-gateway=ping comment="For recursion via ISP3" distance=1
dst-address=4.2.2.3/32 gateway=$"remote-address" scope=10r
n/ip route add comment="Unmarked via ISP3" distance=3 gateway=4.2.2.3;r
n/ip route add comment="Marked via ISP3 Main" distance=1 gateway=4.2.2.3
routing-mark=to_isp3;r
n/ip route add comment="Marked via ISP1 Backup2" distance=3 gateway=4.2.2.3
routing-mark=to_isp1;r
n/ip route add comment="Marked via ISP2 Backup2" distance=3 gateway=4.2.2.3
routing-mark=to_isp2;r
n/ip firewall mangle set [find comment="Connmark in from ISP3"]
in-interface=$"interface";r
n/ip firewall nat add action=src-nat chain=srcnat ipsec-policy=out,none
out-interface=$"interface" to-addresses=$"local-address" comment="NAT via ISP3"
place-before=1;r
nif ([/ip route rule find comment="From ISP3 IP to Inet"] ="") do={r
n /ip route rule add comment="From ISP3 IP to Inet" src-address=$"local-address"
table=to_isp3 r
n} else={r
n /ip route rule set [find comment="From ISP3 IP to Inet"] disabled=no
src-address=$"local-address"r
n};r
n"
สคริปต์ในหน้าต่าง Winbox:
หมายเหตุ เส้น
/ip firewall mangle set [find comment="Connmark in from ISP3"] in-interface=$"interface";
ช่วยให้คุณจัดการกับการเปลี่ยนชื่ออินเทอร์เฟซได้อย่างถูกต้อง เนื่องจากใช้งานได้กับโค้ดไม่ใช่ชื่อที่แสดง
3.3.2. ตอนนี้ ใช้โปรไฟล์ สร้างการเชื่อมต่อ ppp:
/interface pppoe-client add allow=mschap2 comment="to ISP3" disabled=no
interface=ether3 name=pppoe-isp3 password=isp3_pass profile=isp3_client user=isp3_client
ในขั้นสุดท้าย เรามาตั้งนาฬิกากัน:
/system ntp client set enabled=yes server-dns-names=0.pool.ntp.org,1.pool.ntp.org,2.pool.ntp.org
สำหรับใครที่อ่านจนจบ
วิธีที่เสนอในการใช้ multivan เป็นความชอบส่วนตัวของผู้เขียนและไม่ใช่วิธีเดียวที่เป็นไปได้ ชุดเครื่องมือ ROS นั้นกว้างขวางและยืดหยุ่นซึ่งในแง่หนึ่งทำให้เกิดความยุ่งยากสำหรับผู้เริ่มต้นและในทางกลับกันก็เป็นสาเหตุของความนิยม เรียนรู้ ทดลอง ค้นพบเครื่องมือและวิธีแก้ปัญหาใหม่ๆ ตัวอย่างเช่น ในฐานะที่เป็นแอปพลิเคชันของความรู้ที่ได้รับ เป็นไปได้ที่จะเปลี่ยนเครื่องมือในการใช้งาน multivan นี้ ตรวจสอบเกตเวย์ ด้วยเส้นทางแบบเรียกซ้ำไปยัง เน็ตวอทช์.
หมายเหตุ
- ตรวจสอบเกตเวย์ - กลไกที่ช่วยให้คุณปิดใช้งานเส้นทางหลังจากการตรวจสอบความพร้อมใช้งานของเกตเวย์ไม่สำเร็จสองครั้งติดต่อกัน การตรวจสอบจะดำเนินการทุกๆ 10 วินาที บวกกับการหมดเวลาการตอบสนอง โดยรวมแล้ว ระยะเวลาการเปลี่ยนจริงจะอยู่ในช่วง 20-30 วินาที หากเวลาเปลี่ยนดังกล่าวไม่เพียงพอ มีตัวเลือกให้ใช้เครื่องมือ เน็ตวอทช์ซึ่งสามารถตั้งเวลาตรวจสอบได้ด้วยตนเอง ตรวจสอบเกตเวย์ ไม่เริ่มทำงานเมื่อแพ็กเก็ตสูญหายเป็นระยะบนลิงก์
สำคัญ! การปิดใช้งานเส้นทางหลักจะปิดใช้งานเส้นทางอื่นทั้งหมดที่อ้างถึง ดังนั้นสำหรับพวกเขาที่จะระบุ ตรวจสอบเกตเวย์ = ping ไม่จำเป็น.
- เกิดความล้มเหลวขึ้นในกลไก DHCP ซึ่งดูเหมือนว่าไคลเอ็นต์ติดอยู่ในสถานะต่ออายุ ในกรณีนี้ ส่วนที่สองของสคริปต์จะไม่ทำงาน แต่จะไม่ป้องกันการรับส่งข้อมูลจากการเดินอย่างถูกต้อง เนื่องจากสถานะจะติดตามเส้นทางวนซ้ำที่สอดคล้องกัน
- ECMP (หลายเส้นทางต้นทุนเท่ากัน) - ใน ROS สามารถกำหนดเส้นทางได้หลายเกตเวย์และระยะทางเท่ากัน ในกรณีนี้ การเชื่อมต่อจะถูกกระจายไปตามช่องสัญญาณโดยใช้อัลกอริทึมแบบวนรอบ ตามสัดส่วนของจำนวนเกตเวย์ที่ระบุ
สำหรับแรงผลักดันในการเขียนบทความช่วยในการสร้างโครงสร้างและการจัดวางสำเนียง - ความกตัญญูต่อ Evgeny เป็นการส่วนตัว
ที่มา: will.com