Разрешить исходящие контейнерные сети через 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, предоставленный в контейнере.