У меня есть контейнер LXC ( 10.0.3.2
), работающий на хосте. Служба работает внутри контейнера в порту 7000
.
С хоста ( 10.0.3.1
, lxcbr0
) я могу связаться с сервисом:
$ telnet 10.0.3.2 7000
Trying 10.0.3.2...
Connected to 10.0.3.2.
Escape character is '^]'.
Я хотел бы сделать сервис, работающий внутри контейнера, доступным для внешнего мира. Поэтому я хочу перенаправить порт 7002
на хосте на порт 7000
на контейнере:
iptables -t nat -A PREROUTING -p tcp --dport 7002 -j DNAT --to 10.0.3.2:7000
Что приводит к ( iptables -t nat -L
):
DNAT tcp -- anywhere anywhere tcp dpt:afs3-prserver to:10.0.3.2:7000
Тем не менее, я не могу получить доступ к службе с хоста, используя перенаправленный порт:
$ telnet 10.0.3.1 7002
Trying 10.0.3.1...
telnet: Unable to connect to remote host: Connection refused
Я чувствую, что мне здесь не хватает чего-то глупого. Какие вещи я должен проверить? Какова хорошая стратегия для устранения этих ситуаций?
Для полноты, вот как iptables
установлены на хосте:
iptables -F
iptables -F -t nat
iptables -F -t mangle
iptables -X
iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o lxcbr0 -j MASQUERADE
iptables -t nat -A PREROUTING -p tcp --dport 7002 -j DNAT --to 10.0.3.2:7000
iptables
port-forwarding
lxc
Роберто Алои
источник
источник
INPUT
цепь? Может быть, политикаREJECT
там.ACCEPT
FORWARD
цепь. Также проверьте , если IP - экспедиторская включено:cat /proc/sys/net/ipv4/ip_forward
.ip_forward
настроен на1
FORWARD
Политика такжеACCEPT
Ответы:
Кажется, вы заблокировали порт 7002 на 10.0.3.1, так как ваша политика по умолчанию - DROP
Попробуйте добавить его в правила INPUT:
источник
Я столкнулся с той же проблемой. Я еще не нашел решения, но после я записываю некоторые наблюдения.
У меня есть хост-
${host}
машина (Ubuntu 12.04), и она запускает гостевую машину через LXC. Гость включенIP 10.0.3.248
и шлюз есть10.0.3.1
. Я запускаю веб-сервер в гостевой системе и хочу перенести трафик вперед с${host}:8888
на10.0.3.248:80
. Ниже приведены соответствующие записи iptables:В текущей конфигурации я могу успешно зайти на веб-сервер 10.0.3.248:80 с другого физического компьютера. Тем не менее, это не удается, когда я пытаюсь посетить 10.0.3.248:80 из
${host}
. Может быть, вы можете попробовать посетить этот сервис внутри LXC с другого компьютера.Насколько я понимаю, при посещении
${host}
пакета пакет проходит через петлевой интерфейс и напрямую входит в цепочку INPUT. Хотя я разрешаю все на INPUT, нет службы прослушивания${host}:8888
. С Wireshark, я вижу, RST отправлено получено. Когда я захожу с другого физического компьютера, пакет переходит в цепочку PREROUTING и, как и ожидалось, был обработан DNAT.Один связанный пост:
источник
Мне нужно было добавить правило FORWARD
источник
хорошо, мои 5 центов с 2018 года:
Я установил LXC и поиграл с ним. Мой контейнер IP
10.0.0.10
Я добавил это правило:
Это не сработало. Затем я понял, что даже политика FORWARD является ACCEPT, есть правило, которое блокирует все правила FORWARD.
Поэтому мне пришлось ввести правило наверху:
Теперь вперед
host:81
->10.0.0.10:22
работает.источник
Ваш контейнер доступен из локальной сети через интерфейс моста хоста и, следовательно, подключен к той же подсети, что и хост.
Вам нужно, чтобы ваш маршрутизатор перенаправлял эти порты в ваш контейнер.
источник