2008-10-28

маленькое издевательство с eigrp

у eigrp есть такая фича - goodbye пакет. он позволяет роутеру штатно завершащему работу протокола предупредить соседей о своем уходе.
как он работает? очень просто - в хелло пакете устанавливаются все К-коефициенты в 255.

теперь вопрос, что будет если на живом роутере их всех установить в 255? :)

эксперимент:
два соседних роутера, R0 (10.255.1.0/31), R1 (20.255.1.1/31)

1) только на одном из соседей

R1(config)# router eigrp 1
R1(config-router)# metric weights 0 255 255 255 255 255

результат:

R0#
*Mar 1 00:07:51.207: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 1: Neighbor 10.255.1.1 (Serial0/0) is down: Interface Goodbye received
*Mar 1 00:07:55.515: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 1: Neighbor 10.255.1.1 (Serial0/0) is down: Interface Goodbye received
*Mar 1 00:08:00.107: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 1: Neighbor 10.255.1.1 (Serial0/0) is down: Interface Goodbye received
*Mar 1 00:08:00.163: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 1: Neighbor 10.255.1.1 (Serial0/0) is down: Interface Goodbye received

"пока, пока, пока..." :)
прям-таки goodbye protocol :)

R1(config-router)#
*Mar 1 00:08:04.179: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 1: Neighbor 10.255.1.0 (Serial0/0) is down: K-value mismatch
*Mar 1 00:08:08.699: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 1: Neighbor 10.255.1.0 (Serial0/0) is down: K-value mismatch
*Mar 1 00:08:13.083: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 1: Neighbor 10.255.1.0 (Serial0/0) is down: K-value mismatch
*Mar 1 00:08:17.639: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 1: Neighbor 10.255.1.0 (Serial0/0) is down: K-value mismatch

ну а тут все ок - коефициенты-то реально не совпадают.

2) на обоих :)


R0(config)#router eigrp 1
R0(config-router)#metric weights 0 255 255 255 255 255
R0(config-router)#^Z
R0#
*Mar 1 00:09:03.291: %SYS-5-CONFIG_I: Configured from console by console
*Mar 1 00:09:05.679: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 1: Neighbor 10.255.1.1 (Serial0/0) is up: new adjacency


R1#
*Mar 1 00:09:02.247: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 1: Neighbor 10.255.1.0 (Serial0/0) is up: new adjacency

все ок. в чем же тогда подвох?

3) проверим как работает goodbye в случаях 0 и 2

R1(config)#no router eigrp


R0#
*Mar 1 00:13:14.439: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 1: Neighbor 10.255.1.1 (Serial0/0) is down: holding time expired

вернем К-коефициенты обратно

R1(config)#router eigrp 1
R1(config-router)#network 0.0.0.0
R1(config-router)#defaule metric weights


R0(config)#router eigrp 1
R0(config-router)#network 0.0.0.0
R0(config-router)#defaule metric weights
*Mar 1 00:13:44.767: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 1: Neighbor 10.255.1.1 (Serial0/0) is up: new adjacency
R0(config-router)#no router eigrp 1


R1#
*Mar 1 00:15:54.079: %DUAL-5-NBRCHANGE: IP-EIGRP(0) 1: Neighbor 10.255.1.0 (Serial0/0) is down: Interface Goodbye received


мило не правда ли? :)

2008-10-18

метрики eigrp

метрики eigrp - тема очень интересного разговора :)
ведь именно они - одно из "сильных" преимуществ данного протокола.

пройдемся по типовым заблуждениям :)
для примера будем рассматривать все применительно к следующей топологии:

между R0 и R1 два линка - езернет и последовательный.

1) мту используеться в качестве компонента метрики

бытует заблуждение что метрик 5:
* минимальная пропускная
* суммарная задержка
* загруженность
* надежность
* мту
и что каждой метрике соответствует K-коефициент
естественно что ЭТО НЕ ТАК :)
формула расчета метрики следующая:

Metric = 256*([K1*Bw + K2*Bw/(256-Load) + K3*Delay]*[K5/(Reliability + K4)])

ну и кто здесь увидел мту? :)
и кто сказал что К5 связан с мту? :)

2) еигрп не использует хопкаунт

