اگر در مطالب پیشینم دقت کرده باشید سعی در نخ دادن و ماهی گیری یاد دادن بودن نه در ماهی دادن و یا نوشتن یک tutroial ساده که اینترنت پراست. قرار است که در این سایت مطالبی مربوط به low level networking نوشته شود که با ماژول ip_conntack شروع شد. این قسمت خواستم از vlan ها بگویم تصمیمم برگشت برروی bridge و دیدم تا وقتی دستور ip را نگفتم بهتر است آن دو را نگویم و با این فرمان قدرتمند شروع کنم و وقتی دیدم به جای فرمان ip به طور کامل بر روی iproute2 تمرکز کنم یک خروجی خوب از این مطلب بیرون میاید. اما ملزم صبر و حوصله خواننده عزیز میباشد که در چند شماره به iproute2 پرداخت شود.
۱. هویت بسته iproute2
این بسته از linux 2.2 به آن اضافه شد و درواقع به عنوان جایگزینی برای net-tools معرفی شد. با پیشرفت زمان به دستورات و امکانات آن اضافه شد. به دو خروجی زیر توجه کنید:
1 2 3 4 5 6 7 8 9 10 11 12 |
root@debian:/home/mohsen# dpkg -L net-tools |grep bin |grep -v bin$ |grep -v sbin$ /usr/sbin/arp /sbin/ifconfig /sbin/nameif /sbin/plipconfig /sbin/rarp /sbin/route /sbin/slattach /sbin/ipmaddr /sbin/iptunnel /sbin/mii-tool /bin/netstat |
همانطور که دیدید بسته net-tools که سالهاست در حال استفاده از آن میباشیم دارای فرمانهای بالا میباشد. که در جلوتر برخی از آنها توضیح داده خواهند شد.
خروجی زیر نشان میدهد iproute2 از net-tools بیشتر فرمان دارد اما این مهم نیست، بلکه امکاناتی که iproute2 دارد مهم است:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
root@debian:/home/mohsen# dpkg -L iproute2 |grep bin |grep -v bin$ |grep -v sbin$ /bin/ss /bin/ip /sbin/rtmon /sbin/tc /sbin/rtacct /sbin/bridge /usr/sbin/arpd /usr/bin/lnstat /usr/bin/nstat /usr/bin/routel /usr/bin/routef /sbin/ip /usr/bin/rtstat /usr/bin/ctstat |
تذکر: به تصور غلط پنداشته شده که فرمان tc همراه iptables می باشد.
۲. طرز استفاده از فرمانهای iproute2
همه آنها همانند یکدیگر هستند. ما فرمان ip را به عنوان مثال برگزیدیم.اولین چیزی که از سر و روی این فرمان در manual page آن پیداست کلی Object دارد که هرکدام برای خود داستانیست پس بهتر است به نوعی از help گرفتن CISCO ی در این فرمان استفاده نمایید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
mohsen@debian:~$ ip route help Usage: ip route { list | flush } SELECTOR ip route save SELECTOR ip route restore ip route showdump ip route get ADDRESS [ from ADDRESS iif STRING ] [ oif STRING ] [ tos TOS ] [ mark NUMBER ] ip route { add | del | change | append | replace } ROUTE SELECTOR := [ root PREFIX ] [ match PREFIX ] [ exact PREFIX ] [ table TABLE_ID ] [ proto RTPROTO ] [ type TYPE ] [ scope SCOPE ] ROUTE := NODE_SPEC [ INFO_SPEC ] NODE_SPEC := [ TYPE ] PREFIX [ tos TOS ] [ table TABLE_ID ] [ proto RTPROTO ] [ scope SCOPE ] [ metric METRIC ] INFO_SPEC := NH OPTIONS FLAGS [ nexthop NH ]... NH := [ via ADDRESS ] [ dev STRING ] [ weight NUMBER ] NHFLAGS OPTIONS := FLAGS [ mtu NUMBER ] [ advmss NUMBER ] [ rtt TIME ] [ rttvar TIME ] [ reordering NUMBER ] [ window NUMBER] [ cwnd NUMBER ] [ initcwnd NUMBER ] [ ssthresh NUMBER ] [ realms REALM ] [ src ADDRESS ] [ rto_min TIME ] [ hoplimit NUMBER ] [ initrwnd NUMBER ] [ quickack BOOL ] TYPE := [ unicast | local | broadcast | multicast | throw | unreachable | prohibit | blackhole | nat ] TABLE_ID := [ local | main | default | all | NUMBER ] SCOPE := [ host | link | global | NUMBER ] NHFLAGS := [ onlink | pervasive ] RTPROTO := [ kernel | boot | static | NUMBER ] TIME := NUMBER[s|ms] BOOL := [1|0] |
نکته: پس به همین روال که دیده شد، میتوان بهترین help موجود را اخذ کرد.
نکته: در جلوتر خیلی از کلمات ممکن است مخفف شوند. تعجب نکنید این خاصیت فرمان مذکور است.
به عنوان مثال ۲ فرمان زیر یکی هستند:
1 2 3 4 5 6 7 8 9 |
root@debian:/home/mohsen# ip neighbour show 192.168.1.11 dev eth0 lladdr 08:00:27:c7:b0:08 STALE 192.168.1.1 dev eth0 lladdr 00:26:75:5d:2a:2e REACHABLE 192.168.1.14 dev eth0 lladdr 08:00:27:93:23:6e STALE root@debian:/home/mohsen# ip n show 192.168.1.11 dev eth0 lladdr 08:00:27:c7:b0:08 STALE 192.168.1.1 dev eth0 lladdr 00:26:75:5d:2a:2e REACHABLE 192.168.1.14 dev eth0 lladdr 08:00:27:93:23:6e STALE |
این فرمان کش arp را نمایش میدهد:
1 2 3 4 |
root@debian:/home/mohsen# arp -a dev32 (192.168.1.11) at 08:00:27:c7:b0:08 [ether] on eth0 ? (192.168.1.1) at 00:26:75:5d:2a:2e [ether] on eth0 ? (192.168.1.14) at 08:00:27:93:23:6e [ether] on eth0 |
همانطور که دید خروجی فرمان arp و دستورات بالا یکی بود.
اگر در (8)ip هم که ببینید لیست Object های این دستور آمده است:
1 |
OBJECT := { link | addr | addrlabel | route | rule | neigh | ntable | tunnel | tuntap | maddr | mroute | mrule | monitor | xfrm | netns | l2tp | tcp_metrics } |
منظور از این Object ها انواع کارهایی است که دستور ip قابلیت مانور بر روی آنان را دارد و همگی بعد از خود این فرمان شروع می شوند:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
root@debian:/home/mohsen# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 18:03:73:60:b4:4e brd ff:ff:ff:ff:ff:ff inet 192.168.1.4/24 brd 192.168.1.255 scope global eth0 valid_lft forever preferred_lft forever inet 192.168.1.147/24 brd 192.168.1.255 scope global secondary eth0 valid_lft forever preferred_lft forever inet6 fe80::1a03:73ff:fe60:b44e/64 scope link valid_lft forever preferred_lft forever 3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 38:59:f9:42:98:33 brd ff:ff:ff:ff:ff:ff root@debian:/home/mohsen# ip link 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 18:03:73:60:b4:4e brd ff:ff:ff:ff:ff:ff 3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ether 38:59:f9:42:98:33 brd ff:ff:ff:ff:ff:ff root@debian:/home/mohsen# ip route default via 192.168.1.1 dev eth0 169.254.0.0/16 dev eth0 scope link metric 1000 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.4 |
و الی آخر….!
نکته: مخفف سازی فراموش نشود:
1 2 3 |
root@debian:/home/mohsen# ip a root@debian:/home/mohsen# ip l root@debian:/home/mohsen# ip r |
۳. اتصال به شبکه از طریق فرمان ip
ممکن است سؤال پیش بیاید که چرا به صورت permanent بحث ذخیره IP نمیگردد، خوب سؤال به جایی است، ولی مسلماً در حالت عادی هر کاربری نیاز به کار کردن با ip address، routing table و سایر اقلام دارد. اما در حالت permanent اگر کل دیستروها رو بر دو نوع خانواده تقسیم کنیم، مسیر ذخیره IP Address ها در این دونوع خانواده با یکدیگر فرق دارد:
-
خانواده redhat-base ها: دایرکتوری /etc/sysconfig/network-scripts/ شامل فایلهای پیکربندی interface ها میباشد.
-
خانواده debian-base ها: فایل etc/network/interfaces/ شامل پیکربندی کل interface ها میباشد.
دلیل دوم هم کار کردن ما با این فرمان میباشد تا بیشتر با آن آشنا شویم. البته کاربر در حالت عادی به آن خیلی نیاز دارد.
تذکر: در پارامترهای فرمان ip پارامتر dev اینترفیس را مشخص میکند.
فرمان زیر را در net-tools در نظر بگیرید:
1 |
root@debian:/home/mohsen# ifconfig eth0 192.168.1.20 netmask 255.255.255.0 |
همین فرمان به صورت زیر نوشته می شود:
1 2 |
root@debian:/home/mohsen# ip addr flush dev eth0 root@debian:/home/mohsen# ip addr add 192.168.1.21/24 dev eth0 |
تذکر: برای تعریف default gateway در net-tools از فرمان زیر استفاده میکردیم:
1 |
root@debian:/home/mohsen# route add default gw 192.168.1.1 |
اما در iproute2 از فرمان زیر استفاده میکنیم:
1 |
root@debian:/home/mohsen# ip route add default via 192.168.1.1 dev eth0 |
همانطور که میبینید routing table تغییر کرده است:
1 2 3 |
root@debian:/home/mohsen# ip r default via 192.168.1.1 dev eth0 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.21 |
تذکر: در اول کار ما اینترفیس eth0 رو با flush عاری از هر گونه ip address کردیم. اینگونه کلمات مانند show، dev، via و یا add و غیره که نعدادشان کم نیست به صورت عمومی استفاده میشوند. پس نیازی به حفظ کردن نوشتن یک خط کامل نیست فقط کافیست معانی این کلمات را بدانیم.
در شمارههای بعدی به صورت جدی چه با فرمان ip و یا با فرمانهای دیگر برخورد میکنیم. یک دستگرمی ساده بود.
خیلی خوب بود. مشتاق مباحث بعدی شبکه هستیم.