OPNsense Forum

International Forums => French - Français => Topic started by: Thatoo on June 11, 2021, 12:43:05 am

Title: Aide dual stack IPv4/IPv6?
Post by: Thatoo on June 11, 2021, 12:43:05 am
Bonsoir,

En m’inspirant largement de Proxmox VE 6 + pfsense sur un serveur dédié (1/2) - Zwindler's Reflection (https://blog.zwindler.fr/2020/03/02/deploiement-de-proxmox-ve-6-pfsense-sur-un-serveur-dedie/) , j’ai écris un tuto en remplaçant PFSense par OPNsense (je ne peux pas joindre le tuto car la limite de pièce jointe à 256kb est trop basse).

Je suis assez fier d’être arrivé au bout mais pas encore complètement satisfait car mon installation est en IPv4 seulement (co;;e le tuto). L’hyperviseur proxmox a bien une IPv6 mais c’est tout, j’aimerais bien faire en sorte de pouvoir attribuer une IPv6 à chaque interface qui en a besoin, à chaque VM ou CT que je souhaite tout en gardant cette idée que tout le trafic doit passer par OPNsense avant de joindre une VM ou une CT.

Est-ce qu’il y a quelqu’un qui saurait m’aider à modifier mon script iptable pour rajouter les règles ip6table qui vont bien et à paramétrer les IPv6 de mes interfaces ainsi que modifier les règles d’OPNsense pour arriver au résultat souhaité?

J’ai fait quelques tentatives mais sans succès pour l’instant.

Mon script iptable dans lequel j’essaie d’intégrer IPv6 ressemble à ça :

Code: [Select]
#!/bin/sh

    # ---------
    # VARIABLES
    # ---------

## Proxmox bridge holding Public IP
PrxPubVBR="vmbr0"
## Proxmox bridge on VmWanNET (OPNsense WAN side)
PrxVmWanVBR="vmbr1"
## Proxmox bridge on PrivNET (OPNsense LAN side)
PrxVmPrivVBR="vmbr2"

## Network/Mask of VmWanNET
VmWanNET="10.0.0.0/30"
VmWanNET6="2a00:c70:1:xxx:xxx:xxx:xxx:1000/127"
## Network/Mmask of PrivNET
PrivNET="192.168.9.0/24"
PrivNET6="2a00:0c70:0001:0xxx:0xxx:0xxx:0xxx:a000/116"
## Network/Mmask of VpnNET
VpnNET="10.2.2.0/24"

## Public IP => Your own public IP address
PublicIP="xxx.xxx.xxx.xxx"
PublicIP6="2a00:c70:1:xxx:xxx:xxx:xxx:1"
## Proxmox IP on the same network than OPNsense WAN (VmWanNET)
ProxVmWanIP="10.0.0.1"
ProxVmWanIP6="2a00:c70:1:xxx:xxx:xxx:xxx:1000"
## Proxmox IP on the same network than VMs
ProxVmPrivIP="192.168.9.1"
## OPNsense IP used by the firewall (inside VM)
OpnVmWanIP="10.0.0.2"
OpnVmWanIP6="2a00:c70:1:xxx:xxx:xxx:xxx:1001"


    # ---------------------
    # CLEAN ALL & DROP IPV6
    # ---------------------

### Delete all existing rules.
iptables -F
ip6tables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
ip6tables -X
### This policy does not handle IPv6 traffic except to drop it.
ip6tables -P INPUT DROP
ip6tables -P OUTPUT DROP
ip6tables -P FORWARD DROP

    # --------------
    # DEFAULT POLICY
    # --------------

### Block ALL !
iptables -P OUTPUT DROP
iptables -P INPUT DROP
iptables -P FORWARD DROP

    # ------
    # CHAINS
    # ------

### Creating chains
iptables -N TCP
iptables -N UDP
ip6tables -N TCP
ip6tables -N UDP