естественно, хопкаунт не используется для _численного_ влияния на метрику. но он используеться для ограничения диаметра домена еигрп. кроме того, испытания показали, что если все к-коефициенты обнулить, еигрп эффективно превращаеться в рипв2 :) и использует только хопкаунт для сравнения маршрутов и предотвращения лупов :)
хопкаут передаеться и храниться для каждого маршрута:
осед анонсирует маршрут на свой лупбек 10.2.1.0/24.

R1#sh ip eigrp to 10.2.1.0/24
IP-EIGRP (AS 1): Topology entry for 10.2.1.0/24
State is Passive, Query origin flag is 1, 1 Successor(s), FD is 2297856
Routing Descriptor Blocks:
10.255.12.2 (Serial0/1), from 10.255.12.2, Send flag is 0x0
Composite metric is (2297856/128256), Route is Internal
Vector metric:
Minimum bandwidth is 1544 Kbit
Total delay is 25000 microseconds
Reliability is 255/255
Load is 1/255
Minimum MTU is 1500
Hop count is 1


3) еигрп динамически определяет задержки

кое-где в материалах по еигрп пишеться что для измерения метрики еигрп использует следующее число


R1#sh ip ei ne
IP-EIGRP neighbors for process 1
H Address Interface Hold Uptime SRTT RTO Q Seq
(sec) (ms) Cnt Num
1 10.255.12.2 Se0/1 14 00:43:38 291 1746 0 4
0 10.255.1.0 Se0/0 11 01:05:01 96 576 0 30


но это легко опровергнуть. у R1 есть сосед 10.255.12.2. сосед анонсирует маршрут на свой лупбек 10.2.1.0/24.

R1#sh ip eigrp to 10.2.1.0/24
IP-EIGRP (AS 1): Topology entry for 10.2.1.0/24
State is Passive, Query origin flag is 1, 1 Successor(s), FD is 2297856
Routing Descriptor Blocks:
10.255.12.2 (Serial0/1), from 10.255.12.2, Send flag is 0x0
Composite metric is (2297856/128256), Route is Internal
Vector metric:
Minimum bandwidth is 1544 Kbit
Total delay is 25000 microseconds
Reliability is 255/255
Load is 1/255
Minimum MTU is 1500
Hop count is 1

srtt=291мс
суммарный делей=25мс
неправда ли странно? :)

зато оно сходиться с следующими расчетами:
1) 10.255.12.2 анонсирует маршрут лупбека.

R2#sh int lo1 | in address|DLY
Internet address is 10.2.1.1/24
MTU 1514 bytes, BW 8000000 Kbit, DLY 5000 usec,

5000нс - стартовый делей
R1 прибавляет делей линка между ними:

R1#sh int s0/1 | in address|DLY
Internet address is 10.255.12.1/24
MTU 1500 bytes, BW 1544 Kbit, DLY 20000 usec,

20000нс - добавленный делей.
сумма - 25мс

возникает вопрос: от чего зависит и как измеряется параметр DLY?
ответ: он зависит только от типа интерфейса, а именно:
serial - DLY=20000
fastethernet - DLY=100
loopback - DLY=5000

4) еигрп может эффективно использовать загруженность линка для балансировки загрузки

во первых надо убедиться что еигрп реально динамически определяет загруженность, а не пользуется шаблонными значенияими:
пустим тестовый поток траффики между маршрутизаторами:
R0# ttcp receive
R2# ttcp transmit 10.0.1.1
теперь проверим на транзитном R1 результаты:

R1#sh int s0/0 | in load
reliability 255/255, txload 51/255, rxload 4/255
R1#sh int s0/1 | in load
reliability 255/255, txload 4/255, rxload 51/255

сам маршрутизатор потоки трафика "видит". а еигрп:

R1#sh ip ei to 10.0.1.0/24
IP-EIGRP (AS 1): Topology entry for 10.0.1.0/24
State is Passive, Query origin flag is 1, 1 Successor(s), FD is 896000
Routing Descriptor Blocks:
10.255.1.0 (Serial0/0), from 10.255.1.0, Send flag is 0x0
Composite metric is (2297856/128256), Route is Internal
Vector metric:
Minimum bandwidth is 1544 Kbit
Total delay is 25000 microseconds
Reliability is 255/255
Load is 56/255
Minimum MTU is 1500
Hop count is 1
R1#sh ip ei to 10.2.1.0/24
IP-EIGRP (AS 1): Topology entry for 10.2.1.0/24
State is Passive, Query origin flag is 1, 1 Successor(s), FD is 2297856
Routing Descriptor Blocks:
10.255.12.2 (Serial0/1), from 10.255.12.2, Send flag is 0x0
Composite metric is (2297856/128256), Route is Internal
Vector metric:
Minimum bandwidth is 1544 Kbit
Total delay is 25000 microseconds
Reliability is 255/255
Load is 5/255
Minimum MTU is 1500
Hop count is 1

