Iptables无法使用proxmox从/向内部LAN转发

我有一个主机,带有单个公共IP的proxmox和一些虚拟机安装的whit webservers和多个doimains,第一个VM是带有haproxy的代理,可以将请求转发给其他VM,在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为public ip,代理为192.168.1.100,另一台为101,102,103等.

在另一个虚拟机中我已经安装了一个网站,如果我从外部连接,但是如果我从同一个虚拟机启动卷曲www.mydomain.com我有卷曲:(7)连接到www.mydomain.com:80失败;连接被拒绝,我认为这是iptables的问题

最佳答案
终于找到了解决方案或解决方案.我不知道是什么引起了这个问题(它与som Proxmox或Debian frewall或其他东西有关),我用朴素OpenVZ的旧设置工作得很好.

问题是在同一服务器(相同的外部IP)上从另一个VM B在VM A上使用服务时.如果我在另一台服务器上使用代理,一切顺利,因为其他代理的IP与服务器的IP不同.

所以只是不要让服务的调用超出服务器.我使用dsnmasq在服务器上设置DNS服务.来自VM B的呼叫现在命中服务器上的DNS并获取VM A的IP.
不要忘记将每个VM的名称服务器设置为本地服务器!

此解决方案具有额外的好处,即通过缓存来自服务器上的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)或VM的域添加条目:

# 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

确保将127.0.0.1作为(主)名称服务器添加到Proxmox Web界面中的所有VM!

转载注明原文:Iptables无法使用proxmox从/向内部LAN转发 - 代码日志