# UDP = ACCEPT / SEND TO THIS CHAIN
iptables -A INPUT -p udp -m conntrack --ctstate NEW -j UDP
ip6tables -A INPUT -p udp -m conntrack --ctstate NEW -j UDP
# TCP = ACCEPT / SEND TO THIS CHAIN
iptables -A INPUT -p tcp --syn -m conntrack --ctstate NEW -j TCP
ip6tables -A INPUT -p tcp --syn -m conntrack --ctstate NEW -j TCP

    # ------------
    # GLOBAL RULES
    # ------------

# Allow localhost
iptables -A INPUT -i lo -j ACCEPT
ip6tables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
ip6tables -A OUTPUT -o lo -j ACCEPT
# Don't break the current/active connections
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
ip6tables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
ip6tables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# Allow Ping - Comment this to return timeout to ping request
#iptables -A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
ip6tables -A INPUT -p ipv6-icmp -j ACCEPT

    # --------------------
    # RULES FOR PrxPubVBR
    # --------------------

### INPUT RULES
# ---------------
# Allow SSH server
iptables -A TCP -i $PrxPubVBR -d $PublicIP -p tcp --dport ${SSHPORT} -j ACCEPT
ip6tables -A TCP -i $PrxPubVBR -d $PublicIP6 -p tcp --dport ${SSHPORT} -j ACCEPT
# Allow Proxmox WebUI fromVPN
iptables -A TCP -i $PrxVmWanVBR -d $ProxVmWanIP -p tcp --dport 8006 -j ACCEPT
ip6tables -A TCP -i $PrxVmWanVBR -d $ProxVmWanIP6 -p tcp --dport 8006 -j ACCEPT

### OUTPUT RULES
# ---------------

# Allow ping out
iptables -A OUTPUT -p icmp -j ACCEPT
ip6tables -A OUTPUT -p ipv6-icmp -j ACCEPT

### Proxmox Host as CLIENT
# Allow HTTP/HTTPS
iptables -A OUTPUT -o $PrxPubVBR -s $PublicIP -p tcp --dport 80 -j ACCEPT
ip6tables -A OUTPUT -o $PrxPubVBR -s $PublicIP6 -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -o $PrxPubVBR -s $PublicIP -p tcp --dport 443 -j ACCEPT
ip6tables -A OUTPUT -o $PrxPubVBR -s $PublicIP6 -p tcp --dport 443 -j ACCEPT
# Allow DNS
iptables -A OUTPUT -o $PrxPubVBR -s $PublicIP -p udp --dport 53 -j ACCEPT
ip6tables -A OUTPUT -o $PrxPubVBR -s $PublicIP6 -p udp --dport 53 -j ACCEPT

### Proxmox Host as SERVER
# Allow SSH
iptables -A OUTPUT -o $PrxPubVBR -s $PublicIP -p tcp --sport ${SSHPORT} -j ACCEPT
ip6tables -A OUTPUT -o $PrxPubVBR -s $PublicIP6 -p tcp --sport ${SSHPORT} -j ACCEPT
# Allow PROXMOX WebUI output to VPN
iptables -A OUTPUT -o $PrxVmWanVBR -s $ProxVmWanIP -p tcp --sport 8006 -j ACCEPT
ip6tables -A OUTPUT -o $PrxVmWanVBR -s $ProxVmWanIP6 -p tcp --sport 8006 -j ACCEPT

### FORWARD RULES
# ----------------

### Redirect (NAT) traffic from internet
# All tcp to OPNsense WAN except ${SSHPORT}
iptables -A PREROUTING -t nat -i $PrxPubVBR -p tcp --match multiport ! --dports ${SSHPORT} -j DNAT --to $OpnVmWanIP
ip6tables -A PREROUTING -t nat -i $PrxPubVBR -p tcp --match multiport ! --dports ${SSHPORT} -j DNAT --to $OpnVmWanIP6
# All udp to OPNsense WAN
iptables -A PREROUTING -t nat -i $PrxPubVBR -p udp -j DNAT --to $OpnVmWanIP
ip6tables -A PREROUTING -t nat -i $PrxPubVBR -p udp -j DNAT --to $OpnVmWanIP6

