Разрешить исходящие контейнерные сети через vpnkit

У меня есть встроенная виртуальная машина Linux с пользовательским контейнером service что я пытаюсь бежать.

services:
  ...

  - name: net-manager
    image: aemengo/net-manager:6bcc223a83e8a303a004bc6f6e383a54a3d19c55-amd64
    net: host
    capabilities:
      - all
    binds:
      - /usr/bin/vpnkit-expose-port:/usr/bin/vpnkit-expose-port # userland proxy
      - /usr/bin/vpnkit-iptables-wrapper:/usr/bin/iptables # iptables wrapper
      - /var/vpnkit:/port # vpnkit control 9p mount
      - /var/run:/var/run
    command:
      - sleep
      - 1d

С базовым изображением Alpine, точка net-manager служба заключается в том, чтобы разрешить общедоступное подключение к Интернету виртуальных адаптеров Ethernet, которые я раскручиваю на host: net Пространство имен. Моя текущая попытка следующая (внутри контейнера):

$ sysctl net.ipv4.conf.all.forwarding=1
$ /usr/bin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Точно так же, как вы сделали бы с виртуальной машиной, которая не использовала vpnkit, но, похоже, не было никакого заметного эффекта от этого. Например, nc -v google.com все еще терпит неудачу. Что мне не хватает? vpnkit монтируется и пересылается, как показано в примере, приведенном ниже:

https://github.com/linuxkit/linuxkit/blob/master/examples/docker-for-mac.yml

1 ответ

Решение

Оказывается, проблема была в этой строке здесь:

binds:
...

/usr/bin/vpnkit-iptables-wrapper:/usr/bin/iptables

Переопределяя, какой исполняемый файл iptables был предоставлен docker, все происходило неправильно, хотя команды не сообщали о проблемах. Это должно быть использовано для чего-то особенного, как было упомянуто в их документах.

Исправление состояло в том, чтобы удалить эту привязку и запустить iptables, предоставленный в контейнере.

Другие вопросы по тегам