LINUX.ORG.RU
ФорумAdmin

Маршрутизация ethernet <-> docker

 , , , ,


0

1

Помогите настроить маршрутизацию.

Нужно слить прошивку с ip камеры. Внутри у неё есть u-boot, который может отправить прошивку на tftp сервер. Для этой цели был создан docker контейнер с сервером tftp. С компьютера, на котором крутится контейнер доступ к tftp есть. Проверил на чтение и запись.

Но камера, подключённая к ethernet порту этого же компьютера не может ничего закачать на tftp сервер. Причём файл создаётся, но имеет нулевой размер. Если поднимать сервер на хосте без докера, то всё работает.

Настройки Ethernet порта:

IP 192.168.0.100
mask 255.255.255.0
Настройки контейнера:
IP 172.20.0.2
mask 255.255.0.0
В камере выставлены следующие адреса:
ipaddr=192.168.0.10      // IP камеры
netmask=255.255.255.0
gatewayip=192.168.0.100  // IP шлюза == IP ethernet порта
serverip=172.20.0.2      // Адрес контейнера с tftp сервером
Компьютер:
> netstat -nr
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG        0 0          0 wlp3s0
172.17.0.0      0.0.0.0         255.255.0.0     U         0 0          0 docker0
172.20.0.0      0.0.0.0         255.255.0.0     U         0 0          0 br-50e78d3a68c2
192.168.0.0     0.0.0.0         255.255.255.0   U         0 0          0 enp2s0
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 wlp3s0

ifconfig

http://pastebin.com/tw4nSPzY

Inspect сетевой части контейнера

docker inspect tftp-server

http://pastebin.com/KvHiF00K

IP forward включен

> cat /proc/sys/net/ipv4/ip_forward
1

★★★★★

Последнее исправление: ox55ff (всего исправлений: 1)

контейнер точно слушает порт? что с фаерволом? не проще ли тупо прокинуть порт на хост через -p?

upcFrost ★★★★★
()

Есть подозрение что докер получает но не может отправлять пакеты на ружу (возможно нету роута или фаервол)

zaz ★★★★
()
Последнее исправление: zaz (всего исправлений: 1)

покажи netstat -aentp| grep docker

и да, правильно сказали - проще забиндить порт контейнера на хост

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от upcFrost

Добавил проброс портов. Стартую через docker-compose:

version: "2"

services:
  tftp-server:
    container_name: tftp-server
    image: tftp:ext
    build: ../../img/tftp/ext
    volumes:
      - ./data:/srv/tftp
    ports:
      - "69:69/udp"
      - "69:69/tcp"

После запуска docker ps говорит следующее:

CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                                    NAMES
814ad16d4e88        tftp:ext            "in.tftpd -c -p -u ro"   About a minute ago   Up About a minute   0.0.0.0:69->69/tcp, 0.0.0.0:69->69/udp   tftp-server

Результат тот же. Файл создаётся, но не заполняется.

ox55ff ★★★★★
() автор топика
Ответ на: комментарий от Deleted
sudo netstat -aentp | grep docker
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode      PID/Program name
tcp6       0      0 :::69                   :::*                    LISTEN      0          89433      7037/docker-proxy

Эта строчка появилась только после проброса портов. Адреса какие-то IPv6 или я ничего не понимаю.

Посмотрел wireshark на ethernet порт. Пишет

20 15.027503060 172.20.0.2 192.168.0.10 ICMP 74 Destination unreachable (Port unreachable)

ox55ff ★★★★★
() автор топика
Ответ на: комментарий от ox55ff

Адреса какие-то IPv6 или я ничего не понимаю.

ну попробуй на него tftp клиентом подцепиться на ipv4 адресс локалхоста сначала

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

Если подключаться к серверу через IP ethernet порта (192.168.0.100), то upload не работает, а download работает.

Если подключаться к серверу через IP контейнера (172.20.0.2), то и upload и download работают.

ox55ff ★★★★★
() автор топика
Ответ на: комментарий от ox55ff

Адреса какие-то IPv6 или я ничего не понимаю

Это не ipv6 адреса, это ipv4-mapped ipv6 адрес. Собственно один из лучших способов вешаться для современного софта с поддержкой ipv6 и ipv4, вместо того чтобы разделять поддержку в коде.

anonymous_sama ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.