3 votes

Comment acheminer le trafic hôte sur lxc ?

Quelques informations mises à jour :

Last login: Wed Aug 31 18:10:24 2022
root@pve:~# ip route
default via 192.168.132.1 dev vmbr0 proto kernel onlink
192.168.132.0/24 dev vmbr0 proto kernel scope link src 192.168.132.4
root@pve:~#
root@pve:~# ping 10.0.0.26
PING 10.0.0.26 (10.0.0.26) 56(84) bytes of data.
64 bytes from 10.0.0.26: icmp_seq=1 ttl=64 time=0.044 ms
64 bytes from 10.0.0.26: icmp_seq=2 ttl=64 time=0.051 ms

10.0.0.26 est l'adresse IP que l'interface wan de l'openwrt lxc a reçu du routeur amont, elle a répondu à la requête de l'hôte pve, je pense que c'est à travers le loopback parce que ping vers 10.0.0.1 ou n'importe quel 10.0.x.x ne recevra pas de réponse.

--

Je me retrouve dans la situation où je ne peux pas migrer ma vm openwrt vers lxc . J'ai utilisé la vm pour router et gérer le réseau de l'hôte via ses ponts virtuels mais lorsque j'ai utilisé la même configuration sur lxc, cela ne fonctionne pas.

/etc/hosts

127.0.0.1 localhost.localdomain localhost
192.168.132.4 pve

# The following lines are desirable for IPv6 capable hosts

::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

/etc/network/interfaces

iface enp3s0 inet manual

auto vmbr0
iface vmbr0 inet static
        address 192.168.132.4/24
        gateway 192.168.132.1
        bridge-ports none
        bridge-stp off
        bridge-fd 0

auto vmbr1
iface vmbr1 inet manual
        bridge-ports enp3s0
        bridge-stp off
        bridge-fd 0

210.conf

cores: 1
memory: 128
net0: name=eth0,bridge=vmbr1,hwaddr=CA:2B:9D:E6:52:08,type=veth
net1: name=eth1,bridge=vmbr0,hwaddr=FA:24:4E:32:4B:9B,type=veth
ostype: unmanaged
rootfs: datastore1:210/vm-210-disk-0.raw,size=204M
swap: 512

/etc/config/network du conteneur OpenWrt

config interface 'loopback'
    option ifname 'lo'
    option proto 'static'
    option ipaddr '127.0.0.1'
    option netmask '255.0.0.0'

config interface 'wan'
    option ifname 'eth0'
    option proto 'dhcp'

config interface 'wan6'
    option proto 'dhcpv6'
    option ifname '@wan'
    option reqaddress 'try'
    option reqprefix 'auto'

config interface 'lan'
    option proto 'static'
    option ifname 'eth1'
    option type 'bridge'
    option netmask '255.255.255.0'
    option ipaddr '192.168.132.1'

L'adresse IP de mon routeur en amont est 10.0.0.1.

Ping depuis le conteneur (192.168.132.1) vers n'importe où (y compris l'hôte, le réseau local en amont et le réseau public) => fonctionne.

Ping depuis l'hôte (192.168.132.4) vers 192.168.132.1 => fonctionne

Ping de l'hôte (192.168.132.4) vers l'extérieur 10.0.0.1 => ne fonctionne pas.

Cela avait l'habitude de fonctionner sur la vm, mais il semble que ce ne soit pas le cas sur lxc.

Veuillez m'éclairer sur la manière de résoudre ce problème

La même question que j'ai posée sur le forum

0voto

Ce qu'il vous faut, c'est ce qu'on appelle l'épinglage NAT (aussi appelé bouclage NAT, réflexion NAT) :

NAT loopback, [...] is a feature in many consumer routers which permits the access of a service via the public IP address from inside the local network.

Pourquoi cela ne fonctionne-t-il pas ? La règle DNAT IPTables que vous avez fournie dans votre question spécifie une interface entrante à laquelle cette règle doit s'appliquer : -i eth0. Cependant, votre trafic ne provient pas de eth0, mais d'une interface réseau virtuelle ou autre. Il suffit peut-être de supprimer cette restriction à eth0 pour que le système fonctionne.

On peut aussi ajouter une règle distincte à lxcbr0 :

iptables -t nat -A PREROUTING -i lxcbr0 -p tcp --dport 443
--destination 80.x.x.x -j DNAT --to 10.0.3.100:443

0voto

Ken Kin Points 21

Je viens de résoudre le problème en redémarrant simplement le service de pare-feu jusqu'à ce que les politiques de post-routage par défaut soient appliquées. J'ajoute les déclarations suivantes à mon script de démarrage :

until $(iptables -t nat -L PREROUTING |grep -q 'zone_lan_prerouting')
do
    service firewall restart
    sleep 1
done

Alors /etc/rc.local ressemblerait à ceci :

# Put your custom commands here that should be executed once
# the system init finished. By default this file does nothing.

until $(iptables -t nat -L PREROUTING |grep -q 'zone_lan_prerouting')
do
    service firewall restart
    sleep 1
done

exit 0

Il semble que les changements de réseau ne soient pas détectés lorsqu'il s'agit d'un lxc et que le redémarrage du service ne soit donc pas déclenché, aucune autre politique que celles par défaut n'est nécessaire.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X