# Allow request forwarding to OPNsense WAN interface
iptables -A FORWARD -i $PrxPubVBR -d $OpnVmWanIP -o $PrxVmWanVBR -p tcp -j ACCEPT
ip6tables -A FORWARD -i $PrxPubVBR -d $OpnVmWanIP6 -o $PrxVmWanVBR -p tcp -j ACCEPT
iptables -A FORWARD -i $PrxPubVBR -d $OpnVmWanIP -o $PrxVmWanVBR -p udp -j ACCEPT
ip6tables -A FORWARD -i $PrxPubVBR -d $OpnVmWanIP6 -o $PrxVmWanVBR -p udp -j ACCEPT

# Allow request forwarding from LAN
iptables -A FORWARD -i $PrxVmWanVBR -s $VmWanNET -j ACCEPT
#ip6tables -A FORWARD -i $PrxVmWanVBR -s $VmWanNET -j ACCEPT

### MASQUERADE MANDATORY
# Allow WAN network (OPNsense) to use vmbr0 public adress to go out
iptables -t nat -A POSTROUTING -s $VmWanNET -o $PrxPubVBR -j MASQUERADE
#ip6tables -t nat -A POSTROUTING -s $VmWanNET -o $PrxPubVBR -j MASQUERADE

service fail2ban restart
Title: Re: Aide dual stack IPv4/IPv6?
Post by: opnthib on June 22, 2021, 05:54:10 pm
Salut,

Je viens de finir la config de l'IPv6 sur mon installation OPNsense-Proxmox. Par contre c'est de l'autohebergement physique (un odroid H2 pour OPNsense + srv maison proxmox) et je n'ai donc pas eu besoin de iptables!
Donc pour iptables, je suis pas sure de pouvoir aider mais pour opnsense ca devrait aller ... sauf que je vois pas  qu'elle IPv6 publique (avec son masque) t'a été attribuée:

Quote
PublicIP6="2a00:c70:1:xxx:xxx:xxx:xxx:1"
  /? 64 ?
Title: Re: Aide dual stack IPv4/IPv6?
Post by: Thatoo on June 23, 2021, 03:46:34 pm
Merci pour ta réponse mais mon problème pour l'instant est plutôt justement avec proxmox et iptables je pense.

Actuellement, avec, dans /etc/network/interfaces
Code: [Select]
auto lo
iface lo inet loopback

iface eth0 inet manual

auto vmbr0
iface vmbr0 inet static
address xxx.xxx.xxx.yyy/32
gateway zzz.zzz.zzz.zzz
bridge-ports eth0
bridge-stp off
bridge-fd 0
network xxx.xxx.xxx.0
dns-nameservers nnnnnnnnnnnnnnnnnnnnnnnnnnnnn
#Internet

iface vmbr0 inet6 static
address 2a00:c70:1:xxxx:xxxx:xxxx:yyyy:1/96
gateway 2a00:c70:1:xxxx:xxxx:xxxx::1

auto vmbr1
iface vmbr1 inet static
address 10.0.0.1/30
bridge-ports none
bridge-stp off
bridge-fd 0
#WAN

iface vmbr1 inet6 static
address 2a00:c70:1:xxxx:xxxx:xxxx:yyyy:a001/116

auto vmbr2
iface vmbr2 inet static
address 192.168.9.1/24
bridge-ports none
bridge-stp off
bridge-fd 0
post-up /root/opnsense-route.sh
post-up /root/iptables.sh
#LAN

iface vmbr2 inet6 static
address 2a00:c70:1:xxxx:xxxx:xxxx:yyyy:ae01/120