как мы видим, нагрузка учитывается, но только txload. в принципе неплохо :)
теперь усложняем задачу :)
активируем между R0 и R1 резервный линк :)
причем, для чистоты эксперимента, делаем на обоих одинаковую пропускную (скажем по 1.5М) и задержку (ведь вы помните, для фаста она будет 0.1мс, а для последовательного 20мс :))

R0(config)#int fa1/0
R0(config-if)#band 1500
R0(config-if)#delay 10
R1(config)#int fa1/0
R1(config-if)#bandwidth 1500
R1(config-if)#delay 10

теперь, установим К-коефициент загруженности:

router eigrp 1
metric weights 0 1 1 1 0 0

и, смертельный номер, отключаем балансировку нагрузки:

router eigrp 1
maximum-paths 1

зачем все эти ухищрения? очень просто. в реальной сети приблизительно равные маршруты которые будут successor в зависимости от уровня загрузки найти не трудно, а подобрать в лабораторной топологии оптимальные значения мне лень :)
таким образом я упрощаю себе задачу для того что б рассмотреть концепцию использования загруженности

далее, проверим таблицу маршрутов на R1:

R1#sh ip ro 10.0.1.0
Routing entry for 10.0.1.0/24
Known via "eigrp 1", distance 90, metric 1713188, type internal
Redistributing via eigrp 1
Last update from 10.255.0.0 on FastEthernet1/0, 00:00:25 ago
Routing Descriptor Blocks:
* 10.255.0.0, from 10.255.0.0, 00:00:25 ago, via FastEthernet1/0
Route metric is 1713188, traffic share count is 1
Total delay is 15000 microseconds, minimum bandwidth is 1500 Kbit
Reliability 255/255, minimum MTU 1500 bytes
Loading 1/255, Hops 1
R1#sh ip eigrp to 10.0.1.0/24
IP-EIGRP (AS 1): Topology entry for 10.0.1.0/24
State is Passive, Query origin flag is 1, 1 Successor(s), FD is 1713188
Routing Descriptor Blocks:
10.255.0.0 (FastEthernet1/0), from 10.255.0.0, Send flag is 0x0
Composite metric is (1713188/257), Route is Internal
Vector metric:
Minimum bandwidth is 1500 Kbit
Total delay is 15000 microseconds
Reliability is 255/255
Load is 1/255
Minimum MTU is 1500
Hop count is 1
10.255.1.0 (Serial0/0), from 10.255.1.0, Send flag is 0x0
Composite metric is (1713188/257), Route is Internal
Vector metric:
Minimum bandwidth is 1500 Kbit
Total delay is 15000 microseconds
Reliability is 255/255
Load is 1/255
Minimum MTU is 1500
Hop count is 1

т.е. в таблице топологии есть 2 записи, и одна запись установлена в таблицу маршрутов?
тут возникает вопрос: которая из записей установлена? и как она была выбрана из 2х идентичных маршрутов?
сразу отвечу: была выбрана по _минимальному_ айпи некстхопа :)

теперь пускаем тест:

R0# ttcp receive
R1# debug ip eigtp
R2# ttcp transmit 10.0.1.1

что забавного можно пронаблюдать?
смотрите сами:

R1#sh int fa1/0 | in txload
reliability 255/255, txload 60/255, rxload 1/255
R1#sh ip ei to 10.0.1.0/24
IP-EIGRP (AS 1): Topology entry for 10.0.1.0/24
State is Passive, Query origin flag is 1, 1 Successor(s), FD is 2097188
Routing Descriptor Blocks:
10.255.0.0 (FastEthernet1/0), from 10.255.0.0, Send flag is 0x0
Composite metric is (2097188/128257), Route is Internal
Vector metric:
Minimum bandwidth is 1500 Kbit
Total delay is 15000 microseconds
Reliability is 255/255
Load is 1/255
Minimum MTU is 1500
Hop count is 1
10.255.1.0 (Serial0/0), from 10.255.1.0, Send flag is 0x0
Composite metric is (2097188/128257), Route is Internal
Vector metric:
Minimum bandwidth is 1500 Kbit
Total delay is 15000 microseconds
Reliability is 255/255
Load is 1/255
Minimum MTU is 1500
Hop count is 1

