
По большей части среда представляет собой FreeBSD и выглядит следующим образом:
HOST_A <-> ROUTER <-> LOKI <-> HOST_B
Как минимум, мне бы хотелось иметь возможность пинговать ROUTER с HOST_B.
- МАРШРУТИЗАТОРУ назначен IP 10.0.0.1
- LOKI — это многосетевая машина, которой назначены IP-адреса 10.0.0.2 и 192.168.200.1.
- HOST_B назначен IP 192.168.200.3
- HOST_A назначен IP 10.0.0.3
Я настроил сеть, как указано выше, и добавил gateway_enable="YES" в rc.conf loki.
netstat -r на LOKI выдает:
Routing tables
Internet:
Destination Gateway Flags Netif Expire
default 10.0.0.1 UGS em0
10.0.0.0 link#1 U em0
10.0.0.2 link#1 UHS lo0
loki link#2 UH lo0
192.168.200.0 link#3 U ue0
192.168.200.1 link#3 UHS lo0
что выглядит как хорошая таблица маршрутизации и, по-видимому, работает во всех направлениях.
netstat -r на HOST_B выдает:
Routing tables
Internet:
Destination Gateway Flags Netif Expire
default 192.168.200.1 UGS em0
hostb link#2 UH lo0
192.168.200.0 link#1 U em0
192.168.200.3 link#1 UHS lo0
что выглядит как еще одна хорошая таблица маршрутизации, но она видит только LOKI.
В итоге:
- LOKI может пинговать HOST_A, HOST_B и ROUTER
- HOST_B может пинговать LOKI, но не ROUTER или HOST_A
Некоторые дополнительные заметки: от HOST_B
ping 10.0.0.1 100% packet loss
В Wireshark на LOKI при пинге 10.0.0.1 с HOST_B:
120 40.549564000 192.168.200.3 10.0.0.1 ICMP 98 Echo (ping) request id=0x5a0e, seq=92/23552, ttl=63 (no response found!)
Мне кажется, что ничего не маршрутизируется из LOKI в ROUTER. Что я упускаю?
Я подтвердил, что переадресация IP происходит, закомментировав gateway_enable="YES" в /etc/rc.conf и перезагрузив компьютер.
Затем я выполнил следующие команды на loki:
sudo tcpdump -i em0 -nS
sudo tcpdump -i ue0 -nS
для мониторинга активности на двух сетевых картах.
с hostb я запустил:
ping 10.0.0.1
интерфейс ue0 на 192.168.200.1 сообщил:
14:44:21.870865 IP 192.168.200.3 > 10.0.0.1: ICMP echo request, id 21509, seq 0, length 64
Ничего не сообщалось об интерфейсе em0 на 10.0.0.2.
Затем я побежал:
sudo sysctl -w net.inet.ip.forwarding=1
и конечно же, em0 сообщил:
14:58:14.745369 IP 192.168.200.3 > 10.0.0.1: ICMP echo request, id 25861, seq 0, length 64
Но нет, ответ такой, какой я получаю с ping loki от hostb:
14:44:15.724200 IP 192.168.200.3 > 192.168.200.1: ICMP echo request, id 21253, seq 4, length 64
14:44:15.724207 IP 192.168.200.1 > 192.168.200.3: ICMP echo reply, id 21253, seq 4, length 64
Если я пингую маршрутизатор из loki, все в порядке:
15:04:55.637839 IP 10.0.0.2 > 10.0.0.1: ICMP echo request, id 46852, seq 3, length 64
15:04:55.638324 IP 10.0.0.1 > 10.0.0.2: ICMP echo reply, id 46852, seq 3, length 64
Есть идеи, как найти ответ?
решение1
Почему LOKI и HOST_A соединены маршрутизатором, когда они находятся в одной подсети? Это действительно маршрутизатор или просто коммутатор? (Из ваших последующих комментариев следует, что хотя устройство и является маршрутизатором, оно просто действует как коммутатор между LOKI и HOST_A).
Какая таблица маршрутизации на HOST_A и ROUTER? Если он пытается достичь 192.168.200.1, почему он должен использовать LOKI в качестве пункта назначения?
Если таблица маршрутизации на этих устройствах не знает, что нужно использовать LOKI для подсети 192, они будут просто пересылать пакеты на шлюз по умолчанию.
В качестве альтернативы вы можете рассмотреть установку NAT на LOKI. Для многих служб он может инкапсулировать трафик от HOST_B как трафик от LOKI. Поскольку другие машины могут попасть туда, он может получать трафик и пересылать его обратно на HOST_B.
решение2
Мне кажется, что LOKI делает именно то, что вы ожидаете. Он получил ping
пакет запроса на ue0
и ретранслирует его на em0
. Если бы он получил ping
ответ на em0
, он бы ретранслировал его на ue0
.
Проблема в МАРШРУТИЗАТОРЕ. Он получает ping
запрос от 192.168.200.3
на своей стороне LAN (но это не имеет значения). Когда он отправляет ping
ответ на 192.168.200.3
, он просматривает свою таблицу маршрутизации. Сторона LAN 10.0.0.0/24
(или подобная), поэтому пакет ответа отправляется на шлюз по умолчанию МАРШРУТИЗАТОРА, который является стороной WAN в общедоступном Интернете.
МАРШРУТИЗАТОР использует трансляцию сетевых адресов (NAT) для подделки 10.0.0.0/24
сети за вашим единственным истинным публичным IP-адресом (назначенным WAN-стороне МАРШРУТИЗАТОРА вашим интернет-провайдером). Адреса RFC1918 являются частными и не могут быть открыты для публичного Интернета, и всегда будут находиться за NAT.
Вы можете поместить статический маршрут в ROUTER, чтобы ваш ping
эксперимент сработал, но он все равно будет изолирован от публичного Интернета. Вы можете включить NAT на LOKI, в этом случае у вас будет двойной NAT для Интернета (который работает нормально, но довольно бессмысленно). Если вам просто нужен брандмауэр второго уровня, вы можете рассмотреть возможность сделать LOKI мостовым брандмауэром и запустить его 10.0.0.0/24
на обоих сетевых картах. Если вы хотите размещать службы, выходящие в Интернет, и у вас есть только один публичный IP-адрес, вы вынуждены использовать правила переадресации портов на ROUTER.
решение3
Что-то должно быть настроено для пересылки пакетов из сети A в сеть B. Loki, будучи двухдомным, может это сделать, но это не автоматически. При этом вы настроите Loki как маршрутизатор и должны использовать Loki как шлюз по умолчанию для хоста B. Другой вариант — установить постоянный маршрут в таблице маршрутизации хоста B, указав Loki как пункт назначения для трафика 10.xxx.