Разрешить исходящие контейнерные сети через vpnkit - PullRequest
0 голосов
/ 08 сентября 2018

У меня есть встроенная виртуальная машина linuxkit с пользовательским контейнером 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 заключается в том, чтобы предоставить общедоступное подключение к Интернету виртуальным сетевым адаптерам, которые я раскручиваю в пространстве имен 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 Ответ

0 голосов
/ 09 сентября 2018

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

binds:
...

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

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

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

...