@misant
SysAdOps

В чем причина отсутствия доступа к внешним сетям при подключении к OpenVPN в Docker контейнере?

Изучаю Docker. Для понимания взял реальную задачу - перенести сервисы с VPS DO на VPS Vultr. Для будущей простоты подобных переездов в том числе.

Начал с простого - персональный VPN, на базе OpenVPN. Собираю из Dockerfile образ (копирую актуальные настройки и ключи из работающего сервера):

FROM debian:latest
MAINTAINER Evgeniy Bekhterev
RUN apt-get update && apt-get install -y openvpn easy-rsa
COPY /openvpn/* /etc/openvpn/
ENTRYPOINT service openvpn start && bash

EXPOSE 1194/udp

Далее стартую контейнер, сервис openvpn стартован, интернет виден из контейнера. Подключаюсь клиентом, получаю 10.8.0.6, но пингую с клиента только 10.8.0.1 (endpoint контейнера).

Чую проблема где-то с натом или маршрутизацией.
  • Вопрос задан
  • 644 просмотра
Решения вопроса 1
@misant Автор вопроса
SysAdOps
Нашел сам, как и думал нужен нат изнутри контейнера. Правильный Dockerfile:

FROM debian:latest
MAINTAINER Evgeniy Bekhterev
RUN apt-get update && apt-get install -y openvpn easy-rsa iptables
ENTRYPOINT iptables -A FORWARD -i tun0 -j ACCEPT
ENTRYPOINT iptables -A FORWARD -i tun0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
ENTRYPOINT iptables -A FORWARD -i eth0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
ENTRYPOINT iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
COPY /openvpn/* /etc/openvpn/
ENTRYPOINT service openvpn start && bash
EXPOSE 1194/udp

Ответ нашел при помощи: Как завернуть трафик в OpenVPN туннель?
PS: при повторном создании контейнера выяснилось, что забыл указать само правило ната
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы