opnsense VM und routing

Mrt12

Well-Known Member
May 19, 2019
144
11
58
44
CH
Hallo allerseits

ich wollte den billigen Router von meinem ISP durch etwas gutes ersetzen. Ich habe Glasfaser und IPv4/v6 dual stack.

Ich kann den Router leider aufgrund von GPON nicht ersetzen, aber immerhin konnte ich ihn in den bridge mode setzen, sodass er ungefiltert alles durch lässt.

Dann habe ich auf meinem Proxmox Server eine VM eingerichtet und dort opnsense installiert.

Das WAN kommt nun am Server auf eno1, mein LAN ist an eno2. Dementsprechend habe ich auch eine vmbr0 fürs WAN und eine vmbr1 fürs LAN. (darf ich die Bridges auch umbenennen, zb. vmbrwan und vmbrlan?)

Es funktioniert sehr gut, opnsense bezieht korrekt eine IPv4 sowie das v6 Prefix, und im LAN funktioniert auch alles, incl. IPv6 prefix delegation und so weiter! echt cool!

jetzt habe ich eine Unschönheit. Nämlich, wenn ich aus Proxmox selbst (also vom Hypervisor) aufs Internet zugreifen will, dann muss ich natürlich dazu meine opnsense als Gateway nutzen.

a) ist das sehr schlechte Praxis oder kann man das machen? nur weil es funktioniert, heisdt es ja nicht, dass das "gut" ist.

b) IPv4 aus Proxmox heraus funktioniert. Hier habe ich einfach die IPv4 meiner opnsense als Gateway angegeben. Bei IPv6 geht es nicht! hier kommen nämlich auf dem WAN Port die Router advertisements vom ISP an, und nicht nur meine opnsense VM "sieht" die, sondern mein Proxmox Host "sieht" sie ja auch, weil sie über vmbr0 kommen! darum konfiguriert er sich dann auch selber einen falschen IPv6 Gateway, und die Prefix Delegation funktioniert nicht. Kann ich im System irgend was konfigurieren, dass er einfach komplett alles, was auf dem WAN Port ankommt, komplett ignoriert und an den opnsense VM weiterreicht? am liebsten hätte ich eigentlich, wenn der Proxmox Host über die opnsense auch eine IPv6 bekommt und diese auch als Gateway nutzt. Ich frag mich, ob das geht, oder ob es nur möglich ist, wenn ich die kompletten Ethernet Ports als PCI devices an die VM durch reiche. Was wäre die beste Lösung?
 
Zu a
Das passt so

Zu b
Das hier könnte evtl. helfen.
https://helpdesk.schabau.eu/archiv/proxmox013.html

Danke, habe das ausprobiert. Immerhin ignoriert Proxmox jetzt die Router Advertisements, die auf vmbr0 rein kommen; aber auf vmbr1 sollten router Advertisements von meinem opnsense kommen, die ignoriert er leider auch, d.h. mein Host hat immer noch keine IPv6 Konnektivität.
Show /etc/network/interfaces!
here:

Code:
root@pve0:~# cat /etc/sysctl.d/60-disable-ipv6.conf

# vmbr0 is connected to WAN, therefore ignore all router advertisements that come from the ISP
net.ipv6.conf.vmbr0.disable_ipv6 = 1

# vmbr1 is connected to the LAN and to the opnsense router, which will send the router advertisements.
# activate IPv6 for vmbr1 such that opnsense will be used as the router.
net.ipv6.conf.vmbr1.disable_ipv6 = 0



root@pve0:~# cat /etc/network/interfaces
# network interface settings; autogenerated
# Please do NOT modify this file directly, unless you know what
# you're doing.
#
# If you want to manage parts of the network configuration manually,
# please utilize the 'source' or 'source-directory' directives to do
# so.
# PVE will preserve these directives, but will NOT read its network
# configuration from sourced files, so do not attempt to move any of
# the PVE managed interfaces into external files!

