Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Администрирование *NIX систем > Переходим с ifconfig и route на iproute2 |
Автор: simanyay 13.12.2004, 15:41 |
Данная статья написана http://marat.phattakhoff.com/ и впервые опубликована на форуме http://forum.const.uz. Я публикую её здесь с разрешения автора. Многие привыкли работать с помощью ifconfig и route. Однако новые дистрибутивы всё чаще используют iproute2 в своих стандартных скриптах, к тому же возможностей старых утилит уже недостаточно чтобы строить сеть на Linux-маршрутизаторах. Известно, что ifconfig служит для настройки ip-адресов на сетевом интерфейсе, а так же и для просмотра этих настроек. А команда route настраивает маршрутизацию. Всё это можно заменить лишь одной утилитой ip. Буду показывать только примеры, надеясь, что читатель знает синтаксис ifconfig, route и имеет примерное представление о ip. Пока рассмотрим только замену ifconfig, команду route оставим на следующий раз. Поднимаем IP-адрес на сетевом интерфейсе: 192.168.0.1, маска 255.255.255.0, сеть: 192.168.0.0/24, где 192.168.0.0 -- начало сети, а 192.168.0.255 -- конец сети, или бродкаст. Название сетевого интерфейса, к примеру -- eth0 ifconfig eth0 192.168.0.1 netmask 255.255.255.0 broadcast 192.168.0.255 можно с лёгкостью заменить на: ip l s eth0 up -- поднимаем интерфейс eth0 (идентична ifconfig eth0 up) ip a a 192.168.0.1/24 brd + dev eth0 (добавляем IP-адрес на интерфейс 192.168.0.1, с маской /24 == 255.255.255.0, бродкаст (brd) вычисляем автоматически (+), и устройство -- eth0). ifconfig eth0 down -- опускаем интерфейс (однако все айпишники остануться) заменяем на: ip a f dev eth0 -- удаляем все IP-адреса на интерфейсе (если просто опустить интерфейс с помощью ifconfig, то IP-адреса сохраняться, тоесть если сразу после ifconfig eth0 down, запустить ifconfig eth0 up -- то IP-адреса будут прежние. Это хорошо, но не всегда, т.к. может привести к путанице, именно поэтому в iproute2 желательно удалять все айпишники). ip l s eth0 down -- опускаем уже сам интерфейс. Немного сложноватый синтаксис, плюс ещё сокращения до одной буквы путают, но если хорошо знать синтаксис -- всё просто супер. Теперь пробуем другую IP-сеть и другую маску: ifconfig eth0 217.29.124.1 netmask 255.255.255.248 broadcast 217.29.124.7 будет выглядеть: ip l s eth0 up -- поднимаем сам интерфейс ip a f dev eth0 -- удаляем на нём все айпишники, на всякий пожарный ip a a 217.29.124.1/29 brd + dev eth0 -- поднимаем сам айпишник. Тут сеть 255.255.255.248 принимает вид /29. С сетями /30 или 255.255.255.252 всё выглядит аналогично ifconfig eth0 217.29.127.161 netmask 255.255.255.252 broadcast 217.29.127.163 ip a a 217.29.127.161/30 brd + dev eth0 Итак -- если всё понятно, то идём дальше. Как будет выглядить в iproute2 команда, типа: ifconfig eth0:test 10.10.10.1 netmask 255.255.255.0 broadcast 10.10.10.255 ? А очень просто: ip a a 10.10.10.1/24 brd + dev eth0 label eth0:test Заметили, что название интерфейса повторяется дважды?.. Где указывается устройство и сам алиас (label). К тому же есть ограничение на название алиаса (в данном случае test), т.е. того слова, что идёт после двоеточия - в 11 символов. Разумеется там не должно быть никаких символов, кроме /А-Яа-яЕё_A-Za-z0-9/. Тоесть никаких пробелов и т.п. Однако поддерживаются русские буквы и символ подчёркивания wink.gif : ip a a 10.50.50.1/24 brd + dev eth0 label eth0:русскиё_бук Проверить, получилось ли ввести такую команду, можно так: root@bgp:~# ip a l dev eth0 label eth0:русскиё_бук inet 10.50.50.1/24 brd 10.50.50.255 scope global eth0:русскиё_бук Очень прикольно в этом случае показывает данные ifconfig: eth0:русс Link encap:Ethernet HWaddr 00:40:95:1A:7A:A9 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:5 Base address:0x260 Однако уже удалить он не сможет: root@bgp:~# ifconfig eth0:русс down SIOCSIFFLAGS: Cannot assign requested address root@bgp:~# ifconfig eth0:русскиё_бук down SIOCSIFFLAGS: Cannot assign requested address Тоже и с латиницей. Проблема в том, что ifconfig сам имеет ограничение в 10 символов: root@bgp:~# ip a a 10.40.40.1/24 brd + dev eth0 label eth0:русские_бк root@bgp:~# ip a a 10.41.41.1/24 brd + dev eth0 label eth0:английские root@bgp:~# ifconfig eth0:английские;ifconfig eth0:русские_бк eth0:англ Link encap:Ethernet HWaddr 00:40:95:1A:7A:A9 inet addr:10.41.41.1 Bcast:10.41.41.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:5 Base address:0x260 eth0:русс Link encap:Ethernet HWaddr 00:40:95:1A:7A:A9 inet addr:10.40.40.1 Bcast:10.40.40.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:5 Base address:0x260 root@bgp:~# ifconfig eth0:английские down;ifconfig eth0:русские_бк down Как видите, можно и поизвращаться, если, конечно же, у Вас локаль настроена нормально wink.gif. Теперь остаётся последняя возможность ifconfig'а, которую многие не помнят, как реализовать в iproute2 -- это pointopoint: root@bgp:~# ifconfig eth0:ptp 172.16.19.1 pointopoint 192.168.0.1 netmask 255.255.255.255 root@bgp:~# ifconfig eth0:ptp eth0:ptp Link encap:Ethernet HWaddr 00:40:95:1A:7A:A9 inet addr:172.16.19.1 Bcast:172.16.255.255 Mask:255.255.255.255 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:5 Base address:0x260 root@bgp:~# route -n|grep 192.168.0.1 192.168.0.1 0.0.0.0 255.255.255.255 UH 0 0 0 eth0 root@bgp:~# ip r|grep 192.168.0.1 192.168.0.1 dev eth0 proto kernel scope link src 172.16.19.1 Линк на 192.168.0.1 от 172.16.19.1 поднялся. Теперь рассмотрим это в iproute2: root@bgp:~# ip a a 172.16.19.1/32 peer 192.168.0.1/32 brd + dev eth0 label eth0:ptp Проверяем с помощью тех же команд -- результат идентичный. Теперь перейдём к проверке конфигурации. В случае с ifconfig достаточно лишь набрать его без параметров: root@bgp:~# ifconfig eth0 Link encap:Ethernet HWaddr 00:40:95:1A:7A:A9 inet addr:192.168.0.1 Bcast:192.168.0.3 Mask:255.255.255.252 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:24 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 cool.gif TX bytes:2880 (2.8 Kb) Interrupt:5 Base address:0x260 eth0:ptp Link encap:Ethernet HWaddr 00:40:95:1A:7A:A9 inet addr:172.16.19.1 Bcast:0.0.0.0 Mask:255.255.255.255 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:5 Base address:0x260 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:42 errors:0 dropped:0 overruns:0 frame:0 TX packets:42 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:3523 (3.4 Kb) TX bytes:3523 (3.4 Kb) В случае с ip, тоже достаточно набрать его практически без параметров: root@bgp:~# ip a 1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo 2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:40:95:1a:7a:a9 brd ff:ff:ff:ff:ff:ff inet 192.168.0.1/30 brd 192.168.0.3 scope global eth0 inet 172.16.19.1 peer 192.168.0.1/32 scope global eth0:ptp Соответствие видно? 127.0.0.1/8 == 127.0.0.1 mask 255.0.0.0, 192.168.0.1/30 brd 192.168.0.3 == 192.168.0.1 mask 255.255.255.252 bcast 192.168.0.255 и т.д. Итак, практически все возможности команды ifconfig мы заменили с помощью одной лишь единственной команды ip, которая кроме поднятия интерфейсов, ещё управляет и маршрутами и тунелями. Достоинства -- достаточно изучить лишь синтаксис одной этой утилиты и получаем огромные возможности. Недостатки -- сложный, для начинающего, синтаксис. P.S. Сокращения iproute2: ip a -- ip addr -- работа с IP-адресами на интерфейсах ip r -- ip route -- работа с маршрутами ip ru -- ip rule -- работа с правилами (таблицами) маршрутов ip l s eth0 up -- ip link set eth0 up -- поднимаем сетевой интерфейс eth0 ip a a -- ip addr add -- добавляем IP-адрес ip a d -- ip addr del -- удаляем IP-адрес ip a f -- ip addr flush -- очищаем все IP-адреса ip r a -- ip route add -- добавляем маршрут ip r d -- ip route del -- удаляем маршрут |
Автор: DENNN 16.12.2004, 13:30 | ||
- Тбилиси лучше, чем Ереван! - Чем лучше? - Чем Ереван! Собственно тоже очень похожие высказывания. Если гворить о простейшем роутинге, то утилит в любой POSIX-совместимой системе хватает уже последние несколько десятков лет. Если же человек собрался ставить магистральный маршрутизатор с поддержкой QoS, приоритетом маршрутов и т.п., то для таких вещей существуют серьезные решения для больших дядек (BGP/Zebra, железо от CISCO) а никак не утилита iproute2 |
Автор: Марат Фаттахов 17.12.2004, 12:41 | ||||
В условиях провайдеров, для которых циска дороговата, тратить 2.5 штуки евро на собственную сеть и BGP дорого, но сеть достаточно большая и развлетвлённая, iproute2 подходит идеально. К примеру сделай на ifconfig и route балансировку каналов между двумя провайдерами. Только если писать скрипт какой-нибудь заумный. |
Автор: DENNN 17.12.2004, 12:49 | ||||
Скрипт не заумный, вопрос в производительности. А чем зебра не устраивает? Вообще же, по поводу,
согласитесь, это вопрос не технический а коммерческий. Есть провайдеры, которые хотели бы строить большие сети, но не желают/не могут/не имеют возможности тратиться на простейшее активное сетевое оборудование. Мы же не будем их тоже равнять с хорошими сетями? |
Автор: Марат Фаттахов 17.12.2004, 13:10 | ||||||
Зебра устраивает, внутри можно и по OSPF работать, однако в iproute2 лично мне удобнее ;) А критерий цена/качество во многом зависит от руководства провайдера, они же хотят гигабитные сети по всему городу, а потратить на это только 100 штук зелени. И то говорят много ;) Вот и приходиться строить сеть не на цисках, как надо, а на линукс серверах, вот тут уже и выручает iproute2. |
Автор: DENNN 17.12.2004, 18:47 | ||||
Хотя истина была в начале ответа
![]() |
Автор: Secandr 18.12.2004, 09:21 |
А чего может не хватать в ifconfig и route ? Сколько пользуюсь - всегда хватало. А циски разные бывают и не обязательно 100 000$ |
Автор: Марат Фаттахов 18.12.2004, 10:12 |
ну если провайдер не может купить свитч с поддежкой виланов за $400, тогда о цисках приходится только мечтать ;) а в серверах, где нет навороченной маршрутизции (например для веб-серверов) действительно хватает ifconfig+route. А вот когда уже чувствуешь, что не хватает, тогда уже и юзаешь iproute2. Добавлено @ 10:13 Ладно, тут идёт обсуждение надо это или не надо. Кому надо -- тот так и так будет использовать. Тут другой вопрос более востребован, всё ли правильно я там описал?.. Нет ли ошибок? И чего важного я забыл? |
Автор: KIM 8.9.2005, 15:47 | ||
не знаю как нащёт забыл не зыбыл но для меня эта инфа просто как громом по лбу ... супер ![]() огромный тнкс ![]() ![]() |
Автор: Гость_Марат Фаттахов 23.10.2005, 17:48 |
блин прикол ;) прошел почти год с момента написания статьи, перечитав её только что заново, я много узнал и вспомнил ;), например про ограничение на кол-во символов в алиасах ;) |
Автор: bilbobagginz 24.10.2005, 10:15 |
Марат, а ты чего так редко сюда заглядываешь ? ты такую статью хорошую написал... я ее уже в FAQ мечу.... ( правда FAQ еще не фурычит ) или уже "все что можно узнать - узнал" и вопросов нет? давай, подбрасывай вопросики хотя бы иногда.. а то тут люди чего-то интересные вопросы редко спрашивают. удачи. |