Либо я очень плохо изланаю свои мысли или Вы не прочитали суть проблемы. К lo у меня вопросов нет.
Я то как раз прочитал суть "проблемы". Только это НЕ проблема, а недопонимание как и каким образом работают клетки. И каким образом они коммуницируются с внешним миром.
Испытаниями на реальном железе. Правила файрвола не работают на физическом интерфейсе, tcpdump на железном интерфейсе не показывает прохождение пакетов, потому что - представьте себе - по нему они действительно не проходят.
Не ерничайте, эта "проблема" испытаниями на реальном железе, решается за минут 15. И если вы говорите что их проводили, значит у меня какое то особенное железо. Ради интереса сейчас воспроизвел. При том что я не использую pass pf правил. Не нравится их синтаксис. Но то опционально
В нижеописанном примере, SSH порт взят опционально. То что Вам требуется - уже решайте сами.
Дано:
Код: Выделить всё
root@freebsd11:/etc # jls
JID IP Address Hostname Path
3 10.21.1.182 db /data/jails/db
4 10.21.1.181 test1 /data/jails/test1
Это тестовый сервер. На котором развёрнуты две клетки, и обычная 2С /23 сеть.
Висят они, на LAN интерфейсе
Код: Выделить всё
em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=4219b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4,WOL_MAGIC,VLAN_HWTSO>
ether 68:05:ca:34:5a:4f
inet 10.21.1.235 netmask 0xfffffe00 broadcast 10.21.1.255
inet 10.21.1.180 netmask 0xfffffe00 broadcast 10.21.1.255
inet 10.21.1.182 netmask 0xfffffe00 broadcast 10.21.1.255
inet 10.21.1.181 netmask 0xfffffe00 broadcast 10.21.1.255
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
media: Ethernet autoselect (1000baseT <full-duplex>)
status: active
Что бы не писать портянку - несколькими постами набросаю
Отправлено спустя 4 минуты 33 секунды:
Далее, подгружаем самый простой файрвол, pf , для начала
Код: Выделить всё
pass in on $int_if from any to any
pass out on $ext_if from $ext_if to any.
pass in on $ext_if proto tcp from any to $ext_if port ssh
pass in inet proto icmp all icmp-type echoreq.
Это так, сферический конь в вакуме, но для теста - пойдет.
заходим в первую клетку
root@freebsd11:/etc # jexec 3 /bin/sh
Код: Выделить всё
# uname -a
FreeBSD db 11.0-RELEASE-p1 FreeBSD 11.0-RELEASE-p1 #0: Wed Oct 12 11:41:43 EEST 2016 sergey@freebsd11:/usr/obj/usr/src/sys/GENERIC amd64
И из нее, например, пингуем другую
Код: Выделить всё
# ping 10.21.1.181
PING 10.21.1.181 (10.21.1.181): 56 data bytes
64 bytes from 10.21.1.181: icmp_seq=0 ttl=64 time=0.032 ms
Отправлено спустя 3 минуты 5 секунд:
Код: Выделить всё
root@freebsd11:~ # tcpdump -i em1 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on em1, link-type EN10MB (Ethernet), capture size 262144 bytes
^C
0 packets captured
33 packets received by filter
0 packets dropped by kernel
root@freebsd11:~ # tcpdump -i lo0 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo0, link-type NULL (BSD loopback), capture size 262144 bytes
21:36:55.576777 IP 10.21.1.182 > 10.21.1.181: ICMP echo request, id 19724, seq 44, length 64
21:36:55.576805 IP 10.21.1.181 > 10.21.1.182: ICMP echo reply, id 19724, seq 44, length 64
21:36:56.640118 IP 10.21.1.182 > 10.21.1.181: ICMP echo request, id 19724, seq 45, length 64
21:36:56.640168 IP 10.21.1.181 > 10.21.1.182: ICMP echo reply, id 19724, seq 45, length 64
Вот это к вопросу через КАКОЙ интерфейс клетки взамодействуют между собой НА локальной машине.
Идем далее.
Отправлено спустя 4 минуты 57 секунд:
Вам для того, что бы работал файрвол через lo0 надо проверять трафик через этот интерфейс. Соответственно если вверху конфига у вас есть что то типа
Это убирается.
Далее, для теста делаем вот такую распиновку по интефейсам
Далее основные правила
Код: Выделить всё
table <main> { 10.21.1.181 }
pass in on $int_if proto tcp from any to <main> port ssh
pass out on $int_if proto tcp to any port ssh.
И самый простой например такой кусок.
Отправлено спустя 6 минут 46 секунд:
При этом убираем правило
Итого мы получаем
Код: Выделить всё
freebsd11:/etc # jls
JID IP Address Hostname Path
3 10.21.1.182 db /data/jails/db
4 10.21.1.181 test1 /data/jails/test1
root@freebsd11:/etc # jexec 3 /bin/sh
# telnet 10.21.1.181 22
Trying 10.21.1.181...
Connected to 10.21.1.181.
Escape character is '^]'.
SSH-2.0-OpenSSH_7.2 FreeBSD-20160310
^C^\^D
Connection closed by foreign host.
# telnet 10.21.1.182 22
Trying 10.21.1.182...
Отправлено спустя 3 минуты 57 секунд:
Далее, взаимодействие МЕЖДУ клетками я показал, далее, вам надо что бы остальные машины видели.
Окей.
pass in on $lan_if proto tcp from any to <main> port ssh
pass out on $lan_if proto tcp to any port ssh
В файрволе на исходной машине
мы получаем
Код: Выделить всё
[root@gw1 /]# telnet 10.21.1.182 22
Trying 10.21.1.182...
^C
[root@gw1 /]# telnet 10.21.1.181 22
Trying 10.21.1.181...
Connected to 10.21.1.181.
Escape character is '^]'.
SSH-2.0-OpenSSH_7.2 FreeBSD-20160310
^C^]
Отправлено спустя 12 минут 36 секунд:
Естественно - начальное правило перед pass