Centos

如何將流量從 CentOS Docker 容器中的 VM 重定向到主機埠?

  • July 19, 2020

我有這種情況:

  • 安裝了 ufw 的執行 Debian 的主機。
  • 一個 CentOS docker 容器,它有一個在特定 IP 上工作的 VM。
  • 此 VM 有一個在容器上執行的應用程序呼叫https://app.domain將條目放入hosts文件 ( APP_IP )。

我想呼叫localhost:7000我的主機並使用容器中的 VM 應用程序。

我已經在使用-p 7000:7000.

我閱讀iptables並嘗試重定向容器上的流量,但沒有成功!

iptables如果這是這種方式…任何人都可以舉一個我應該執行的命令範例嗎?


**編輯:**在之後我嘗試了:

IP_CONTAINER=xxx.xxx.xxx.xxx
APP_IP=xxx.xxx.xxx.xxx

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING --protocol tcp --destination $APP_IP --dport 80 --source $IP_CONTAINER --jump DNAT --to-destination $APP_IP
iptables -t nat -A POSTROUTING -j MASQUERADE

但仍然沒有成功!

我能夠****使用在 CentOS 容器中正確配置的代理從主機連接到 CentOS Docker 容器內的 VM 內的應用程序,該代理將流量從容器的公開 IP 轉發到 VM ip 和應用程序埠!

所以方法是……容器內的代理!

我將HAProxy與此配置一起用於haproxy.conf

global
log 127.0.0.1 local0
debug

defaults
log global
mode http
timeout connect 5000
timeout check 5000
timeout client 30000
timeout server 30000

frontend apps
bind CONTAINER_IP:80
bind CONTAINER_IP:443
option tcplog
mode tcp
default_backend apps

backend apps
mode tcp
balance roundrobin
option ssl-hello-chk
server webserver1 APP_IP:APP_PORT check

frontend api
bind CONTAINER_IP:6443
option tcplog
mode tcp
default_backend api

backend api
mode tcp
balance roundrobin
option ssl-hello-chk
server webserver1 APP_IP:APP_PORT check

我已經為容器啟用了轉發:

$ sysctl net.ipv4.conf.all.forwarding=1
$ sudo iptables -P FORWARD ACCEPT

引用自:https://unix.stackexchange.com/questions/599092