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

