Я не спец. по tcp/ip. Вот пришло в голову:
Есть сеть 192.168.0.0/24
4 машины в сети .1,.2,.3,.4. У всех mask=255.255.255.0. firewall - нет.на 192.168.0.1 прописываем:
route add -host 192.168.0.4 gw 192.168.0.2
на 192.168.0.4 прописываем:
route add -host 192.168.0.1 gw 192.168.0.3смогут ли общаться .1 и .4 между собой?
Как отработает ping с .1-го на .4-ый ? Т.е. если ДА, то .1-й получит ответ от .4-го через .3-й или .2-й?
>[оверквотинг удален]
>4 машины в сети .1,.2,.3,.4. У всех mask=255.255.255.0. firewall - нет.
>
>на 192.168.0.1 прописываем:
>route add -host 192.168.0.4 gw 192.168.0.2
>на 192.168.0.4 прописываем:
>route add -host 192.168.0.1 gw 192.168.0.3
>
>смогут ли общаться .1 и .4 между собой?
>Как отработает ping с .1-го на .4-ый ? Т.е. если ДА, то
>.1-й получит ответ от .4-го через .3-й или .2-й?Так сеть то одна! Зачем гетвеи указывать?? И так должно работать. Но если только теоретически...
Тогда наверное так:
C 192.168.0.1 запустив пинг на 192.168.0.4 должны получить прохождение пакетов через 192.168.0.2 (после 192.168.0.2 ответить должен 192.168.0.4), а вот ответ репли от 192.168.0.4 назад на 192.168.0.1 пакет должен прийти по другому маршруту, через 192.168.0.3
вроде так
>[оверквотинг удален]
>>
>>смогут ли общаться .1 и .4 между собой?
>>Как отработает ping с .1-го на .4-ый ? Т.е. если ДА, то
>>.1-й получит ответ от .4-го через .3-й или .2-й?
>Тогда наверное так:
>C 192.168.0.1 запустив пинг на 192.168.0.4 должны получить прохождение пакетов через 192.168.0.2
>(после 192.168.0.2 ответить должен 192.168.0.4), а вот ответ репли от 192.168.0.4
>назад на 192.168.0.1 пакет должен прийти по другому маршруту, через 192.168.0.3
>
>вроде такСовсем не так. Согласно 7уровневой модели ISO есть еще физический уровень. Если используется ethernet, то сначала 1 определит по маске что находится в одной сети с 4. Потом посмотрит у себя таблицу arp. Если не найдет MAC адреса 4 то пошлет запрос who-has 4 в сеть. 4 получив этот запрос (или коммутатор, который держит таблицу) ответит про MAC адрес 4. 1 пошлет ethernet пакет с MAC адресом получателя 4, в котором будет icmp пакет с ping запросом. 4 получит его и ответит ethernet пакетом согласно вышеприведенным действиям для 1. Если 1-4 подключены к разным портам правильного коммутатора. то 2 и 3 пакеты с пингом вообще не увидят.
Теория однако :)
практика говорит о другом :)# route add x.x.x.6 x.x.x.2
# netstat -rn | grep ^x.x.x.6
x.x.x.x x.x.x.2 UGHS 0 0 rl0# ping x.x.x.6
PING x.x.x.6 (x.x.x.6): 56 data bytes
36 bytes from x.x.x.2: Redirect Host(New addr: x.x.x.6)
Vr HL TOS Len ID Flg off TTL Pro cks Src Dst
4 5 00 0054 a86b 0 0000 40 01 3433 x.x.x.1 x.x.x.664 bytes from x.x.x.6: icmp_seq=0 ttl=64 time=0.912 ms
# netstat -rn | grep ^x.x.x.6
x.x.x.6 00:0c:6e:3e:d4:ea UHLW 0 2 rl0 1197система FreeBSD
теперь теория. согласно модели ОСИ данные идут с верхнего уровня до нижнего, физического.
пока они дойдут до физики, пройдут еще много уровней, где с ними может произойти моного интересного.
в частности есть уровень ip, на котором определятся маршрут для исходящего пакета. приоритет имеет маршрут с большей маской сети. если рассматривать задачу в сети езернет (врядли автор вопроса подразумевал иную физику), то после конфигурации интерфейса в таблицу роутинга попадет вся подключенная к езеру сеть с маской /24. первый пакет на конкретный ип удет по маршруту на всю сеть, далее, на уровне ниже - арп, отрезолвит мак и внесет в таблицу роутинга спецефичный маршрут с маской /32 для этого хоста с маком. в дальнейшем пакеты уже будут уходить по этой новой записи.теперь мы добавляем маршрут к .6 через .2 (мой случай), которым заменяем маршрут с маком. выход пакета имеет примерно такую логику - уровень ip заглядывает в таблицу роутинга, и видит что .6 доступен через .2, передает пакет на уровень arp, но с информацией о том, что пакет надо отправить по маку .2, что arp и делает, попутно, если надо, определяя мак .2. но .2 вроде не глупа и видит что отправитель .1 и получатель .6 в одной сети и могут обойтись без .2, поэтому в на .1 отправляется icmp redirect, что можно видеть после моей команды ping. после обработки данного сообщения на .1 в таблицу роутинга помещается нормальный прямой маршрут на .6 с маком вместо хопа через .2
само-собой, на .2 должен быть включен ip routing, т.е. грубо говоря, возможность принимать пакеты для других хостов и передавать их дальше согласно routing table
теперь ответы на вопросы
> смогут ли общаться .1 и .4 между собой?да, смогут
> Как отработает ping с .1-го на .4-ый ?
это я и описал, только ип другие, так что пакеты будут идти с .1-го на .4-ый через .2-ой до обработки icmp redirect, после будут ходить напрямую. есть возможность запретить icmp redirect, тогда пакеты всегда будут ходить через .2-го
> Т.е. если ДА, то .1-й получит ответ от .4-го через .3-й или .2-й?
согласно таблице роутинга на .4-ом пакет будет отправлен через .3-ий, с оговоркой на icmp redirect
>
>согласно таблице роутинга на .4-ом пакет будет отправлен через .3-ий, с оговоркой
>на icmp redirectа если, icmp redirect запрещен на .2, но разрешен на .3 ?
Тогда с .1 на .4 через .2, а обратно напрямую .4->.1?
Т.е. путь пакетов: .1->.2->.4 => .1->.2->.4 => .1 ?
да
>[оверквотинг удален]
>одной сети с 4. Потом посмотрит у себя таблицу arp. Если
>не найдет MAC адреса 4 то пошлет запрос who-has 4 в
>сеть. 4 получив этот запрос (или коммутатор, который держит таблицу) ответит
>про MAC адрес 4. 1 пошлет ethernet пакет с MAC адресом
>получателя 4, в котором будет icmp пакет с ping запросом. 4
>получит его и ответит ethernet пакетом согласно вышеприведенным действиям для 1.
>Если 1-4 подключены к разным портам правильного коммутатора. то 2 и
>3 пакеты с пингом вообще не увидят.
>
>Теория однако :)Да хрен. Таблица маршрутизации типа пох ?
Тазик 1. Не будет связываться с 4. Потому как в системе (уровень приложения) есть правило, которое говорит. "хочешь общаться с 4 - шли запросы к 3 - пусть тот передает."Почитайте доку. общение по уровням идет в последовательности
Вопрос от 1 к 4: 7,6,5,4,3,2,1
4 принимает вопрос: 1,2,3,4,5,6,7
4 отсылает ответ: 7,6,5,4,3,2,1
1 принимает ответ: 1,2,3,4,5,6,7
Батькизвиняйте, ступил.Действительно:
# route add -host 192.168.2.4 gw 192.168.2.1 dev eth0
# netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.2.4 192.168.2.1 255.255.255.255 UGH 0 0 0 eth0
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0# ping 192.168.2.4
PING 192.168.2.4 (192.168.2.4) from 192.168.2.187 : 56(84) bytes of data.
64 bytes from 192.168.2.4: icmp_seq=0 ttl=128 time=2.363 msec
64 bytes from 192.168.2.4: icmp_seq=1 ttl=128 time=468 usec
64 bytes from 192.168.2.4: icmp_seq=2 ttl=128 time=330 usec
Вот это смутило# tcpdump -e -nn -i eth0 host 192.168.2.1 or host 192.168.2.4
tcpdump: listening on eth0
14:31:52.597594 0:90:27:e0:3f:a6 0:7:ec:28:e0:9 0800 98: 192.168.2.187 > 192.168.2.4: icmp: echo request (DF)
14:31:52.597911 0:80:48:cd:46:90 ff:ff:ff:ff:ff:ff 0806 60: arp who-has 192.168.2.187 tell 192.168.2.4
14:31:52.597982 0:90:27:e0:3f:a6 0:80:48:cd:46:90 0806 42: arp reply 192.168.2.187 is-at 0:90:27:e0:3f:a6
14:31:52.600371 0:80:48:cd:46:90 0:90:27:e0:3f:a6 0800 98: 192.168.2.4 > 192.168.2.187: icmp: echo reply (DF)
14:31:53.588566 0:90:27:e0:3f:a6 0:7:ec:28:e0:9 0800 98: 192.168.2.187 > 192.168.2.4: icmp: echo request (DF)
14:31:53.588871 0:80:48:cd:46:90 0:90:27:e0:3f:a6 0800 98: 192.168.2.4 > 192.168.2.187: icmp: echo reply (DF)
14:31:54.588607 0:90:27:e0:3f:a6 0:7:ec:28:e0:9 0800 98: 192.168.2.187 > 192.168.2.4: icmp: echo request (DF)
14:31:54.588906 0:80:48:cd:46:90 0:90:27:e0:3f:a6 0800 98: 192.168.2.4 > 192.168.2.187: icmp: echo reply (DF)# arp -n -i eth0
Address HWtype HWaddress Flags Mask Iface
192.168.2.4 ether 00:80:48:CD:46:90 C eth0
192.168.2.1 ether 00:07:EC:28:E0:09 C eth0А вот через несуществующий адрес:
# route add -host 192.168.2.4 gw 192.168.2.186 dev eth0
# netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.2.4 192.168.2.186 255.255.255.255 UGH 0 0 0 eth0
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0# ping 192.168.2.4
PING 192.168.2.4 (192.168.2.4) from 192.168.2.187 : 56(84) bytes of data.
From 192.168.2.187: Destination Host Unreachable
From 192.168.2.187: Destination Host UnreachableУбило наповал.
# tcpdump -e -nn -i eth0 host 192.168.2.186 or host 192.168.2.4
tcpdump: listening on eth0
14:41:09.194197 0:90:27:e0:3f:a6 ff:ff:ff:ff:ff:ff 0806 42: arp who-has 192.168.2.186 tell 192.168.2.187
14:41:10.190133 0:90:27:e0:3f:a6 ff:ff:ff:ff:ff:ff 0806 42: arp who-has 192.168.2.186 tell 192.168.2.187# arp -n -i eth0
Address HWtype HWaddress Flags Mask Iface
192.168.2.4 ether 00:80:48:CD:46:90 C eth0
192.168.2.186 (incomplete) eth0
>Я не спец. по tcp/ip. Вот пришло в голову:Умищу-то, умищу -- куда девать?! %)
>на 192.168.0.1 прописываем:
>route add -host 192.168.0.4 gw 192.168.0.2
>на 192.168.0.4 прописываем:
>route add -host 192.168.0.1 gw 192.168.0.3
>смогут ли общаться .1 и .4 между собой?Трудно чесать правой пяткой за левым ухом? Главное незачем.
Man in the middle атаки (единственное, "пришедшее в голову" на тему "зачем") /должны/ делаться проще, мне почему-то кажется.
>>Я не спец. по tcp/ip. Вот пришло в голову:
>
>Умищу-то, умищу -- куда девать?! %)Прошу прощения. У меня отключен CapsLock и я поленился блондинисто выделять второе слово сабжа. Следующий раз, не буду стесняться :)
>>на 192.168.0.1 прописываем:
>>route add -host 192.168.0.4 gw 192.168.0.2
>>на 192.168.0.4 прописываем:
>>route add -host 192.168.0.1 gw 192.168.0.3
>>смогут ли общаться .1 и .4 между собой?
>
>Трудно чесать правой пяткой за левым ухом? Главное незачем.
>Man in the middle атаки (единственное, "пришедшее в голову" на тему "зачем")
>/должны/ делаться проще, мне почему-то кажется.