Iptables não pode encaminhar de / para LAN interna com proxmox

4

Eu tenho um host com proxmox com um único ip público e alguma máquina virtual instalada em servidores web e várias doimains, a primeira VM é um proxy com haproxy que encaminha o pedido para outra VM e no host proxmox eu tenho esse script 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

A lan interna é 192.168.1.0, a interface eth0 tem ip público, o proxy é 192.168.1.100 e a outra máquina é 101, 102, 103, etc.

Em outra VM eu instalei um site que funciona se eu conectar de externo, em vez disso, se eu lançar curl www.mydomain.com da mesma VM, eu tenho curl: (7) Failed connect to www.mydomain.com:80 ; Conexão recusada, acho que é um problema do iptables

    
por hellb0y77 28.02.2015 / 10:26

2 respostas

1

Finalmente encontrei uma solução ou solução alternativa. Eu não sei o que está causando isso (Tem a ver com algum Proxmox ou frewall Debian ou algo assim), minha configuração antiga com OpenVZ simples funcionou bem.

O problema é ao usar serviços na VM A de outra VM B no mesmo servidor (mesmo IP externo). Se eu usei um proxy em outro servidor, tudo correu bem, porque o IP do outro proxy é diferente do do servidor.

Portanto, não deixe a chamada para o serviço sair do servidor. Eu configurei um serviço DNS no servidor com dsnmasq. A chamada da VM B agora atinge o DNS no servidor e obtém o IP da VM A. Não se esqueça de definir o servidor de nomes para cada VM para o servidor local!

Esta solução tem o benefício adicional de ganhar alguma velocidade com o armazenamento em cache de todas as chamadas DNS das VMs no servidor.

Instruções detalhadas:

Instale o dnsmasq no servidor

# apt-get install dnsmasq
# update-rc.d dnsmasq enable

configure o dnsmasq para atuar como servidor DNS e cache:

# cp /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
# vi /etc/dnsmasq.conf

remova o comentário das seguintes linhas:

domain-needed
bogus-priv

Diga para ouvir o IP interno do próprio servidor:

listen-address=10.0.186.254   # internal IP
listen-address=127.0.0.1      # must be added too

adicione localhost como um servidor de nomes:

# vi /etc/resolv.conf

search mydomain.com
nameserver 127.0.0.1    # this line added
nameserver 8.8.8.8

adicione entradas para domínios que devem ser roteados para seu proxy local (10.0.186.1) ou 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

Não se esqueça de reiniciar o dnsmasq depois de alterar o / etc / hosts

# service dnsmasq restart

Certifique-se de adicionar 127.0.0.1 como nameserver (primário) a todas as VMs na interface web Proxmox!

    
por 10.03.2015 / 13:11
0

Eu tive o mesmo problema com um servidor Proxmox que hospedava alguns contêineres. Um deles era um servidor Gitlab.

De um dos contêineres ou até mesmo do host, não consegui clonar nenhum dos repositórios.

A solução era simples: abra / etc / hosts e redirecione todos os seus domínios / subdomínios para o seu proxy:

192.168.0.100 mydomain.com www.mydomain.com subdomain.mydomain.com

Funciona como um encanto.

    
por 27.07.2017 / 19:03