source /etc/network/interfaces.d/*

auto lo
iface lo inet loopback

auto ens1f0
iface ens1f0 inet manual

iface eno1 inet manual

iface eno2 inet manual

iface ens1f1 inet manual

# LAN port, that shall use opnsense as the router
# 192.168.1.2 is the IPv4 of the opnsense VM
auto vmbr1
iface vmbr1 inet static
    address 192.168.1.20/24
    gateway 192.168.1.2
    bridge-ports ens1f0
    bridge-stp off
    bridge-fd 0
    bridge-vlan-aware yes
    bridge-vids 2-4094


# WAN port, connected directly to the ISP
# the opnsense VM uses vmbr0 for the WAN interface
auto vmbr0
iface vmbr0 inet manual
    bridge-ports eno1
    bridge-stp off
    bridge-fd 0

Die Network Interfaces haben die folgenden IPs konfiguriert:

Code:
root@pve0:~# ip a
........
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master vmbr1 state UP group default qlen 1000
    link/ether 3c:ec:ef:a1:15:14 brd ff:ff:ff:ff:ff:ff
    altname enp1s0
3: eno2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 3c:ec:ef:a1:15:15 brd ff:ff:ff:ff:ff:ff
    altname enp2s0
4: ens1f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master vmbr0 state UP group default qlen 1000
    link/ether b4:96:91:1d:a4:2c brd ff:ff:ff:ff:ff:ff
    altname enp139s0f0
5: ens1f1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether b4:96:91:1d:a4:2e brd ff:ff:ff:ff:ff:ff
    altname enp139s0f1
6: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 3c:ec:ef:a1:15:14 brd ff:ff:ff:ff:ff:ff
7: vmbr1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether b4:96:91:1d:a4:2c brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.20/24 scope global vmbr0
       valid_lft forever preferred_lft forever
    inet6 fe80::b696:91ff:fe1d:a42c/64 scope link
       valid_lft forever preferred_lft forever
........

und tatsächlich funktioniert es für IPv4, die opnsense als Router zu nutzen:

Code:
root@pve0:~# ip r
default via 192.168.1.2 dev vmbr1 proto kernel onlink
192.168.1.0/24 dev vmbr1 proto kernel scope link src 192.168.1.20

root@pve0:~# ping google.com -c1 -4
PING google.com (142.251.143.142) 56(84) bytes of data.
64 bytes from trn05s04-in-f14.1e100.net (142.251.143.142): icmp_seq=1 ttl=59 time=14.8 ms

--- google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 14.758/14.758/14.758/0.000 ms

Für den Proxmox Host jedoch funktioniert die IPv6 Konnektivität nicht, und ich verstehe nicht, warum er meine opnsense ignoriert:

Code:
root@pve0:~# ip -6 r
fe80::/64 dev vmbr0 proto kernel metric 256 pref medium

root@pve0:~# ping google.com -c1 -6
ping: connect: Network is unreachable

dabei müsste doch die vmbr1 "merken", dass da die opnsense dahinter angeschlossen ist und dort Router Advertisements schickt?
Bei meinem anderen Hosts im LAN funktioniert es ja auch automatisch, hier z.B. an meinem Desktoprechner, wo ich alles auf "auto" eingestellt habe, der Ethernet Port ist mit vmbr1 verbunden:

1717329292447.png

Die 192.168.1.2 ist die IPv4 von der opnsense, die 6f8d dementsprechend die IPv6 der opnsense. Funktioniert bestens. Aber Proxmox ignoriert es. Ich habe noch nicht verstanden, weshalb. Kann ich irgendwie aktivieren, dass er Router Advertisements akzeptiert?
 
Du musst die IP konfig von vmbr1 ausserhalb machen und einem vlan zuordnen. Außerdem ist inet6 zu definieren.
 
Last edited:
nun ich habs auch am laufen.
Vlan ist nicht notwendig.

iface vmbr0 inet static
address 192.168.99.1/24
gateway 192.168.99.2
bridge-ports enp2s0
bridge-stp off
bridge-fd 0
post-up echo "2" > /proc/sys/net/ipv6/conf/vmbr0/accept_ra

beim mir ist vmbr0 das lan
entscheidend ist post-up......
 
Hallo zusammen

ich habe es zum Laufen bekommen. Mit VLAN und mit RA.

ich habe folgenden Setup:

vom Modem geht es zum Switch Port 1, dieser ist dem VLAN 10 zugeordnet
der Switch Port 8 ist der Trunk
alle anderen Ports sind dem VLAN 100 zugeordnet (da man ja das default VLAN 1 nicht verwenden sollte (?) )

dann sieht meine interfaces so aus:


Code:
auto vmbr0
iface vmbr0 inet static
    bridge-ports ens1f0
    bridge-stp off
    bridge-fd 0
    bridge-vlan-aware yes
    bridge-vids 2-4094

auto vmbr0.100
iface vmbr0.100 inet static
    address 192.168.1.20/24
    gateway 192.168.1.2


und bei den einzelnen VMs kann ich dann diese der vmbr0 zuordnen und den VLAN tag eingeben um die VM in einem gewünschten VLAN laufen zu lassen.

Ich habe noch versucht, Linux Bridges anzulegen, die jeweils ein einzelnes VLAN akzeptieren, z.B. eine vmbr_dmz für VLAN 20. Das funktioniert, aber dann nimmt PVE wiederum auf allen diesen Bridges die Router Advertisements an und am Ende habe ich IPv6 Adressen auf jedem Interface, was ich gar nicht will. Muss mal noch schauen ob sich das irgendwie verhindern lässt. mit accept_ra 0 hat es nicht funktioniert.....
 
Hallo zusammen

irgendwie hat es immer noch nicht ganz 100% sauber funktioniert. Aber jetzt weiss ich woran es gelegen ist, und habe einen guten Fix gefunden.
Der Tip von Jens mit accept_ra ging in die richtige Richtung.

Hier meine network/interfaces:

Code:
auto vmbr_dmz
iface vmbr_dmz inet manual
    bridge-ports ens1f0.20
    bridge-stp off
    bridge-fd 0
    post-up echo 1 > /proc/sys/net/ipv6/conf/vmbr_dmz/disable_ipv6
#DMZ

auto vmbr_wan
iface vmbr_wan inet manual
    bridge-ports ens1f0.10
    bridge-stp off
    bridge-fd 0
    post-up echo 1 > /proc/sys/net/ipv6/conf/vmbr_wan/disable_ipv6
#WAN

auto vmbr_lan
iface vmbr_lan inet static
    address 192.168.100.20/24
    gateway 192.168.100.2
    bridge-ports ens1f0.100
    bridge-stp off
    bridge-fd 0
#LAN

Auf dem ens1f0 kommen mehrere VLANs daher, die möchte ich auf verschiedene Bridges aufsplitten. Das hat dann den Vorteil, wenn ich eine VM oder einen Container in ein bestimmtes VLAN verbinden möchte, dann muss ich diesem nur die entsprechende Bridge zuweisen, anstatt einen VLAN Tag zuzuweisen. Da sfinde ich schöner, denn theoretisch könnte man ja 4094 VLANs haben, da mag sich doch keiner alle Nummern merken :-)))

Das sieht dann so aus:

1717535965963.png

Wenn ich dann z.B. einen CT im "LAN" VLAN haben möchte, dann schliesse ich den einfach an die "vmbr_lan" an

1717536138693.png

und es funktioniert. Man könnte ihn auch an ens1f0 anschliessen, und dann den VLAN Tag 100 eingeben, aber so geht es viel hübscher wie ich finde.

Die beiden Zeilen
post-up echo 1 > /proc/sys/net/ipv6/conf/vmbr_dmz/disable_ipv6
und
post-up echo 1 > /proc/sys/net/ipv6/conf/vmbr_wan/disable_ipv6
sorgen dafür, dass der Host sich nicht irgendwie eine IPv6 Konfig aus dem WAN oder DMZ holt, weil auf diesen Netzwerken kommen auch Router Advertisements.
Stattdessen soll der Host im LAN und nur dort ansprechbar sein. Das habe ich erreicht, indem ich unter

/etc/network/interfaces.d

einen File angelegt habe:

Code:
root@pve0:/etc/network/interfaces.d# cat inet6_lan.conf
iface vmbr_lan inet6 auto
        accept_ra 2

Der Grund ist, dass wenn man die interfaces Datei selber von Hand editiert, und dann im Proxmox Web GUI herum fummelt, kann es sein, dass gewisse Änderungen wieder rückgängig gemacht werden.

Mit dieser zusätzlichen Anpassung holt sich mein Host über das "LAN" (VLAN 100) über die Router Advertisements von meiner opnsense eine IPv6 und dann habe ich einen korrekt konfigurierten Host der über v4 und v6 auf das Netz und das Internet zugreifen kann:

Code:
7: vmbr_lan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether b4:96:91:1d:a4:2c brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.20/24 scope global vmbr_lan
       valid_lft forever preferred_lft forever
    inet6 2a00:x:y:z:b696:91ff:fe1d:a42c/64 scope global dynamic mngtmpaddr
       valid_lft 86039sec preferred_lft 14039sec
    inet6 fe80::b696:91ff:fe1d:a42c/64 scope link
       valid_lft forever preferred_lft forever

das sind sicher Erkenntnisse, die für die meisten hier trivial sind, war aber für mich als IPv6 Noob eine gewisse Lernkurve, zumal im Zusammenhang mit VLANs.

Die VLANs möchte ich nutzen, weil ich an meinem Server nur ein einzelnes 10 GBit Glasfaserkabel anschliessen möchte. Ein Switch ist dann mit einem "Port based VLAN" konfiguriert: alles, was an Port 1 rein kommt, ist VLAN 10 (das habe ich WAN genannt), wird dementsprechend getaggt und auf die Glasfaser gegeben.
Alles, was auf Port 2 rein kommt, ist "DMZ" und wird dementsprechend mit dem Tag 20 versehen und kommt auch auf dieselbe Glasfaser.
Und schliesslich, das "normale" LAN, alle anderen Ports vom Switch, werden mit VLAN 100 gekennzeichnet.

Dann muss ich den Server nur mit einem Kabel mit dem Switch verbinden, und habe dennoch völlig getrennte Netze. Im PVE läuft dann eine VM mit opnsense, die das Routing macht und DHCP vergibt.


1717536703515.png

Jetzt kann ich am Switch Sachen anschliessen, die automatisch dann ins richtige VLAN kommen, und ich kann auch VMs erstellen, und muss sie nur der richtigen Bridge zuordnen, und danach funktioniert die VLAN Zuordnung im Prinzip sehr einfach.
 

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!