Та же подсеть для клеток что и на физическом интерфейсе
Модератор: terminus
Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
- проходил мимо
Та же подсеть для клеток что и на физическом интерфейсе
Подскажите, плиз, а то я сам не соображу.
Есть em0, на котором 10.0.0.1.0/24, есть желание собрать на этой системе клетки и раздать им ту же подсеть. Делать другую и роутить - не хочу. Не роутить и редиректить на порты клеток - тоже не хочу.
Самый простой вариант - это алиасы на em0, но он отпадает - между клетками нужен файрвол, а с альясами pf не работает.
Самый сложный вариант - это vinet вместо альясов и бридж с em0, но придётся переделывать клетки и неизвестно что со стабильностью.
Вариант с lo выглядит интересным - между альясами lo pf пакеты ловит (почему, кстати, я не нашёл, но ловит). Но lo нельзя засадить в бридж.
В общем, какие есть варианты?
Есть em0, на котором 10.0.0.1.0/24, есть желание собрать на этой системе клетки и раздать им ту же подсеть. Делать другую и роутить - не хочу. Не роутить и редиректить на порты клеток - тоже не хочу.
Самый простой вариант - это алиасы на em0, но он отпадает - между клетками нужен файрвол, а с альясами pf не работает.
Самый сложный вариант - это vinet вместо альясов и бридж с em0, но придётся переделывать клетки и неизвестно что со стабильностью.
Вариант с lo выглядит интересным - между альясами lo pf пакеты ловит (почему, кстати, я не нашёл, но ловит). Но lo нельзя засадить в бридж.
В общем, какие есть варианты?
Услуги хостинговой компании Host-Food.ru
Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
-
- проходил мимо
Та же подсеть для клеток что и на физическом интерфейсе
Вы с клетками работали или просто изучаете?гест писал(а):Подскажите, плиз, а то я сам не соображу.
Есть em0, на котором 10.0.0.1.0/24, есть желание собрать на этой системе клетки и раздать им ту же подсеть. Делать другую и роутить - не хочу. Не роутить и редиректить на порты клеток - тоже не хочу.
Самый простой вариант - это алиасы на em0, но он отпадает - между клетками нужен файрвол, а с альясами pf не работает.
Какой такой firewall _между_ клетками?
У клеток нет сети, пристегиваются интерфейсы из хост-машины, соответственно firewall для хоста и
jail-vm - настраивается в хост машине.
vnet - это vimage в ядре и соответственно, наличие виртуальной сети в jail'ах.Самый сложный вариант - это vinet вместо альясов и бридж с em0, но придётся переделывать клетки и неизвестно что со стабильностью.
Вариант с lo выглядит интересным - между альясами lo pf пакеты ловит (почему, кстати, я не нашёл, но ловит). Но lo нельзя засадить в бридж.
В общем, какие есть варианты?
Использую vimage с 10-11'ого года, не знаю как сейчас, но pf регулярно правили для работы с vimage.
vnet(vimage) + ipfw - работает стабильно, что с epair, что с netgraph, с virtio не пробовал.
Проблема у jail+vnet - одна, апгрейдить вместе с хостом, у традиционных jail - нет такой проблемы,
ну это и понятно.
При наличии bhyve, не вижу смысла связываться с тухлой реализацией jail, которые с 2007'а не могут
довести до уровня полноценных контейнеров, вялотекущее развитие jail'ов, наверняка забросят, ибо
есть bhyve и все силы отдают реальному гипервизору.
Так что решайте:
- pf или jail+ipfw
- pf + bhyve
Лучше все делать на 11'ой ветке.
-
- проходил мимо
Та же подсеть для клеток что и на физическом интерфейсе
Файрвол на хосте, который прописывает правила взаимодействия между клетками. В случае с альясами на физическом интерфейсе это невозможно.guest писал(а): Какой такой firewall _между_ клетками?
Виртуальная сеть в клетке мне не нужна, поэтому я до последнего буду не хотеть возиться с vinet. В общем, я думаю, вопрос в том, чтобы объединить lo и em0 каким-то образом, потому что как я уже говорил, pf с альясами на lo работает.
Лень вестись на троллинг.guest писал(а):не вижу смысла связываться с тухлой реализацией jail
-
- проходил мимо
Та же подсеть для клеток что и на физическом интерфейсе
не знаю как на счет троллинга, но такой глупости как выше, давно не читал.гест писал(а):Файрвол на хосте, который прописывает правила взаимодействия между клетками. В случае с альясами на физическом интерфейсе это невозможно.guest писал(а): Какой такой firewall _между_ клетками?
Виртуальная сеть в клетке мне не нужна, поэтому я до последнего буду не хотеть возиться с vinet. В общем, я думаю, вопрос в том, чтобы объединить lo и em0 каким-то образом, потому что как я уже говорил, pf с альясами на lo работает.Лень вестись на троллинг.guest писал(а):не вижу смысла связываться с тухлой реализацией jail
Вы уж отпишите про реализацию "файрвол с правилами взаимодействия между клетками"
и про объединение "lo и em0".
В любом случае, удачи, желаю найти решение.
- Amadeus
- ст. сержант
- Сообщения: 332
- Зарегистрирован: 2008-10-05 12:42:44
- Откуда: Kiev
Та же подсеть для клеток что и на физическом интерфейсе
1) Почитайте, пожалуйста, теорию, что такое FreeBSD Jail.
2) После того, как будет выполнен пункт 1, станет понятно, что даже если у вас на хосте 100500 клеток и висят они да хоть на SuPerMeGaCartd0
если вы хотите настроить взаимодействие МЕЖДУ ними повесьте tcpdump на lo0 и посмотрите. Самое банальное правило взаимодействия выглядит так
Код: Выделить всё
ipfw add 00099 allow ip from any to any via lo0
Дальше - по потребностям
А вы как проверяли? "Я тебе говорю, невозможно и все?"В случае с альясами на физическом интерфейсе это невозможно.
Нет ничего невозможного
-
- проходил мимо
Та же подсеть для клеток что и на физическом интерфейсе
Либо я очень плохо изланаю свои мысли или Вы не прочитали суть проблемы. К lo у меня вопросов нет.Amadeus писал(а): повесьте tcpdump на lo0 и посмотрите
Испытаниями на реальном железе. Правила файрвола не работают на физическом интерфейсе, tcpdump на железном интерфейсе не показывает прохождение пакетов, потому что - представьте себе - по нему они действительно не проходят.Amadeus писал(а):А вы как проверяли? "Я тебе говорю, невозможно и все?"
-
- проходил мимо
Та же подсеть для клеток что и на физическом интерфейсе
В общем, пишу ещё раз что мне нужно
1. Клетки должны находиться в одной подсети с физическим интерфейсом.
2. Между клетками должен быть работаютший на хосте файрвол.
3. Хорошо бы чтобы это не был vimage.
Способы которыми я пока пытался решить задачу
1. Алиасы на физическом интерфейсе - невыполнение п.2
2. Клетки на lo - невыполнение п.1
1. Клетки должны находиться в одной подсети с физическим интерфейсом.
2. Между клетками должен быть работаютший на хосте файрвол.
3. Хорошо бы чтобы это не был vimage.
Способы которыми я пока пытался решить задачу
1. Алиасы на физическом интерфейсе - невыполнение п.2
2. Клетки на lo - невыполнение п.1
- Amadeus
- ст. сержант
- Сообщения: 332
- Зарегистрирован: 2008-10-05 12:42:44
- Откуда: Kiev
Та же подсеть для клеток что и на физическом интерфейсе
Я то как раз прочитал суть "проблемы". Только это НЕ проблема, а недопонимание как и каким образом работают клетки. И каким образом они коммуницируются с внешним миром.Либо я очень плохо изланаю свои мысли или Вы не прочитали суть проблемы. К lo у меня вопросов нет.
Не ерничайте, эта "проблема" испытаниями на реальном железе, решается за минут 15. И если вы говорите что их проводили, значит у меня какое то особенное железо. Ради интереса сейчас воспроизвел. При том что я не использую pass pf правил. Не нравится их синтаксис. Но то опциональноИспытаниями на реальном железе. Правила файрвола не работают на физическом интерфейсе, tcpdump на железном интерфейсе не показывает прохождение пакетов, потому что - представьте себе - по нему они действительно не проходят.
В нижеописанном примере, 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
Висят они, на 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
Код: Выделить всё
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 надо проверять трафик через этот интерфейс. Соответственно если вверху конфига у вас есть что то типа
Код: Выделить всё
set skip on lo0
Далее, для теста делаем вот такую распиновку по интефейсам
Код: Выделить всё
ext_if="em0"
int_if="lo0"
lan_if="em1"
Код: Выделить всё
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 секунд:
При этом убираем правило
Код: Выделить всё
#pass in on $int_if from any to any
Код: Выделить всё
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...
Далее, взаимодействие МЕЖДУ клетками я показал, далее, вам надо что бы остальные машины видели.
Окей.
В файрволе на исходной машине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^]
Естественно - начальное правило перед pass
Код: Выделить всё
block all
Нет ничего невозможного
-
- проходил мимо
Та же подсеть для клеток что и на физическом интерфейсе
Да, надо было сразу начинать с конфигов. Честно говоря, я не вижу чем реализация отличается от Вашей.
Проверяем, что pf загружен и конфиг применён.
В общем, от этого конфига можно ожидать что клетки не смогут взаимодействовать друг с другом, правильно?
Идём на клетку и пытаемся прицепиться на порт постгреса на другой клетке.
Результат pfctl -sr для верности
Код: Выделить всё
em0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=42098<VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_MAGIC,VLAN_HWTSO>
ether 00:1b:21:bf:3e:f9
inet 10.0.1.2 netmask 0xffffff00 broadcast 10.0.1.255
inet 10.0.1.4 netmask 0xffffffff broadcast 10.0.1.4
inet 10.0.1.6 netmask 0xffffffff broadcast 10.0.1.6
inet 10.0.1.3 netmask 0xffffffff broadcast 10.0.1.3
inet 10.0.1.5 netmask 0xffffffff broadcast 10.0.1.5
inet 10.0.1.7 netmask 0xffffffff broadcast 10.0.1.7
inet 10.0.1.9 netmask 0xffffffff broadcast 10.0.1.9
inet 10.0.1.11 netmask 0xffffffff broadcast 10.0.1.11
Код: Выделить всё
ifconfig_em0="inet 10.0.1.2 netmask 255.255.255.0"
ifconfig_em0_alias0="inet 10.0.1.3 netmask 255.255.255.255"
и т.д.
Код: Выделить всё
int="em0" # LAN + Jails
block all
pass in on $int inet proto icmp all icmp-type $icmp_types # ICMP
pass in on $int inet proto tcp from any to $int:network port ssh # SSH
В общем, от этого конфига можно ожидать что клетки не смогут взаимодействовать друг с другом, правильно?
Идём на клетку и пытаемся прицепиться на порт постгреса на другой клетке.
Код: Выделить всё
root@proxy:~ # telnet 10.0.1.6 5432
Trying 10.0.1.6...
Connected to 10.0.1.6.
Escape character is '^]'.
Код: Выделить всё
scrub in on em0 all fragment reassemble
block drop all
pass out quick on em0 all flags S/SA keep state (if-bound)
pass out quick on em1 all flags S/SA keep state (if-bound)
pass in on em0 inet proto icmp all icmp-type echoreq keep state (if-bound)
pass in on em0 inet proto icmp all icmp-type unreach keep state (if-bound)
pass in on em0 inet proto icmp all icmp-type timex keep state (if-bound)
pass in on em0 inet proto icmp all icmp-type trace keep state (if-bound)
pass in on em0 inet proto tcp from any to 10.0.1.5 port = http flags S/SA keep state (if-bound)
pass in on em0 inet proto tcp from any to 10.0.1.5 port = https flags S/SA keep state (if-bound)
pass in on em0 inet proto tcp from any to 10.0.1.0/24 port = ssh flags S/SA keep state (if-bound)
-
- проходил мимо
Та же подсеть для клеток что и на физическом интерфейсе
Клетки взаимодействуют между собой через lo0 ? Блин, а. А вот не знал.
- Amadeus
- ст. сержант
- Сообщения: 332
- Зарегистрирован: 2008-10-05 12:42:44
- Откуда: Kiev
Та же подсеть для клеток что и на физическом интерфейсе
Ура) вы таки прочитали что я хотел сказать. С одним существенным дополнением. Не только клетки Вся работа сетевого стека на отдельной взятой машине идет так. Пример для внешних адресов:
Код: Выделить всё
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=4019b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4,VLAN_HWTSO>
ether 6c:0b:84:99:85:b1
inet IP netmask 0xffffff00 broadcast XXX
inet IP2 netmask 0xffffff00 broadcast XXX
Код: Выделить всё
root@freebsd11:/etc # ping IP2
PING IP2 (IP2): 56 data bytes
64 bytes from IP2: icmp_seq=0 ttl=64 time=0.031 ms
64 bytes from IP2 icmp_seq=1 ttl=64 time=0.047 ms
Код: Выделить всё
root@freebsd11:~ # tcpdump -i em0 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on em0, link-type EN10MB (Ethernet), capture size 262144 bytes
^C
0 packets captured
48 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
07:24:17.108612 IP localhost > IP2: ICMP echo request, id 4634, seq 28, length 64
07:24:17.108663 IP IP2 > localhost: ICMP echo reply, id 4634, seq 28, length 64
07:24:18.159690 IP localhost > IP2: ICMP echo request, id 4634, seq 29, length 64
Нет ничего невозможного
-
- проходил мимо
Та же подсеть для клеток что и на физическом интерфейсе
А можно ещё одну подсказку получить
Между клетками всё настроил, но возникла проблема с гостем в bhyve.
Он висит на tap0, который вместе с em0 загнан в bridge0.
Для tap0 и bridge0 сделан skip.
В общем, трафик между алиасами и виртуалкой не ходит, пока не указать skip на em0.
state не нет. Что я мог забыть?
Между клетками всё настроил, но возникла проблема с гостем в bhyve.
Он висит на tap0, который вместе с em0 загнан в bridge0.
Для tap0 и bridge0 сделан skip.
В общем, трафик между алиасами и виртуалкой не ходит, пока не указать skip на em0.
Код: Выделить всё
listening on tap0, link-type EN10MB (Ethernet), capture size 262144 bytes
14:00:23.349093 IP 10.0.1.8.61095 > 10.0.1.5.http: Flags [S], seq 500890583, win 8192, options [mss 1460,nop,nop,sackOK], length 0
tap0 они покидают, но дальше их нигде не видно.
Выставил block log all и нашёл вот эти пакеты:
[code]14:00:14.343904 rule 0..16777216/0(match): block out on em0: 10.0.1.5.80 > 10.0.1.8.61095: Flags [S.], seq 1243405236, ack 500890584, win 65535, options [mss 1460,nop,wscale 6,sackOK,eol], length 0
-
- прапорщик
- Сообщения: 483
- Зарегистрирован: 2007-10-09 11:31:03
Та же подсеть для клеток что и на физическом интерфейсе
как-то тоже мучился с работой в бридге... не помню что конкретно там не бегало, но очень помог скрипт
Код: Выделить всё
/usr/share/examples/netgraph/ether.bridge