не смотря на рост txload метрика маршрута не меняеться... странно, не правда ли? :)
связанно это с механизмом обработки маршрутов в еигрп, а именно с событийным механизмом обработки маршрутов: нет события - нет пересчета.
давайте проверим:

R1(config)# int fa1/0
R1(config-if)# band 1501
...
R1#sh ip ei to 10.0.1.0/24
IP-EIGRP (AS 1): Topology entry for 10.0.1.0/24
State is Passive, Query origin flag is 1, 1 Successor(s), FD is 2096160
Routing Descriptor Blocks:
10.255.0.0 (FastEthernet1/0), from 10.255.0.0, Send flag is 0x0
Composite metric is (2096160/128257), Route is Internal
Vector metric:
Minimum bandwidth is 1501 Kbit
Total delay is 15000 microseconds
Reliability is 255/255
Load is 82/255
Minimum MTU is 1500
Hop count is 1
10.255.1.0 (Serial0/0), from 10.255.1.0, Send flag is 0x0
Composite metric is (2097188/128257), Route is Internal
Vector metric:
Minimum bandwidth is 1500 Kbit
Total delay is 15000 microseconds
Reliability is 255/255
Load is 1/255
Minimum MTU is 1500
Hop count is 1

как мы видим, мгновенно поднялся лод :)
вот и проблема - лод учитывается метрикой еигрп не сразу, а при изменении топологии либо таймере (на глазок - 10 минут).



п.с. полезные ссылки:
http://www.rhyshaden.com/eigrp.htm


to be continued...

2008-07-06

Cisco Challenge: RIP, продолжение

постановка задачи - см. предыдущий пост

существует два решения:

1) использование лупбека с адресом /32 + ip unnubered на последовательном интерфейсе
решение одобренное организаторами, хотя и противоречит правилу "не создавать дополнительных интерфейсов"

2) ppp ipcp negotiation
решение о котором я догадывался, но сумел настроить только сейчас :)

делается очень просто:

R1:

ip local pool ppp-nei 192.168.1.2

interface Serial0/0
ip address negotiated
encapsulation ppp
peer default ip address pool ppp-nei
ppp ipcp address accept

R2:

ip local pool ppp-nei 192.168.1.1

interface Serial0/0
ip address negotiated
encapsulation ppp
peer default ip address pool ppp-nei
ppp ipcp address accept

таким образом, соседи выдают друг другу адреса :)
причем благодаря ipcp, они это делают сразу с маской /32 :))

адрес получен:

R1# sh ip int bri
Interface IP-Address OK? Method Status Protocol
Serial0/0 192.168.1.1 YES IPCP up up

R2# sh ip int bri
Interface IP-Address OK? Method Status Protocol
Serial0/0 192.168.1.2 YES IPCP up up

маска /32:

R1#sh ip int s0/0
Serial0/0 is up, line protocol is up
Internet address is 192.168.1.1/32
Broadcast address is 255.255.255.255
Address determined by IPCP
Peer address is 192.168.1.2

R2#sh ip int s0/0
Serial0/0 is up, line protocol is up
Internet address is 192.168.1.2/32
Broadcast address is 255.255.255.255
Address determined by IPCP
Peer address is 192.168.1.1

неплохая подборка шпор

замечательный сайт/блог packetlife.net содержит много забавных и полезных ресурсов.

в том числе замечательную подборку "шпор":

http://packetlife.net/static/cheatsheets/bgp.pdf
http://packetlife.net/static/cheatsheets/eigrp.pdf
http://packetlife.net/static/cheatsheets/ipsec.pdf
http://packetlife.net/static/cheatsheets/ipv4-multicast.pdf
http://packetlife.net/static/cheatsheets/is-is.pdf
http://packetlife.net/static/cheatsheets/ospf.pdf
http://packetlife.net/static/cheatsheets/spanning-tree.pdf
http://packetlife.net/static/cheatsheets/common-ports.pdf
http://packetlife.net/static/cheatsheets/subnetting.pdf
http://packetlife.net/static/cheatsheets/qos.pdf
http://packetlife.net/static/cheatsheets/vlans.pdf
http://packetlife.net/static/cheatsheets/cisco-ios-versions.pdf
http://packetlife.net/static/cheatsheets/physical-terminations.pdf

