Proxmox 4.x: Compartir IP pública del anfitrión con los contenedores y tener acceso a Internet
14/10/2016
|Por Yoné Rocha
En la máquina anfitrión.
Shell
1 2 | mv /etc/sysctl.conf /etc/sysctl.conf.original nano /etc/sysctl.conf |
Asignamos a 1 el ip_forward para que el anfitrión actue como puerta de acceso a Internet de los contenedores:
Vim
1 2 3 4 5 6 7 8 | net.ipv4.ip_forward = 1 net.ipv4.conf.default.proxy_arp = 0 net.ipv4.conf.all.rp_filter = 1 kernel.sysrq = 1 net.ipv4.conf.default.send_redirects = 1 net.ipv4.conf.all.send_redirects = 0 net.ipv4.icmp_echo_ignore_broadcasts=1 net.ipv4.conf.default.forwarding=1 |
Shell
1 | nano /etc/network/interfaces |
Vim
1 2 3 4 5 6 7 | #creo un alias de la interfaz vmbr0 y le asigno la ip que usaré en local auto vmbr0:0 iface vmbr0:0 inet static address 192.168.1.1 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 |
Shell
1 2 3 4 5 6 7 8 9 10 11 | #iptable para enrutar y dar acceso a internet iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o vmbr0 -j SNAT --to-source 46.105.103.69 ifup vmbr0:0 ifconfig -a #Habilito los puertos del servidor web y ssh. #Con esto el contenedor deja de tener Internet, pero puedo usar Apache iptables -t nat -A PREROUTING -i vmbr0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.2:80 iptables -t nat -A PREROUTING -i vmbr0 -p tcp -m tcp --dport 2222 -j DNAT --to-destination 192.168.1.2:22 |
Guardar iptables y indicar que se restaruen cuando de levante la interfaz de red
Shell
1 2 | iptables-save > /etc/iptables.rules nano /etc/network/interfaces |
Contenido de /etc/network/interfaces:
Vim
1 2 3 | auto vmbr0 iface vmbr0 inet static pre-up iptables-restore < /etc/iptables.rules #restaurar iptables |
En el contenedor:
Script en anfitrión para iniciar/para iptables (Opcional):
Shell
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #!/bin/sh case "$1" in start) echo "Starting iptables NAT" #----------------------------------------------------------------- #START NAT ///////////////////////////// #----------------------------------------------------------------- /sbin/iptables -t nat -A POSTROUTING -s '192.168.1.0/24' -o vmbr0 -j SNAT --to 99.99.99.99 #Posibilita que tenga internet en los contenedores #VM 100-----------+ /sbin/iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 2222 -j DNAT --to 192.168.1.2:22 /sbin/iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 80 -j DNAT --to 192.168.1.2:80 ;; stop) echo "Stopping iptables NAT" #----------------------------------------------------------------- #STOP NAT ///////////////////////////// #----------------------------------------------------------------- /sbin/iptables -t nat -D POSTROUTING -s '192.168.1.0/24' -o vmbr0 -j SNAT --to 99.99.99.99 #VM 100-----------+ /sbin/iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 2222 -j DNAT --to 192.168.1.2:22 /sbin/iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 80 -j DNAT --to 192.168.1.2:80 ;; *) echo "Usage: /etc/init.d/nat-container.sh {start|stop}" exit 2 ;; esac exit 0 |
Otros recursos para trabajar con iptables:
Shell
1 2 3 4 5 | #Listar iptables iptables -t nat -L -n -v #Limpiar iptables iptables -F && iptables -X && iptables -t nat -F && iptables -t nat -X && iptables -t mangle -F && iptables -t mangle -X && iptables -P INPUT ACCEPT && iptables -P FORWARD ACCEPT && iptables -P OUTPUT ACCEPT |
Fuentes