Bien le bonjour tout le monde.
Voila je commence à devenir fou avec iptables, le pire sur un truc que j'ai déjà fait, qui fonctionnait... mais j'ai voulu repartir de zéro. Et la je ne sais pas du tout pourquoi cela bloque.
Alors pour vous faire un récap de ce que cela doit faire au final :
J'ai un serveur, avec LXC qui tourne, et pour le moment, pour les test, juste un www et un mysql
IP du serveur : 192.168.1.4
IP de br0 : 192.168.10.254
IP WWW : 192.168.10.3
IP MYSQL : 192.168.10.4
Du coup, voici toutes la mise en place, avec les tests, je vois ou cela coince, mais j'ai aucune idée du pourquoi
- Mise en place des dépots backport
echo "deb http://httpredir.debian.org/debian jessie-backports main contrib non-free" >> /etc/apt/sources.list && apt-get update
- Installation LXC
apt-get install lxc=1:2.0.6-1~bpo8+1 bridge-utils
- Vérification LXC
Kernel configuration not found at /proc/config.gz; searching...
Kernel configuration found at /boot/config-3.16.0-4-amd64
--- Namespaces ---
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Network namespace: enabled
Multiple /dev/pts instances: enabled
--- Control groups ---
Cgroup: enabled
Cgroup clone_children flag: enabled
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: enabled
Cgroup cpuset: enabled
--- Misc ---
Veth pair device: enabled
Macvlan: enabled
Vlan: enabled
Bridges: enabled
Advanced netfilter: enabled
CONFIG_NF_NAT_IPV4: enabled
CONFIG_NF_NAT_IPV6: enabled
CONFIG_IP_NF_TARGET_MASQUERADE: enabled
CONFIG_IP6_NF_TARGET_MASQUERADE: enabled
CONFIG_NETFILTER_XT_TARGET_CHECKSUM: enabled
FUSE (for use with lxcfs): enabled
--- Checkpoint/Restore ---
checkpoint restore: enabled
CONFIG_FHANDLE: enabled
CONFIG_EVENTFD: enabled
CONFIG_EPOLL: enabled
CONFIG_UNIX_DIAG: enabled
CONFIG_INET_DIAG: enabled
CONFIG_PACKET_DIAG: enabled
CONFIG_NETLINK_DIAG: enabled
File capabilities: enabled
Note : Before booting a new kernel, you can check its configuration
usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig
- Activation du forward dans le fichier /etc/sysctl.conf
- Application des modifications
- Activation du masquerade eth0
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Résultat
15:06 [ root @ dev ][ /etc/apt ] > iptables -L -t nat -nv
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 1 packets, 160 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
1 160 MASQUERADE all -- * eth0 0.0.0.0/0
- Activation de l'interface br0
Fichier /etc/network/interfaces
auto br0
iface br0 inet static
address 192.168.10.254
netmask 255.255.255.0
bridge_ports none
Avec un ifup
br0 Link encap:Ethernet HWaddr 02:d3:f7:cc:24:91
inet adr:192.168.10.254 Bcast:192.168.10.255 Masque:255.255.255.0
adr inet6: fe80::d3:f7ff:fecc:2491/64 Scope:Lien
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:0
RX bytes:0 (0.0 B) TX bytes:508 (508.0 B)
Création du WWW
lxc-create -n www -t debian -- -r wheezy
Config réseau WWW
lxc.network.type = veth
# Nom de l'interface pont
lxc.network.link = br0
# IP conteneur
lxc.network.ipv4 = 192.168.10.3/24
# Définissez la passerelle pour avoir un accès à Internet
lxc.network.ipv4.gateway = 192.168.10.254
Vérification
15:29 [ root @ dev ][ /etc/apt ] > lxc-ls --fancy
NAME STATE AUTOSTART GROUPS IPV4 IPV6
www RUNNING 0 - 192.168.10.3 -
La on regarde si le CT arrive à joindre le monde merveilleux d'internet
15:29 [ root @ dev ][ /etc/apt ] > lxc-attach -n www
root@www:/etc/apt# apt-get update
Réception de : 1 http://security.debian.org wheezy/updates Release.gpg [1 554 B]
Réception de : 2 http://security.debian.org wheezy/updates Release [39,0 kB]
Réception de : 3 http://security.debian.org wheezy/updates/main amd64 Packages [457 kB]
Atteint http://httpredir.debian.org wheezy Release.gpg
Atteint http://httpredir.debian.org wheezy Release
Réception de : 4 http://security.debian.org wheezy/updates/main Translation-en [251 kB]
Atteint http://httpredir.debian.org wheezy/main amd64 Packages
Réception de : 5 http://httpredir.debian.org wheezy/main Translation-fr [751 kB]
Réception de : 6 http://httpredir.debian.org wheezy/main Translation-en [3 846 kB]
5 346 ko réceptionnés en 7s (752 ko/s)
Lecture des listes de paquets... Fait
Mais c'est que ça marche, c'est cool, maintenant on installe apache
root@www:/etc/apt# apt-cache policy apache2
apache2:
Installé : 2.2.22-13+deb7u7
Candidat : 2.2.22-13+deb7u7
On se dit, un petit DNAT et on en parle plus
iptables -t nat -A PREROUTING -i eth0 --dst 192.168.1.4 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.3
On vérifie
15:34 [ root @ dev ][ /etc/apt ] > iptables -L -t nat -nv
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 DNAT tcp -- eth0 * 0.0.0.0/0 192.168.1.4 tcp dpt:80 to:192.168.10.3
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
441 27711 MASQUERADE all -- * eth0 0.0.0.0/0 0.0.0.0/0
Et la c'est le drame, cela ne marche pas, on ne peut pas joindre 192.168.1.4 (qui doit renvoyer vers 10.3) depuis un client 1.69 par exemple.
Par contre, maintenant si je passe le masquerade sur br0, j'arrive à joindre 192.168.1.4 qui redirige bien vers le CT WWW 10.3. Mais par contre, dans un conteneur, on ne peut plus faire un simple apt-get update
Maintenant, je change encore mon masquerade pour avoir ceci :
17:03 [ root @ dev ][ /home/totof ] > iptables -L -nv
Chain INPUT (policy ACCEPT 1132 packets, 70056 bytes)
pkts bytes target prot opt in out source destination
0 0 LOG tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp spt:80 LOG flags 0 level 4 prefix "INPUT packets"
Chain FORWARD (policy ACCEPT 6166 packets, 5725K bytes)
pkts bytes target prot opt in out source destination
2338 131K LOG tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 LOG flags 0 level 4 prefix "FORWARD packets"
3785 5585K LOG tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp spt:80 LOG flags 0 level 4 prefix "FORWARD packets"
Chain OUTPUT (policy ACCEPT 1347 packets, 821K bytes)
pkts bytes target prot opt in out source destination
0 0 LOG tcp -- * eth0 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 LOG flags 0 level 4 prefix "OUTPUT packets"
17:03 [ root @ dev ][ /home/totof ] > iptables -L -t nat -nv
Chain PREROUTING (policy ACCEPT 19 packets, 1902 bytes)
pkts bytes target prot opt in out source destination
20 1962 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4 prefix "PREROUTING packets"
1 60 DNAT tcp -- eth0 * 0.0.0.0/0 192.168.1.4 tcp dpt:80 to:192.168.10.3
Chain INPUT (policy ACCEPT 1 packets, 240 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4 prefix "OUTPUT NAT packets"
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
19 1722 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4 prefix "POSTROUTING packets"
19 1722 MASQUERADE all -- * * 0.0.0.0/0 0.0.0.0/0
Et la nickel, je peux joindre 1.4 --> 10.3 ET un update depuis un WWW
La ou ça va bloquer, c'est que j'ai un CT MYSQL et un WWW.
CREATE USER 'test'@'192.168.10.3' IDENTIFIED BY 'test';
Query OK, 0 rows affected (0.00 sec)
CREATE DATABASE TEST;
Query OK, 1 row affected (0.00 sec)
GRANT ALL PRIVILEGES ON TEST.* TO 'test'@'192.168.10.3';
Query OK, 0 rows affected (0.00 sec)
FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
root@www:/# mysql -h 192.168.10.4 -u test -p
Enter password:
ERROR 1130 (HY000): Host '192.168.10.254' is not allowed to connect to this MySQL server
Je vois bien que le soucis viens du masquerade, par contre je n'arrive pas a comprendre pourquoi. Je sais que cela fonctionnais bien avant.
A la fin, iptables sera en DROP par défaut, et j'aurais une règle FORWARD ACCEPT uniquement entre WWW et MYSQL pour le port 3306.
Quelqu'un aurais une petite idée ?