шпоры не претендуют на статус универсальных знаний, но очень удобная сборка максимума полезностей на 1-2 листа а4

2008-07-05

ping record route

знаете ли вы, что маршрут в сети можно узнатьи без трейсроута, а чистым пингом? :)

для этого установим опцию Record Route:

$ ping -R 1.1.1.1
PING 1.1.1.1 (1.1.1.1) 56(124) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=1 ttl=59 time=2.70 ms
RR: 192.168.0.1
192.168.0.254
10.0.0.1
X.X.X.X
1.1.1.1
X.X.X.X
10.0.0.1
192.168.0.254
192.168.0.1

64 bytes from 1.1.1.1: icmp_seq=2 ttl=59 time=2.53 ms (same route)

--- 1.1.1.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 2.530/2.616/2.702/0.086 ms

2008-06-25

Сборка новостей

1) повышение цен на композитные экзамены:
ццна композит- 250 у.е. начиная с 24го июня
копмозип ццнп (642-892) - 300 у.е.
http://www.cisco.com/web/learning/netacad/downloads/pdf/FinalFAQ_June24_PriceChange.pdf

2) переведен 3й семестр дискавери

2008-06-15

Cisco Challenge: Tunneling

Дано:
топология на рисунке:


задача:
* left видит по cdp только right
* на роутерах фильтруется исходящий трафик протокола 47

2008-06-14

Cisco Challenge: RIP

дано:
два роутера соединены последовательным синхронным соединением ppp с частотой синхронизации 64К.

R1:
s0: 192.168.1.1/32
lo0: 172.16.1.1/24

R2: s0:192.168.1.2/32
lo0: 10.0.0.1/24

задача:
настроить адресацию и рип.

п.с. проверить можно так:
R1:
ping 10.0.0.1 source 192.168.1.1
ping 10.0.0.1 source 172.16.1.1
R2:
ping 172.16.1.1 source 192.168.1.2
ping 172.16.1.1 source 10.0.0.1

п.п.с. маска /32 - не опечатка

2008-06-08

заказ эзамена на vue

конечено можно и просто позвонить в какой-то центр, но есть и более простой и интересный вариант.
этот вариант - заказать тест непосредственно через vue.com.
для этого надо:
1) банковскую парточку
2) секюрити код к ней
3) бесплатно зарегистрироваться на вуе.ком (если вы уже сдавали экзамены вендора - учетка у вас уже есть, либо просто надо будет к ней привязать идентификатор вендора)

преимущества:
1) свободный выбор где когда и что сдавать
2) дешевле. намного дешевле
проверял на 642-892 - цена у вуе -0 225 у.е., цена в центрах - около 1.5К грн. при оплате карточкой сумма составила порядка 1130 грн - почти на треть дешевле.
3) намного быстрее и проще. нет никакой волокиты с полу-компетентными администраторами, которые не в состоянии правильно указать ваучер или промокод

2008-06-02

hibernate под линухой

как делается саспенд в оперативу я уже описал здесь
чем лучше хибернейт? он не чувствителен к потере питания. а отключение питания при обычном саспенде приведет к потере всех данных находившихся в оперативы. здесь и плюсы - надежность, и минусы - намного медленнее, ведь надо сохранить оперативу на веник, +время загрузки ядра.

что для этого надо:
1) ядро 2.6

2) опции ядра:
Power management options → <*>Power management support (CONFIG_PM)
Power management options → <*>Software Suspend (CONFIG_SOFTWARE_SUSPEND)
Power management options → [/dev/resume_partition]Default resume partition (CONFIG_PM_STD_PARTITION)
здесь надо указать раздел свопа - именно на него будет сохранятся содержимое оперативы

3) настроить граб, например так:
timeout 5
#выбор по умолчанию с помощью симлинка
default saved

#основная система
title Gentoo
root (hd0,0)
kernel /vmlinuz panic=5 root=/dev/sda2
savedefault

#для просыпания после хибернейта
title Gentoo-resume
root (hd0,0)
kernel /vmlinuz panic=5 root=/dev/sda2 resume=/dev/sda3
savedefault

разница - параметр resume=/dev/sda3 - он указывает ядру на тот самый своп-раздел на который мы провели хибернейт

