単一のパブリックIPを持つproxmoxホストと、Webサーバーと複数のドメインがインストールされているいくつかのVMがあります。最初のVMは、要求を別のVMに転送するhaproxyを持つプロキシです。 Proxmoxホストにはこのiptablesスクリプトがあります。
iptables -F
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 22100 -j DNAT --to-destination 192.168.1.100:22
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j DNAT --to-destination 192.168.1.100:443
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 22101 -j DNAT --to-destination 192.168.1.101:22
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 22102 -j DNAT --to-destination 192.168.1.102:22
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 22103 -j DNAT --to-destination 192.168.1.103:22
iptables-save > /etc/iptables.rules
内部LANは192.168.1.0、インターフェイスeth0にはパブリックIPがあり、プロキシは192.168.1.100、その他のシステムは101、102、103などです。
curl www.mydomain.com
他のVMには、私が持っているのと同じVMから起動するのではなく、外部から接続すると機能するWebサイトがインストールされていますcurl: (7) Failed connect to www.mydomain.com:80
。接続が拒否されますが、これはiptablesに問題があると考えられます。
ベストアンサー1
ついに解決策や解決策を見つけました。この問題の原因は何であるかわかりません(ProxmoxやDebianファイアウォールなどに関連しています)。通常のOpenVZを使った以前の設定はうまくいきました。
問題は、同じサーバー(同じ外部IP)の別のVM BがVM Aのサービスを使用している場合です。他のサーバーでプロキシを使用すると、他のプロキシのIPがサーバーのIPと異なるため、すべてがうまくいきます。
したがって、サービス呼び出しがサーバーの範囲を超えないようにしないでください。 dsnmasqを使用してサーバーにDNSサービスを設定します。 VM B の呼び出しはサーバーの DNS に移動し、VM A の IP を取得します。各VMのネームサーバーをローカルサーバーに設定することを忘れないでください。
このソリューションには、サーバー上の仮想マシンへのすべてのDNS呼び出しをキャッシュして速度を向上させるという利点があります。
詳細な説明:
サーバーにdnsmasqをインストールする
# apt-get install dnsmasq
# update-rc.d dnsmasq enable
dnsmasq を DNS サーバーとキャッシュとして構成します。
# cp /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
# vi /etc/dnsmasq.conf
次の行のコメントを解除します。
domain-needed
bogus-priv
サーバー自体の内部IPをリッスンします。
listen-address=10.0.186.254 # internal IP
listen-address=127.0.0.1 # must be added too
localhostをネームサーバーとして追加します。
# vi /etc/resolv.conf
search mydomain.com
nameserver 127.0.0.1 # this line added
nameserver 8.8.8.8
ローカルプロキシ(10.0.186.1)または仮想マシンにルーティングする必要があるドメインエントリを追加します。
# vi /etc/hosts
10.0.186.1 api.mydomain.com # these all point to the proxy
10.0.186.1 loginservice.mydomain.com
10.0.186.1 api.otherdomain.com
/etc/hostsを変更した後にdnsmasqを再起動することを忘れないでください。
# service dnsmasq restart
Proxmox Webインターフェイスのすべての仮想マシンに127.0.0.1を(デフォルト)ネームサーバーとして追加します。