et avec la table de routage ipv6 suivante :
Code: [Select]
$ ip -6 route
::1 dev lo proto kernel metric 256 pref medium
2a00:c70:1:xxxx:xxxx:xxxx:yyyy:ae00/120 via 2a00:c70:1:xxxx:xxxx:xxxx:yyyy:a002 dev vmbr1 metric 1024 pref medium
2a00:c70:1:xxxx:xxxx:xxxx:yyyy:a000/116 dev vmbr1 proto kernel metric 256 pref medium
2a00:c70:1:xxxx:xxxx:xxxx::/96 dev vmbr0 proto kernel metric 256 pref medium
fe80::/64 dev vmbr1 proto kernel metric 256 pref medium
fe80::/64 dev vmbr2 proto kernel metric 256 pref medium
fe80::/64 dev vmbr0 proto kernel metric 256 pref medium
default via 2a00:c70:1:xxxx:xxxx:xxxx:0:1 dev vmbr0 proto kernel metric 1024 onlink pref medium
obtenu en modifiant /root/opnsense-route.sh ainsi :



Code: [Select]
#!/bin/sh

## IP forwarding activation
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding

## Rediriger les paquets destinés au LAN pour l'interface WAN de la PFSense
ip route change 192.168.9.0/24 via 10.0.0.2 dev vmbr1
ip -6 route add 2a00:c70:1:xxxx:xxxx:xxxx:yyyy:ae00/120 via 2a00:c70:1:xxxx:xxxx:xxxx:yyyy:a002 dev vmbr1
ip -6 route del 2a00:c70:1:xxxx:xxxx:xxxx:yyyy:ae00/120 dev vmbr2

## Rediriger les paquets destinés au VPN pour l'interface WAN de la PFsense
ip route add 10.2.2.0/24 via 10.0.0.2 dev vmbr1





et en ouvrant entièrement ip6tables (j'ai commenté toutes les lignes de mon fichier /root/iptables.sh sauf les trois lignes ci-dessous)
Code: [Select]
$ sudo ip6tables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

avec WAN d'OPNsense 2a00:c70:1:xxxx:xxxx:xxxx:yyyy:a002/116 et LAN d'OPNsense à 2a00:c70:1:xxxx:xxxx:xxxx:yyyy:aeff/120, vmbr2 (proxmox) à 2a00:c70:1:xxxx:xxxx:xxxx:yyyy:ae01/120 et une CT à 2a00:c70:1:xxxx:xxxx:xxxx:yyyy:ae08/120 avec gateway vers 2a00:c70:1:xxxx:xxxx:xxxx:yyyy:aeff

et en acceptant ipv6-icmp en INPUT et OUTPUT en WAN et LAN d'OPNsens, je peux
- depuis proxmox, pinger en ipv6 tout (extérieur, intérieur, WAN, LAN)
- depuis une VM dans le LAN d'OPNsense pinger en ipv6 tout proxmox : 2a00:c70:1:xxxx:xxxx:xxxx:yyyy:a000/116 et 2a00:c70:1:xxxx:xxxx:xxxx:yyyy:1001/112 y compris l'IPv6 "principale" de proxmox 2a00:c70:1:xxxx:xxxx:xxxx:yyyy:1 mais pas l'extérieur (google.fr)

Je ne comprends pas pourquoi... qu'est-ce qui peut bloquer...

Un autre problème est que depuis une machine extérieur à proxmox, je ne peux pas pinger l'IPv6 assigné à vmbr1 de proxmox 2a00:c70:1:xxxx:xxxx:xxxx:yyyy:1001 et encore moins l'IPv6 du wan d'OPNsense 2a00:c70:1:xxxx:xxxx:xxxx:yyyy:1002 et certainement pas les IPv6 du LAN d'OPNsense 2a00:c70:1:xxxx:xxxx:xxxx:yyyy:a000/116... par exemple 2a00:c70:1:xxxx:xxxx:xxxx:yyyy:a080

Je n'arrive pas à comprendre pourquoi seul l'IPv6 "principale" est pingable depuis l'extérieur de proxmox...