4) маленький скриптик который собственно выполнит переход в хибернейт
можно конечно обойтить этими командами:
echo shutdown > /sys/power/disk; echo disk > /sys/power/state

но тут может быть много побочных эффектов с иксами и видеопамятью (хотя мне было лень проверять :)). поэтому я немного модифицировал скрипт от саспенда:
#!/bin/bash

ID=`lspci | grep VGA | awk '{print $1}' | sed -e 's@00000:@@' -e 's@:@/@'`

TMP_FILE=`mktemp /var/tmp/video_state.XXXXXX`
trap 'rm -f $TMP_FILE' 0 1 15

chvt 1

cat /proc/bus/pci/$ID > $TMP_FILE

# здесь я переключаю граб на загрузку в режиме просыпания
/sbin/grub-set-default 1

# собственно хибернейт
echo shutdown > /sys/power/disk; echo disk > /sys/power/state

# восстановления умолчательного пункта загрузки
/sbin/grub-set-default 0

cat $TMP_FILE > /proc/bus/pci/$ID

chvt 7

rm -f $TMP_FILE

вуаля. завелось и работает :)

чит для vue

на английском здесь

суть: с 15 апреля до 15 октября можно _бесплатно_ сделать вторую попытку здачи экзамена.

для этого указываем при повторной регистации на экзамен через веб промокод SECONDCHANCE :)

2008-05-28

cisco ios acls

пара забавных вещей о АЦЛ:

1) начиная с 12.3 их можно _редактировать_:
пример:
есть список доступа:
(config)# access-list 101 permit tcp any any established
(config)# access-list 101 permit tcp any any eq www
(config)# access-list 101 permit tcp any any eq smtp
(config)# access-list 101 permit tcp any any eq telnet
(config)# access-list 101 deny ip any any
теперь просмотрим его:
# sh access-list
Extended IP access list 101
10 permit tcp any any established
20 permit tcp any any eq www
30 permit tcp any any eq smtp
40 permit tcp any any eq telnet
50 deny ip any any
теперь удалим запись про смтп:
(config)# ip access-list ext 101
(config-ext-nacl)# no 30
результаты:
# sh access-list
Extended IP access list 101
10 permit tcp any any established
20 permit tcp any any eq www
40 permit tcp any any eq telnet
50 deny ip any any
заменим его на новый с указанием айпи:
(config)# ip access-list ext 101
(config-ext-nacl)# 30 permit tcp any host 1.2.3.4 eq smtp
результаты:
# sh access-list
Extended IP access list 101
10 permit tcp any any established
20 permit tcp any any eq www
30 permit tcp any host 1.2.3.4 eq smtp
40 permit tcp any any eq telnet
50 deny ip any any

2008-05-27

настройка файрвола ipv6

естественно линукс умеет нормально файрволить ipv6. для этого используется все тот же нетфильтер, и юзерспейс-утилита - ip6table. суть - тот же iptables. аналогичные опции, аналогичные цепочки. различны лишь способы указания адресов и поддерживаемые модули... ну и естественно есть скрипты ip6tables-save и ip6tables-restore.

так как опыта эксплуатации ipv6 у меня ноль, то возникает куча вопросов и раздумий... первое что приходит в голову - как ограничить доступ в интернет через меня, т.е. фильтровать цепочку форвард?

вот к какому решени. я пока пришел.
естественно что указывать при этом полностью все адреса неудобно. да и так как все адреса по-определению честные, то необходимо пропускать и трафик из интернета на них
что тут может помочь - использование модуля eui64. данный модуль проверяет совпадение мака в фрейме с младшими 64битами адреса. если использовалась автоконфигурация, то это вполне адекватно. таким образоммы можем сразу отфильтровать "левые" адреса приходящие из локалки на роутер, а пропустить только разданные нами например по дхцп "нашим" макам. далее - ограничить доступ только с определенных маков с локалки...

пример:
1) цепочка для проверки "законных" маков, заодно ограничив исход только с законных префиксов (никто и брокеров не хочет маршрутизировать левые префиксы :)):
ip6tables -N FORW
ip6tables -I FORWARD -i eth+ -m eui64 -s 2001:db8::/48 -j FORW
2) задаем разрешенные маки:
ip6tables -A FORW -m mac --mac-source 00:01:23:45:67:78 -i eth0 -j ACCEPT
ip6tables -A FORW -m mac --mac-source 00:01:23:45:67:90 -i eth0 -j ACCEPT
3) закрываем весь левый трафик _пытающийся_ уйти в туннель :)
iptables -A FORWARD -o tun -j DROP

