macvlan \
--subnet=192.168.174.0/22 \
--gateway=192.168.172.253 \
--ip-range 192.168.174.180/32 \
-o parent=ens192 \
test-net
Далее настроил docker-compose.yml:
version: '3.9'
services:
alpine: image: alpine:latest
hostname: alpine container_name: alpine
command: ['ping', '192.168.172.253', '-c4'] networks:
test-net: ipv4_address: 192.168.174.180
restart: unless-stopped
networks: test-net:
name: test-net
driver: macvlan
driver_opts:
parent: ens192
ipam:
config:
- subnet: "192.168.174.0/22"
ip_range: "192.168.174.180/32"
gateway: "192.168.172.253"
Запускаю docker-compose up и вижу, что пинг не проходит из контейнера до шлюза в локалке:
Recreating alpine ... done
Attaching to alpine
alpine | PING 192.168.172.253 (192.168.172.253): 56 data bytesalpine |
alpine | --- 192.168.172.253 ping statistics ---
alpine | 4 packets transmitted, 0 packets received, <span style="font-family: markup-bold;">100% packet loss</span>
С хоста где стоит docker шлюз 192.168.172.253 пингуется:
192.168.172.253 ping statistics ---4 packets transmitted, 4 received, 0% packet loss
Подскажите, что может мешать пингу?
А нужно это все, чтобы ...?
чтоб контейнер был в одной подсети локальной. контейнер кстати получает IP 192.168.174.180
А это нужно чтобы ...?
Насколько помню (года полтора назад решал такую задачку), еще на самом хосте нужно создать интерфейс macvlan и настроить маршрутизацию через него. А так все, как обычно, отдебажить надо. Как минимум, посмотреть на хосте ip a и ip route до и после создания сети/контейнеров в докере.
Причем если создать на хосте macvlan с указанием гейтвея , то работать не будет, надо именно без гейтвея. И доступ будет только с хоста до контейнера и с контейнера до хоста и гейтвея. А для доступа с других машин в сети к контейнеру надо еще нат между интерфейсами - пакеты проходят в контейнер, а ответ нет. Вообще, я тоже до конца не доразобрался. Если у кого-то есть хорошая дока по теме, поделитесь.
Да. Интерфейс macvlan без гейта нужно создавать, потому что уже есть основной интерфейс с гейтом. Потом роутингом через интерфейс macvlan хоста обеспечивается связанность между локалкой и контейнерами. Дока гуглится быстро - https://www.linuxtechi.com/create-use-macvlan-network-in-docker/
Спс за доку. Но мне кажется, что надо не роутинг, а достаточно нат-a. Я ставил pi-hole и юдп днс запросы в нее приходили в лог админки, даже снифер не понадобился, а ответы нет - явный признак нехватки ната.
Как сделать NAT, если сеть хоста и сеть контейнеров одинаковые?
Ну может оно между родительским и созданным на хосте macvlan бегает и где-то там трансляция надо? Я не знаю) Надо будет разобраться))
Насколько я помню, IP-адреса на физическом и macvaln интерфейсах хоста были разные. Этого было достаточно для решения моей задачи.
Эта инструкция, а где здесь gateway нужно пропустить?
Емнип если руками создаешь c помощью ip, то создается без гейтвея. Но такой вариант живет до перезагрузки. А когда будешь создавать с помощью nmcli , то с гейтвеем и надо явно задать для него пустое значение.
А можно подробнее. Ткни пальцем в этой инструкции где не нужно вручную вводить gateway?
Ну когда на хосте создаешь macvlan который надо для доступности контейнера с хоста или из локалки. В примере с ip оно создаст интерфейс без дефолтного гейтвея для него. А если будешь с nmcli создавать, то оно создаст интерфейс и соединение для него с гейтвеем... По идее если просто повторяешь мануал, то можешь не паритсья, это просто на будущее замечание, может пригодится ))
Я пока не читал. Вот мои какие-то записи. 1) способ, как в инструкциях sudo ip link add mac0 link enp3s0 type macvlan mode bridge sudo ip addr add 192.168.1.78/24 dev mac0 sudo ifconfig mac0 up 2) способ, если захочешь чтобы автоматом поднимался ифейс после ребута name=macvlan0 parent=enp3s0 ip="192.168.1.75/24" nmcli connection add type macvlan con-name $name ifname $name mode bridge dev $parent ip4 $ip ipv4.gateway "" nmcli connection modify macvlan0 connection.autoconnect yes nmcli connection up $name ну как-то так у меня было, я сам один раз делал )
Я тебя понял спасибо. Сегодня проверю.
Обсуждают сегодня