Сүлжээгээр нэг машин нөгөө машиныг олж чаддаг байхын тулд нэгээс нөгөө уруу хэрхэн хүрэхийг тайлбарласан арга замууд байх ёстой. Үүнийг routing буюу чиглүүлэлт хийх гэдэг. «Чиглүүлэлт» нь «destination буюу зорьсон газар» болон «гарц» хаягийн хослолоор тодорхойлогддог. Хэрэв та энэ «зорьсон газар» уруу очихоор оролдож байгаа бол энэ «гарц»аар холбогдоно гэж энэ хослол нь зааж байгаа юм. Гурван төрлийн зорьсон газар байдаг: эдгээр нь хостууд, дэд сүлжээнүүд болон «анхдагч» юм. «Анхдагч чиглүүлэлт» нь аль ч чиглүүлэлтэд хамаарахгүй бол ашиглагддаг. Бид анхдагч чиглүүлэлтийн талаар дараа нь арай дэлгэрэнгүй ярилцах болно. Бас гурван төрлийн гарц байдаг: эдгээр нь хостууд, интерфэйсүүд (бас «links» буюу холбоосууд гэгддэг) болон Ethernet тоног төхөөрөмжийн хаягууд (MAC хаягууд) юм.
Чиглүүлэлтийн өөр ойлголтуудыг үзүүлэхийн тулд бид netstat
-ийн
дараах жишээг ашиглах болно:
%
netstat -r
Routing tables
Destination Gateway Flags Refs Use Netif Expire
default outside-gw UGSc 37 418 ppp0
localhost localhost UH 0 181 lo0
test0 0:e0:b5:36:cf:4f UHLW 5 63288 ed0 77
10.20.30.255 link#1 UHLW 1 2421
example.com link#1 UC 0 0
host1 0:e0:a8:37:8:1e UHLW 3 4601 lo0
host2 0:e0:a8:37:8:1e UHLW 0 5 lo0 =>
host2.example.com link#1 UC 0 0
224 link#1 UC 0 0Эхний хоёр мөр нь анхдагч чиглүүлэлт (бид үүнийг дараагийн хэсэгт
авч үзэх болно) болон localhost
чиглүүлэлтийг заана.
Энэ чиглүүлэлтийн хүснэгтийн заасан localhost
-д зориулж
ашиглах интерфэйс (Netif
багана) нь
lo0
бөгөөд энэ нь бас loopback буюу буцах
интерфэйс гэгддэг. Энэ нь уг очих газрын хувьд бүх урсгалыг LAN уруу илгээхийн оронд
дотооддоо үлдээнэ гэж хэлж байгаа бөгөөд энэ нь хаанаас эхэлсэн тэндээ буцаж
очих учраас тэр юм.
Дараагийн байгаа зүйл бол 0:e0:
-с
эхэлсэн хаягууд юм. Эдгээр нь Ethernet тоног төхөөрөмжийн хаягууд бөгөөд
бас MAC хаягууд гэгддэг. FreeBSD нь локал Ethernet дээр байгаа
ямар ч хостуудыг (жишээн дээрх test0
) автоматаар
таньж тэр хостод зориулж шууд түүн уруу ed0
Ethernet интерфэйсээр гарахаар чиглүүлэлт нэмдэг. Энэ төрлийн
чиглүүлэлттэй холбоотой хугацаа (Expire
багана)
байдаг бөгөөд энэ нь заасан хугацаанд тэр хостоос бид нар юу ч сонсохгүй үед
ашиглагддаг. Ийм явдал болоход энэ хост уруу заагдсан чиглүүлэлт автоматаар
устгагдах болно. Эдгээр хостууд нь RIP (Routing Information Protocol
буюу чиглүүлэлтийн мэдээллийн протокол) гэгддэг арга замаар танигддаг бөгөөд энэ нь
хамгийн богино замыг тодорхойлсны үндсэн дээр локал хостууд уруу очих чиглүүлэлтийг
олдог.
FreeBSD нь бас локал дэд сүлжээнд зориулж дэд сүлжээний чиглүүлэлтүүдийг
нэмдэг (10.20.30.255
нь
10.20.30
дэд сүлжээний цацах хаяг бөгөөд
example.com
нь тэр дэд сүлжээтэй холбоотой
домэйний нэр юм). link#1
тэмдэглэгээ нь машин дахь
эхний Ethernet картыг заана. Та тэдгээрт зориулж ямар ч нэмэлт интерфэйс
заагдаагүйг харах болно.
Эдгээр бүлгүүд (локал сүлжээний хостууд болон локал дэд сүлжээнүүд) нь автоматаар routed гэгддэг дэмоноор тохируулагдсан чиглүүлэлтүүдтэй байна. Хэрэв энэ нь ажиллахгүй байгаа бол зөвхөн статикаар тодорхойлогдсон (өөрөө хэлбэл илэрхий оруулж өгсөн) чиглүүлэлтүүд байх болно.
host1
мөр нь бидний хостыг зааж байгаа бөгөөд
түүнийг Ethernet хаягаар нь мэддэг. Бид илгээж байгаа хост болохоор FreeBSD нь
Ethernet интерфэйсээр илгээхийн оронд loopback буюу буцах интерфэйсийг
(lo0
) ашиглахаа мэддэг.
Хоёр host2
мөрүүд нь биднийг ifconfig(8)
alias буюу өөр нэр ашиглах үед (Ethernet-ийн талаар дурдсан хэсгээс бид үүнийг яагаад хийдгийг
үзээрэй) учирч болзошгүй зүйлийн жишээ юм. lo0
интерфэйсийн дараа байгаа =>
тэмдэг нь бид зөвхөн
loopback буюу буцах интерфэйсийг ашиглаад зогсохгүй (энэ хаяг нь бас локал хостыг хэлж
байгаа болохоор) энэ нь ялангуяа alias буюу өөр нэр гэдгийг хэлж байгаа юм.
Ийм чиглүүлэлтүүд нь alias-ийг дэмждэг хост дээр зөвхөн харагдана; локал сүлжээн
дэх бусад бүх хостууд ийм чиглүүлэлтүүдийнхээ хувьд ердөө л link#1
мөртэй байна.
Төгсгөлийн мөр (очих дэд сүлжээ 224
) нь
multicast-тай ажиллаж байгаа бөгөөд үүнийг өөр хэсэгт авч үзэх болно.
Төгсгөлд нь чиглүүлэлт бүрийн төрөл бүрийн шинж чанаруудыг Flags
баганаас харж болно. Эдгээр тугуудын зарим болон тэдгээрийн харгалзах утга санаануудыг
доорх богино хүснэгтээр харуулав:
U | Up: Чиглүүлэлт идэвхтэй байна. |
H | Host: Чиглүүлэлтийн очих газар нь ганц хост байна. |
G | Gateway: Энэ очих газарт зориулж бүгдийг энэ алсын систем уруу илгээх бөгөөд алсын систем нь тэндээсээ хаашаа илгээхээ олох болно. |
S | Static: Энэ чиглүүлэлт нь системээр автоматаар үүсгэгдсэн биш гараар тохируулагдсан. |
C | Clone: Бидний холбогдож байгаа машины хувьд энэ чиглүүлэлт дээр үндэслэн шинэ чиглүүлэлт үүсгэдэг. Энэ төрлийн чиглүүлэлт нь ихэвчлэн локал сүлжээнүүдэд ашиглагддаг. |
W | WasCloned: Локал сүлжээний (Clone) чиглүүлэлт дээр үндэслэн автоматаар тохируулагдсан чиглүүлэлтийг заана. |
L | Link: Чиглүүлэлт нь Ethernet тоног төхөөрөмжтэй холбоотой зүйлийг хамарна. |
Локал систем нь алсын хост уруу холболт хийх хэрэгтэй үед мэдэгдэж байгаа зам байгаа эсэхийг тодорхойлохын тулд энэ нь чиглүүлэлтийн хүснэгтээс шалгадаг. Хэрэв алсын хост нь бидний хэрхэн хүрэхийг нь мэдэх (клон хийгдсэн чиглүүлэлтүүд) дэд сүлжээнд байгаа бол систем тэр интерфэйсээр холбогдож болох эсэхийг шалгадаг.
Хэрэв бүх мэдэгдэж байгаа зам амжилтгүй болвол системд сүүлчийн ганц
сонголт «анхдагч» чиглүүлэлт үлдэнэ. Энэ чиглүүлэлт нь гарц чиглүүлэлтийн
тусгай төрөл (системд ихэвчлэн ганц байдаг) бөгөөд тугнуудын талбартаа үргэлж
c
гэж тэмдэглэгдсэн байдаг. Локал сүлжээн дэх хостын хувьд
энэ гарц нь машины гадаад ертөнц уруу шууд холбогдох зүйлээр (PPP холболт, DSL,
кабель модем, T1, эсвэл өөр сүлжээний интерфэйсээр) тохируулагддаг.
Хэрэв та өөрөө гаднах ертөнц уруу гарц маягаар ажиллаж байгаа машины хувьд анхдагч чиглүүлэлтийг тохируулж байгаа бол анхдагч чиглүүлэлт нь таны Интернэтийн Үйлчилгээ Үзүүлэгчийн (ISP) сайт дахь гарц машин болох юм.
Анхдагч чиглүүлэлтүүдийн жишээг харцгаая. Энэ нь нийтлэг тохиргоо юм:
Local1
болон
Local2
хостууд нь таны сайтад байна.
Local1
нь ISP уруу dial-up PPP холболтоор
холбогдсон. Энэ PPP сервер компьютер нь дотоод сүлжээгээр
өөр нэг гарц компьютер уруу гадаад интерфэйсээр ISP-ийн Интернэт өгч байгаа уруу
холбогдсон байна.
Таны машин бүрийн хувьд анхдагч чиглүүлэлтүүд нь ийм болно:
Хост | Анхдагч Гарц | Интерфэйс |
---|---|---|
Local2 | Local1 | Ethernet |
Local1 | T1-GW | PPP |
Түгээмэл асуулт нь «Бид яагаад Local1
-ийн хувьд
түүний холбогдсон ISP-ийн серверийн оронд T1-GW
-г анхдагч гарц гэж
тохируулсан бэ?» гэсэн асуулт юм.
PPP интерфэйс нь өөрийн талын холболтондоо ISP-ийн локал сүлжээн дэх хаягийг ашиглаж
байгаа болохоор ISP-ийн локал сүлжээн дэх бусад дурын машинуудад зориулсан чиглүүлэлт
автоматаар үүсгэгдэх болно гэдгийг санаарай. Ийм учраас та T1-GW
машин уруу хэрхэн хүрэхээ аль хэдийн мэдэж байгаа болохоор ISP-ийн сервер уруу урсгал
илгээх дундын алхам шаардлагагүй юм.
Өөрийн локал сүлжээний хувьд X.X.X.1
хаягийг гарц хаяг болгож ашиглах нь
түгээмэл байдаг. Тэгэхээр (адил жишээг ашиглаад) хэрэв таны локал C ангиллын
хаягийн талбар 10.20.30
байсан бөгөөд
таны ISP 10.9.9
-г ашиглаж байгаа бол
анхдагч чиглүүлэлтүүд нь ийм байна:
Хост | Анхдагч Чиглүүлэлт |
---|---|
Local2 (10.20.30.2) | Local1 (10.20.30.1) |
Local1 (10.20.30.1, 10.9.9.30) | T1-GW (10.9.9.1) |
Та /etc/rc.conf
файлын тусламжтай
анхдагч чиглүүлэлтийг хялбараар тодорхойлж болно. Бидний жишээн дээр
Local2
машин дээр бид дараах мөрийг
/etc/rc.conf
файлд нэмсэн:
Үүнийг шууд тушаалын мөрөөс route(8) тушаалаар хийж бас болно:
#
route add default 10.20.30.1
Сүлжээний чиглүүлэлтийн хүснэгтүүдийг гараар удирдах талаар дэлгэрэнгүй мэдээллийг route(8) гарын авлагын хуудаснаас лавлана уу.
Өөр бас нэг тохиргооны төрлийг бид хэлэлцэх ёстой бөгөөд энэ нь хоёр өөр сүлжээн дээр байгаа хостын тухай юм. Техникийн хувьд гарц болж байгаа дурын машин (дээрх жишээн дээр PPP холболтыг ашиглах нь) хос гэртэй хост гэж тооцогддог. Гэхдээ үнэндээ энэ ухагдахуун нь хоёр дотоод сүлжээнд байгаа машиныг хэлэхэд зөвхөн ашиглагддаг.
Нэг тохиолдолд машин нь хоёр Ethernet карттай бөгөөд карт бүр тусдаа дэд сүлжээний хаягтай байна. Өөрөөр, машин нь зөвхөн нэг Ethernet карттай бөгөөд ifconfig(8) alias хийлт буюу өөр нэрийг ашигладаг байж болно. Эхнийх нь физикийн хувьд тусдаа хоёр Ethernet сүлжээ ашиглагдаж байгаа үед хэрэглэгдэх бөгөөд сүүлийнх нь ганц физик сүлжээний сегмент байгаа боловч логикийн хувьд хоёр тусдаа дэд сүлжээнүүд байгаа үед хэрэглэгддэг.
Аль ч тохиолдолд энэ машин нь нөгөө дэд сүлжээ уруу хүрэх тодорхойлогдсон гарц (гаднаас ирэх чиглүүлэлт) гэдгийг дэд сүлжээ бүр мэддэг байхаар чиглүүлэлтийн хүснэгтүүд тохируулагддаг. Хоёр дэд сүлжээний хооронд чиглүүлэгч маягаар ажиллах машинтай энэ тохиргоо нь бид аль нэг тал уруу эсвэл хоёр талын хоёулангийн хувьд пакет шүүгч буюу галт хана дээр тулгуурласан аюулгүй байдлын шийдлийг хийх шаардлагатай үед ихэвчлэн хэрэглэгддэг.
Хоёр интерфэйсийн хооронд пакетуудыг дамжуулдаг байхаар энэ машиныг байлгахыг хэрэв та хүсвэл энэ боломжийг идэвхжүүлэхийг FreeBSD-д хэлэх хэрэгтэй. Үүнийг хэрхэн хийх талаар дэлгэрэнгүйг дараагийн хэсгээс үзнэ үү.
Сүлжээний чиглүүлэгч нь ердөө л нэг интерфэйсээс нөгөө интерфэйс уруу пакетуудыг
дамжуулдаг систем юм. Интернэтийн стандартууд болон сайн инженерчлэлийн туршлага нь
үүнийг FreeBSD дээр анхдагчаар идэвхжүүлсэн байхаас FreeBSD төслийг сэргийлдэг.
rc.conf(5) дахь дараах хувьсагчийг YES
болгон
өөрчилснөөр та энэ боломжийг идэвхжүүлж болно:
Энэ тохируулга нь sysctl(8)-ийн хувьсагч net.inet.ip.forwarding
-г
1
болгоно. Хэрэв та чиглүүлэлтийг түр зуур зогсоох хэрэгтэй
бол үүнийг түр зуур 0
болгож тохируулж болно.
Урсгалыг хааш нь илгээхээ мэдэхийн тулд таны шинэ чиглүүлэгчид чиглүүлэлтүүд
хэрэгтэй болно. Хэрэв таны сүлжээ хангалттай хялбар байх юм бол статик
чиглүүлэлтүүд ашиглаж болно. FreeBSD нь стандарт BSD чиглүүлэлтийн дэмон
routed(8) програмтай бас ирдэг. Энэ нь RIP (1 ба 2-р хувилбар) болон
IRDP протоколуудыг дэмждэг. BGP v4, OSPF v2 болон бусад төвөгтэй
чиглүүлэлтийн протоколуудын дэмжлэгийг net/zebra
багц хангадаг. GateD® зэрэг арилжааны
бүтээгдэхүүнүүд бас илүү төвөгтэй сүлжээний чиглүүлэлтийн шийдлүүдэд
зориулагдсан байдаг.
Бид дараах сүлжээтэй байна гэж төсөөлье:
Энэ тохиолдолд RouterA
нь Интернэт уруу
гарах чиглүүлэгч маягаар ажиллаж байгаа бидний FreeBSD машин байна.
Энэ нь анхдагч чиглүүлэлтээ 10.0.0.1
гэж тохируулсан бөгөөд ингэснээр гаднах ертөнц уруу холбогдох боломжийг
олгоно. Бид RouterB
нь зөв тохируулагдсан бөгөөд
хаа явах хэрэгцээтэй газраа хэрхэн хүрэхээ мэддэг гэж үзэх болно. (Энэ нь
зураг дээр хялбар юм. Ердөө л RouterB
дээр 192.168.1.1
-г гарц болгон анхдагч чиглүүлэлт
нэмнэ.)
Хэрэв бид RouterA
-ийн чиглүүлэлтийн хүснэгтийг
харвал доор дурдсантай төстэйг харах болно:
%
netstat -nr
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
default 10.0.0.1 UGS 0 49378 xl0
127.0.0.1 127.0.0.1 UH 0 6 lo0
10.0.0.0/24 link#1 UC 0 0 xl0
192.168.1.0/24 link#2 UC 0 0 xl1Энэ үеийн чиглүүлэлтийн хүснэгттэй байхад RouterA
нь
бидний Internal Net 2 буюу дотоод сүлжээ 2 уруу хүрч чадахгүй байх болно.
Энэ нь 192.168.2.0/24
-ийн хувьд
чиглүүлэлтгүй байна. Үүнийг арилгах нэг арга нь гараар чиглүүлэлт нэмэх явдал юм.
Дараах тушаал нь RouterA
-ийн чиглүүлэлтийн хүснэгтэд
192.168.1.2
-г дараагийн зөрлөг (hop)
болгон ашиглан Internal Net 2 сүлжээг нэмэх болно:
#
route add -net 192.168.2.0/24 192.168.1.2
Одоо RouterA
нь 192.168.2.0/24
сүлжээн дэх дурын хост уруу хүрч чадна.
Дээрх жишээ нь ажиллаж байгаа систем дээр статик чиглүүлэлтийг
тохируулахад төгс төгөлдөр юм. Гэхдээ нэг асуудал нь таны FreeBSD машин
дахин ачаалахад чиглүүлэлтийн мэдээлэл үлдэхгүй байх явдал юм.
Статик чиглүүлэлтийг байнга байлгахын тулд түүнийг /etc/rc.conf
файлд нэмнэ:
static_routes
тохиргооны хувьсагч нь
зайгаар тусгаарлагдсан үгнүүдийн жагсаалт юм. Үг бүр чиглүүлэлтийн нэрийг
заана. Бидний жишээн дээр static_routes
мөрөнд
бид зөвхөн нэг үгтэй байна. Энэ нь internalnet2
юм. Бид дараа нь route(8) тушаалд өгөх бүх тохиргооны нэмэлт өгөгдлүүдийг
route_
гэгдсэн тохиргооны хувьсагчийн хамтаар нэмнэ. Бидний жишээний хувьд бид ийм
тушаал ашиглаж болно:internalnet2
#
route add -net 192.168.2.0/24 192.168.1.2
тэгэхээр бидэнд "-net 192.168.2.0/24 192.168.1.2"
хэрэгтэй.
Дээр дурдсанаар бид static_routes
мөрөнд нэгээс
илүү үгс оруулж болно. Энэ нь бидэнд олон статик чиглүүлэлтүүд үүсгэх боломжийг
олгоно. Дараах мөрүүд нь 192.168.0.0/24
болон 192.168.1.0/24
сүлжээний хувьд статик чиглүүлэлтүүдийг
санаандаа төсөөлсөн чиглүүлэгч дээрээ нэмж байгаа жишээг үзүүлж байна:
Бид гаднах ертөнц уруу чиглэсэн өөрсдийн чиглүүлэлтүүдийг хэрхэн тодорхойлох талаар ярилцсан боловч гаднах ертөнц хэрхэн биднийг олох талаар хэлэлцээгүй билээ.
Чиглүүлэлтийн хүснэгтүүдийг тухайн нэг хаягийн талбарын (бидний жишээн дээр C ангиллын дэд сүлжээ) бүх урсгал тэр сүлжээний тухайн нэг хост уруу илгээгдэж тэр нь пакетуудыг дотогшоо дамжуулдгаар тохируулж болно гэдгийг бид мэдэж байгаа билээ.
Та өөрийн сайтдаа заагдсан хаягийн талбарыг авах үед таны үйлчилгээ үзүүлэгч өөрсдийн чиглүүлэлтийн хүснэгтүүдийг таны дэд сүлжээнд зориулагдсан бүх урсгал таны PPP холбоосоор таны сайт уруу илгээгддэгээр тохируулах болно. Гэхдээ улс даяар байх бусад сайтууд таны ISP уруу илгээхээ яаж мэдэх вэ?
Бүх заагдсан хаягийн талбаруудыг хянаж Интернэтийн үндсэн сүлжээ уруу холбогдох холболтын цэгийг тодорхойлдог систем (тараагдсан DNS-ийн мэдээлэлтэй бараг адил) байдаг. «Backbone» буюу «гол нуруу (үндсэн сүлжээ)» нь улс даяар болон дэлхий даяар Интернэтийн урсгалыг зөөвөрлөж байдаг гол шугамнууд юм. Гол нуруу машин бүр мастер хүснэгтүүдийн хуулбартай байдаг бөгөөд эдгээр хүснэгтүүд нь тухайн нэг сүлжээнд зориулсан урсгалыг онцгой гол нуруу зөөвөрлөгч уруу чиглүүлж тэндээсээ доош бусад үйлчилгээ үзүүлэгчдээр дамжин таны сүлжээнд хүрдэг.
Үндсэн (гол нуруу) сайтууд уруу зарлаж тэдгээр нь таны сайтын хувьд холболтын цэг (буюу орох зам) гэж тодорхойлох нь таны үйлчилгээ үзүүлэгчийн үүрэг юм. Үүнийг чиглүүлэлтийн тархалт гэж нэрлэдэг.
Заримдаа чиглүүлэлтийн тархалт асуудалтай бөгөөд зарим нэгэн сайтууд өөр уруу чинь холбогдож чадахгүй байж болно. Чиглүүлэлт хаана ажиллахгүй болж байгааг олоход тус болох магадгүй хамгийн ашигтай тушаал нь traceroute(8) тушаал юм. Хэрэв та алсын машин уруу холбогдож чадахгүй юм шиг байвал (өөрөөр хэлбэл ping(8) амжилтгүй болвол) энэ нь бас адил ашигтай байдаг.
traceroute(8) тушаалыг таны холбогдохыг оролдож байгаа алсын хостын нэртэй ажиллуулдаг. Энэ нь гарц хостуудыг оролдлого хийж байгаа замын хамтаар харуулдаг бөгөөд эцсийн хост уруу хүрэх юм уу эсвэл холболтын асуудлаас болоод эцсийн хост уруугаа хүрэлгүйгээр ажиллаж дуусдаг.
Дэлгэрэнгүй мэдээллийг traceroute(8)-ийн гарын авлагын хуудаснаас үзнэ үү.
FreeBSD нь multicast програмууд болон multicast чиглүүлэлтийг угаасаа дэмждэг. Multicast програмууд нь FreeBSD-ийн ямар нэг тусгай тохиргоо шаарддаггүй; програмууд нь шууд л ажилладаг. Multicast чиглүүлэлт нь дэмжлэгийг цөмд эмхэтгэхийг шаарддаг:
Мөн multicast чиглүүлэлтийн дэмон mrouted(8) нь
туннелиуд болон DVMRP-г үүсгэхээр
/etc/mrouted.conf
файлын тусламжтай
тохируулагдсан байх ёстой. Multicast тохиргооны талаар дэлгэрэнгүй
мэдээллийг mrouted(8)-ийн гарын авлагын хуудаснаас олж
болно.
mrouted(8) multicast чиглүүлэлтийн
демон нь DVMRP
multicast чиглүүлэлтийн протоколыг хэрэгжүүлдэг бөгөөд үүнийг
ихэнх multicast суулгацуудад pim(4)-р ихэвчлэн сольсон
байдаг. Холбогдох map-mbone(8) болон mrinfo(8)
хэрэгслүүд нь FreeBSD-ийн портын
цуглуулгад net/mrouted
портод
байгаа болно.
Энэ болон бусад баримтуудыг ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ хаягаас татаж авч болно.
FreeBSD-ийн талаар
<questions@FreeBSD.org>
хаягтай холбоо барихаасаа өмнө
баримтыг уншина уу.
Энэ бичиг баримттай холбоотой асуулт байвал
<doc@FreeBSD.org>
хаягаар цахим захидал явуулна уу.
Энэ бичиг баримтын орчуулгатай холбоотой асуулт байвал
<admin@mnbsd.org>
хаягаар цахим захидал явуулна уу.