Изначально кто-то/когда-то назначает IP на интерфейс xl0, примерно так:
|
fbsd# ifconfig xl0 alias 10.10.1.251/24 up fbsd# ifconfig xl0 xl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=82009<RXCSUM,VLAN_MTU,WOL_MAGIC,LINKSTATE> ether 00:04:75:70:ab:06 inet 10.55.5.51 netmask 0xffffff00 broadcast 10.55.5.255 inet 10.10.1.251 netmask 0xffffff00 broadcast 10.10.1.255 media: Ethernet autoselect (100baseTX <full-duplex>) status: active |
Далее возникает задача подключить сеть 10.10.1.0/24 в VLAN18 на интерфейсе xl0, но мы изначально не знаем что у нас висит данная сеть на xl0 нативно.
Вешаем:
|
fbsd# ifconfig vlan18 10.10.1.251/24 up |
Пробуем пропинговать адрес шлюза с удаленной машины в VLAN18:
|
hostA# ping -c 3 10.10.1.251 PING 10.10.1.251 (10.10.1.251) 56(84) bytes of data. --- 10.10.1.251 ping statistics --- 3 packets transmitted, 0 received, 100% packet loss, time 2001ms |
Ответа нет, но ARP добавился:
|
hostA# arp -n 10.10.1.251 Address HWtype HWaddress Flags Mask Iface 10.10.1.251 ether 00:04:75:70:ab:06 C eth0 |
Со стороны сервера:
|
fbsd# arp -an | grep vlan18 ? (10.10.1.21) at 00:0d:61:b0:8a:b1 on vlan18 expires in 1088 seconds [vlan] |
Здесь нужно было смотреть так (и сразу было бы все понятно):
|
fbsd# arp -an | grep 10.10.1. ? (10.10.1.21) at 00:0d:61:b0:8a:b1 on vlan18 expires in 1088 seconds [vlan] ? (10.10.1.251) at 00:04:75:70:ab:06 on xl0 permanent [ethernet] |
Посмотрим на трафик в VLAN18:
|
fbsd# tcpdump -evvnpi vlan18 host 10.10.1.21 tcpdump: listening on vlan18, link-type EN10MB (Ethernet), capture size 65535 bytes 02:20:20.606963 00:0d:61:b0:8a:b1 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Ethernet (len 6), IPv4 (len 4), Request who-has 10.10.1.251 tell 10.10.1.21, length 46 02:20:20.606977 00:04:75:70:ab:06 > 00:0d:61:b0:8a:b1, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Reply 10.10.1.251 is-at 00:04:75:70:ab:06, length 28 02:20:20.608051 00:0d:61:b0:8a:b1 > 00:04:75:70:ab:06, ethertype IPv4 (0x0800), length 74: (tos 0x0, ttl 128, id 24924, offset 0, flags [none], proto ICMP (1), length 60) 10.10.1.21 > 10.10.1.251: ICMP echo request, id 512, seq 33280, length 40 02:20:25.717835 00:0d:61:b0:8a:b1 > 00:04:75:70:ab:06, ethertype IPv4 (0x0800), length 74: (tos 0x0, ttl 128, id 26156, offset 0, flags [none], proto ICMP (1), length 60) 10.10.1.21 > 10.10.1.251: ICMP echo request, id 512, seq 33536, length 40 02:20:31.295146 00:0d:61:b0:8a:b1 > 00:04:75:70:ab:06, ethertype IPv4 (0x0800), length 74: (tos 0x0, ttl 128, id 27110, offset 0, flags [none], proto ICMP (1), length 60) 10.10.1.21 > 10.10.1.251: ICMP echo request, id 512, seq 33792, length 40 ^C 5 packets captured |
ARP Req приходит в VLAN18 (куда ему деваться), ARP Res также через VLAN18.
Одноврменно с этим посмотрим что происходит на интерфейсе xl0:
|
fbsd# tcpdump -evvnpi xl0 host 10.10.1.21 tcpdump: listening on xl0, link-type EN10MB (Ethernet), capture size 65535 bytes 02:20:20.608069 00:04:75:70:ab:06 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Request who-has 10.10.1.21 tell 10.10.1.251, length 28 02:20:25.717855 00:04:75:70:ab:06 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Request who-has 10.10.1.21 tell 10.10.1.251, length 28 02:20:31.295167 00:04:75:70:ab:06 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Ethernet (len 6), IPv4 (len 4), Request who-has 10.10.1.21 tell 10.10.1.251, length 28 ^C 3 packets captured |
ARP Req также отправляется через xl0 уже без тега, происходит это на каждый входящий IP пакет, система видит что для ответного пакета с src 10.10.1.21 нужно отправлять данные через интерфейс xl0:
|
fbsd# route -n get 10.10.1.21 route to: 10.10.1.21 destination: 10.10.1.0 mask: 255.255.255.0 interface: xl0 flags: <UP,DONE> recvpipe sendpipe ssthresh rtt,msec mtu weight expire 0 0 0 0 1500 1 0 |
А так как нет ARP записи для адреса 10.10.1.21 через интерфейс xl0, мы отправляем ARP Req, а ICMP пакет дропаем.
ARP таблица для подсети 10.10.1.0
|
fbsd# arp -an | grep 10.10.1 ? (10.10.1.21) at 00:0d:61:b0:8a:b1 on vlan18 expires in 991 seconds [vlan] ? (10.10.1.251) at 00:04:75:70:ab:06 on xl0 permanent [ethernet] |
Мы можем явно добавить статическую запись через xl0:
|
fbsd# arp -s 10.10.1.21 00:0d:61:b0:8a:b1 xl0 fbsd# arp -n 10.10.1.21 ? (10.10.1.21) at 00:0d:61:b0:8a:b1 on vlan18 expires in 862 seconds [vlan] ? (10.10.1.21) at 00:0d:61:b0:8a:b1 on xl0 permanent [ethernet] |
Далее попробуем пропинговать
|
fbsd# tcpdump -evvnpi vlan18 host 10.10.1.21 tcpdump: listening on vlan18, link-type EN10MB (Ethernet), capture size 65535 bytes 01:56:01.663091 00:0d:61:b0:8a:b1 > 00:04:75:70:ab:06, ethertype IPv4 (0x0800), length 74: (tos 0x0, ttl 128, id 7023, offset 0, flags [none], proto ICMP (1), length 60) 10.10.1.21 > 10.10.1.251: ICMP echo request, id 512, seq 31744, length 40 |
Исходящий (в никуда)
|
fbsd# tcpdump -evvnpi xl0 host 10.10.1.21 tcpdump: listening on xl0, link-type EN10MB (Ethernet), capture size 65535 bytes 02:26:01.663112 00:04:75:70:ab:06 > 00:0d:61:b0:8a:b1, ethertype IPv4 (0x0800), length 74: (tos 0x0, ttl 64, id 43486, offset 0, flags [none], proto ICMP (1), length 60) 10.10.1.251 > 10.10.1.21: ICMP echo reply, id 512, seq 31744, length 40 |
При такой конфигурации удалить ARP запись для «10.10.1.21» через интерфейсе VLAN18 не получится:
|
fbsd# arp -d 10.10.1.21 arp: writing to routing socket: Invalid argument |
Решение:
|
fbsd# ifconfig xl0 -alias 10.10.1.251 |
|
fbsd# route -n get 10.10.1.21 route to: 10.10.1.21 destination: 10.10.1.0 mask: 255.255.255.0 interface: vlan18 flags: <UP,DONE> recvpipe sendpipe ssthresh rtt,msec mtu weight expire 0 0 0 0 1500 1 0 |
И трафик пошел:
|
fbsd# tcpdump -evvnpi vlan18 host 10.10.1.21 tcpdump: listening on vlan18, link-type EN10MB (Ethernet), capture size 65535 bytes 02:33:22.353646 00:0d:61:b0:8a:b1 > 00:04:75:70:ab:06, ethertype IPv4 (0x0800), length 74: (tos 0x0, ttl 128, id 59143, offset 0, flags [none], proto ICMP (1), length 60) 10.10.1.21 > 10.10.1.251: ICMP echo request, id 512, seq 33024, length 40 02:33:22.353665 00:04:75:70:ab:06 > 00:0d:61:b0:8a:b1, ethertype IPv4 (0x0800), length 74: (tos 0x0, ttl 64, id 4902, offset 0, flags [none], proto ICMP (1), length 60) 10.10.1.251 > 10.10.1.21: ICMP echo reply, id 512, seq 33024, length 40 |
Интерфейс для маршрутизации выбирается на основе «1-ой включенной подсети»:
|
fbsd# ifconfig xl0 | grep inet inet 10.55.5.51 netmask 0xffffff00 broadcast 10.55.5.255 fbsd# ifconfig vlan18 | grep inet inet 10.10.1.251 netmask 0xffffff00 broadcast 10.10.1.255 |
|
fbsd# ifconfig xl0 alias 10.10.1.251/24 up fbsd# route -n get 10.10.1.21 route to: 10.10.1.21 destination: 10.10.1.0 mask: 255.255.255.0 interface: vlan18 flags: <UP,DONE> recvpipe sendpipe ssthresh rtt,msec mtu weight expire 0 0 0 0 1500 1 0 |