возникшие у меня вопросы:
1) как поступать с пакетами которые прошли маршрутизацию? например подсеть не являющейся непосредственно подсоединенной?
2) как eui64 работает в не-езернет сетях?
3) что имеет смысл фильтровать на вход _из_ интернета? пока я ничего не фильтрую :)

2008-05-18

ipv6 router advertisements

где можно получить подключение к сети ipv6 и блок адресов я уже упоминал.
теперь хочу поведать о настройке маршрутизатора.

первое что приходит в голову - автоматическая настройка хостов и шлюза с помощью icmpv6, а именно c помощью т.н. router advertisement..
для этого установим radvd - демон выполняющий переодическую отправку этих самых сообщений:
emerge radvd

далее - конфиг.
/etc/radvd.conf:
здесь указываются настройки для каждого интерфейса: какая сеть должна быть на интерфейсе, срок действия адресов, приоритеты роутеров, включена ли рассылка адвертайзментов или нет, и т.д.

пример:

# интерфейс на котором включаем radvd
interface eth0
{
#включаем отправку объявлений
AdvSendAdvert on;
MinRtrAdvInterval 3;
MaxRtrAdvInterval 10;

#указываем подсеть адреса из которой будут выдаваться
prefix 2001:db8:0:0::/64
{
AdvOnLink off;
AdvAutonomous on;
AdvRouterAddr on;
# хост должен обновлять информацию об адресе каждые 20 секунд,
#если он этого не сделает в течении 30 - адрес будет считаться недействительным
AdvPreferredLifetime 20;
AdvValidLifetime 30;
};

};


теперь роутер каждые 3 секунды будет управлять объявления с настройками сети.
хост по получении такого объявления может автоматически создать себе адрес на основе так называемого EUI64 - слегка преобразованного мака.

таким образом полученный хостом адрес будет выглядеть так:
1) старшие 64 бита - адрес сети (указанный в radvd префикс)
2) младшие 64 бита - еуи64
пример формирования младших 64 бит:
допустим мак хоста 01:23:45:67:89:ab
инвертируем 7й би первого октета: 03:23:45:67:89:ab
вставляем посередке ff:fe: 03:23:45:ff:fe:67:89:ab
ставим правильно двоеточия (каждые 16 бит): 0323:45ff:fe67:89ab
приписываем префикс подсети: 2001:db8:0:0:0323:45ff:fe67:89ab
вуаля.
далее - тазик сам выберет из всех маршрутизаторов присылающих объявления шлюз, и сможет работать в сети айпив6 :)

2008-05-15

до начала сессии осталось 15 дней :)

обновил в календаре расписание экзаменов:

Вопросы дня: eigrp k-коэффициенты

1) что значит К5? почему его постоянно ассоциируют с МТУ? ведь в формуле расчета метрики МТУ вообще не фигурирует :)

2) что будет если установить для еигрп все к-коэффициенты равными нулю? :)
уравнять все маршруты, и привести к появлению роутин-лупов? :)
а) какая метрика будет у маршрутов?
б) почему не будет роутин-лупов? :))

2008-05-10

стандартные и расширенные вланы

все уважающие себя цисководы много чего знают о вланах.
но в тоже время вопросы по этим самым вланам очень часто завязаны на конкретное оборудование, которое например может поддерживать только 128 вланов, или поддерживать какие-то фичи связанные с вланами по разному. рассмотрим основые грабли, которые нам любезно разложила циска в своих железках :)

со времен существования цисковского протокола тегирования кадров езернет для вланов (isl) нам досталось деление вланов на стандартные и расширенные.

isl поддерживал только 1005 вланов. и все основные фичи связанные с вланами как правило работают только с этими 1005 вланами. эти вланы называються стандартными.

протокол vtp работает только с 1005 вланами. и пока активен не позволит даже создать на свиче влан с большим номером :)
отключить vtp можно просто переведя его в режим transparent.

расширенными вланами нельзя управлять из vlan database, так как влан датабейс - данные протокола vtp :)

расширенные вланы можно создавать/редактировать из конфигурационного режима командой vlan, и по-хорошему они храняться в конфиге.

расширенные (1006...4095) вланы используються как internal vlan. то есть выделяються для routed ports. потому нужный вам влан уже может оказаться занятым :) будьте бдительны!
internal vlan выделяються начиная с минимального незанятого расширенного влана.

2008-03-29

домашний ipv6

ipv6, бывший ipng - растущая замена использующемуся сейчас в интернете ipv4.
зачем он нужен, если и так все работает? :)
все очень просто, ipv4 - 32битный, и предоставляет "всего-то" 4.2 млрд адресов. и проблема состоит в том что 90% этого адресного пространства уже израсходовали... (рассказ с картинками и официальной статистикой здесь)

ipv6 - 128битный. то есть решает проблему нехватки адресов на корню :)
конечно это не единственный его козырь (или недостаток? :)). он наконец решает проблему пересчета контрольных сумм при изменении ттл, добавляет поле которое может быть использовано для меток мплс, предоставляет новый способ адресации anycast, предлагает более простую систему иерархической адресации, избавляет от pi-адресов, интегрирует средства обеспечения безопасности ipsec, предлагает возможность mobile ip, ликвидирует трансляцию адресов, и многое, многое другое.

уже хочеться попробовать? ;)
да раз плюнуть! ;)
конечно в украинском интернете получить(купить) себе блок адресов ipv6 пока трудно, но можно воспользоваться услугами т.н. брокеров туннелей. они предлагают возможность использовать ipv6 с помощью туннеля ipv6-over-ip4 (6to4). таким образом мы получим виртуальный итерфейс с ipv6 адресом, а весь трафик из/в него будет передаваться до точки присутствия ipv6 через сеть ipv4, а дальше - по 6bone - магистрали интернета работающей на ipv6

какие услуги при этом можно получать? см. ipv6 cool stuff, ipv6 knowlege base, или просто спросите гугля :)

подключение.
проще всего воспользоваться услугами брокера freenet6 (http://go6.net). он не ставит никаких условий, и бесплатно предоставляет анонимный доступ (а для зарегистрированных пользователей - блок адресов /64)
пошагово:

  • естественно без поддержки ядром ipv6 и туннелей 6to4 кина не будет :)
  • emerge freenet6
  • vim /etc/freenet6/gw6c.conf
    здесь при необходимости указываем логин/пароль, размер блока адресов, и днс сервер для выдачи реверс-зоны получаемого блока :)
  • rc-config gw6c start
    теперь ip -6 ad должен показывать как минимум 1 публичный адрес на интерфейсе типа tun/tap :)

проверяем работоспособность:
ping6 ipv6.google.com (да, есть и такой! :))
недостатки:
фринет физически находиться на другом континенте, поэтому время путешествия пакетов туда и обратно удручает...

другой вариант - SixXS
все отлично расписано здесь

  • регаемся (не забываем красиво расписать причины :))
  • заказываем туннель (не забываем красиво расписать причины :))
  • emerge aiccu
  • vim /etc/aiccu.conf
    здесь указываем логин/пароль и название виртуального интерфейса
  • проверка связи aiccu test
    следим что б все было ок
  • aiccu start
  • пользуем на здоровье :)

недостатки:
слишком высокие требования к "причинам" подключения и т.д.
длительное время реакции - все обрабатываеться вручную
плюсы - от уа-икса до амстердама 40-70мс задержек :)

2008-01-09

ssh

никогда не пробовали при работе ссш нажать энтер, а затем тильду? :)
оказываеться очень забавная штука :)

ссш принимает так называемые ескейп последовательности, они начинаються с ~. непосредственно перед нажатием тильды должен быть переход на новую строку.
из мана:
~. Disconnect.
~^Z Background ssh.
~# List forwarded connections.
~& Background ssh at logout when waiting for forwarded connection / X11 sessions toterminate.
~? Display a list of escape characters.
~B Send a BREAK to the remote system (only useful for SSH protocol version 2 and if the peer supports it).
~C Open command line. Currently this allows the addition of port forwardings using the -L and -R options (see above). It also allows the cancellation of existing remote port-forwardings using -KR hostport. !command allows the user to execute a local command if the PermitLocalCommand option is enabled in ssh_config(5). Basic help is available, using the -h option.
~R Request rekeying of the connection (only useful for SSH protocol version 2 and if the peer supports it).

имхо полезны порт-форвардинг, и выполнение комманд на локальной системе :)
так же хочу отметить что работает принцип вложенности - нажимая ~ несколько раз, можно обращаться к сессиям ссш запущенным внутри сессий ссш :)