Przekierowania do hostów na Proxmox

Czołem, przychodzę z prośbą o poradę.
Proxmox w wersji 5.4-3 (Debian GNU/Linux 9.9 (stretch)). Domyślne ustawienie po instalacji mam

auto lo
iface lo inet loopback

iface enp3s0 inet manual

auto vmbr0
iface vmbr0 inet static
        address 10.0.32.121
        netmask 255.255.255.0
        gateway 10.0.32.1
        bridge_ports enp3s0
        bridge_stp off
        bridge_fd 0

iface enp2s0f0 inet manual

iface enp2s0f1 inet manual

Natomiast gdy robię zgodnie z dokumentacją proxmox-a https://pve.proxmox.com/wiki/Network_Configuration jako Routed Configuration za jasny gwint maszyny nie mają dostępu do neta.

Po edycji pliku mam taką sytuację.

auto lo
iface lo inet loopback

iface enp3s0 inet manual

auto vmbr0
iface vmbr0 inet static
        address 10.0.32.121
        netmask 255.255.255.0
        gateway 10.0.32.1
        bridge_ports enp3s0
        bridge_stp off
        bridge_fd 0
        post-up echo 1 > /proc/sys/net/ipv4/ip_forward
        post-up iptables -t nat -A POSTROUTING -s '192.168.0.0/24' -o vmbr0 -j MASQUERADE
        post-down iptables -t nat -D POSTROUTING -s '192.168.0.0/24' -o vmbr0


iface enp2s0f0 inet manual

iface enp2s0f1 inet manual

Wzorowałem się również na tym artykule https://dszymczuk.pl/blog/2015/serwer-openvz/openvz-serwer-matka/

A gdy przypiszę na sztywno adres, maskę i gw do interfejsu fizycznie (enp3s0) wtedy w ogóle nie mam połączenia z proxmoxem .

W celach testowych enp3s0 ma adresy z LAN-a ale docelowo będzie podpięty WAN. Czy gdzieś jeszcze muszę ustawiać jakieś geruły firewalla?

Nie wiem dlaczego grzebiesz pod maską, to przeważnie źle się kończy przy gotowcach. W KVM/LXD wybierze albo mostkowany tryb sieci, albo NAT. Gdy wybierasz routed, to bramą dla VM jesr adres Proxmox, czyli fizycznej maszyny.

Dokładnie tak chciałem zrobić, aby maszyny były za NAT-em lub bridge. Jednak nie w samym webie nie mogę tego zmienić. Z kolei na stronie proxmoxa jest ewidentnie podane, żeby pozmieniać bezpośrednio w /etc/network/interfaces

A dokładniej rzecz ujmując to chciałbym stworzyć sieć tak…

Dopisz fizyczne interfejsy do vmbr.
Dodaj dwa vmbry do opnsense, jeden będzie WAN drugi LAN i tam sobie skonfigurujesz NAT.

Czyli miałem rację, że Proxmox to straszne badziewie.

Masz tam jeszcze OpenVSwitch, możesz go wykorzystać.

@anon42271672 dopisanie niewiele dało. Owszem stworzyło wpisy w etc ale maszyna opnsense’a w ogóle nie wstaje.

To co proponujesz @roobal ? Bo furii dostanę z tym Proxmoxem. Wielka szkoda że na mojej maszynie nie mogę postawić VMware’a. Debian z KVM? Jak w przypadku instalacji FreeBSD to wygląda? Ponoć na KVM-ie bywają problemy (OPNSense i pfSense to BSD).

Ale wywala jakiś błąd podczas ładowania, czy co się dzieje?

Dopisujesz vmbry, wchodzisz w ustawienia maszyny, hardware i dodajesz network device, zaznaczasz stworzonego wcześniej bridge’a i tyle.

Sieciówka virtIO może robić problem przy systemach BSD, ale to już byś musiał zagłębić się w dokumentację opnsense i co tam na ten temat piszą.

Nie ma problemów z BSD na KVM. Virtio na FBSD działa bez problemu, innych nie sprawdzałem.

Gentoo KVM. Jeśli potrzebujesz GUI, to Archipel jest milion razy lepszy. Jeśli wystarczy Ci coś prostego, to WebVirtMgr.

Postawiłem właśnie Ubuntu 18.04 LTS z kvm i virt managerem. OPNsense poszedł raz dwa. Teraz muszę tylko tego archipela ogarnąć. Archipel łączy się po XMPP do serwera?

Raczej tam powinno być tak

        post-down iptables -t nat -D POSTROUTING -s '192.168.0.0/24' -o vmbr0  -j MASQUERADE

Dodatkowo jak chcesz mieć LAMP to musisz przekierować port 80 czy 443 na LAMP.OPNsense ma robić z zapore? to musisz jeszcze przekierować wcześniej te porty na OPNsense i z OPNsense na LAMP.Ogólnie trochę przekombinowany ten konfig.

U siebie mam coś podobnego
Freebsd [Host][Zapora sieciowa] - Debian [LAMP][Proxy]- pod to podłączone komputery

Muszę poczytać jak to jest z tym mostem między KVM a hostami na vm, bo chyba czegoś nie rozumiem albo źle ustawiam.

Tak, wykorzystuje xmpp. Może Ci nawet na Jabbera powiadomienia wysyłać.

WebVirtMgr łączy się z hyperwizorami przez ssh, tak jak virtmanager. Możesz też łączyć się po TCP z wykorzystaniem SASL i TLS, ale z ssh jest łatwiej.

Ok, stanąłem przed kolejnym problemem. OPNsense zainstalowany choć problem jest przy bootowaniu, ale reszta maszyn chodzi bardzo dobrze. Pytanie do Was odnośnie bridge’a bo tego nie potrafię zrozumieć.

Ruch z WAN-u wchodzi mi pod interface enp3s0. Po instalacji KVM-a mam tylko defaultową konfigurację:

 daniel \ srv01vm \ ~ $ virsh net-list
 Name                 State      Autostart     Persistent
----------------------------------------------------------
 default              active     yes           yes


 daniel \ srv01vm \ ~ $ virsh net-info default
Name:           default
UUID:           27c82ae6-771b-4a6f-9e37-eb10f3b99a8c
Active:         yes
Persistent:     yes
Autostart:      yes
Bridge:         virbr0


 daniel \ srv01vm \ ~ $ virsh net-dumpxml default
<network connections='1'>
  <name>default</name>
  <uuid>27c82ae6-771b-4a6f-9e37-eb10f3b99a8c</uuid>
  <forward mode='nat'>
    <nat>
      <port start='1024' end='65535'/>
    </nat>
  </forward>
  <bridge name='virbr0' stp='on' delay='0'/>
  <mac address='52:54:00:8f:38:05'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254'/>
    </dhcp>
  </ip>
</network>

Maszyna z OPNsensem ma 3 interfacy:

NAT - dostaje adres z puli 192…
Mostek do enp3s0 - dostaje z DHCP (czyli w moim LABie WAN)
Mostek do enp2s0f0 - tu chciałbym podłączyć switch dla reszty urządzeń w domu.

Czy do tego wszystkiego muszę jeszcze na hoście tworzyć kolejny mostek?

Sorry ale za dobry w te klocki nie jestem…

Domyślnie libvirt kompilowany jest z flagą vnet-host czy jakoś tak. Ta flaga włącza obsługę sieci NAT i routed. Libvirt tworzy sobie sieć domyślną w trybie NAT o adresacji 192.168.122. 0/24.

Bridge dodajesz w systemie i przypinasz do VMek, jeśli ma to być sieć mostkowana (adresacja z LAN).

Tak, musisz utworzyć bridge.

Nie wiem co tam teraz masz, ale wykorzystaj systemd do zarzadzania siecią.

Wywal co dodałeś /etc/network/interfaces. W /etc/systemd/network tworzysz takie pliki:

br0.netdev

[NetDev]
Name=br0
Kind=bridge

br0.network

[Match]
Name=br0

[Network]
DHCP=v4

enp3s0.network

[Match]
Name=enp3s0

[Network]
Bridge=br0

Nastepnie wykonujesz polecenie jako root

systemctl daemon-reload
systemctl restart systemd-networkd

Ewentualnie restart systemu.

1 polubienie

Ok, dodałem powyższe wpisy, jednak w samym KVM-ie nie mam możliwości wyboru br0.netdev bądź br0.network. Sam plik /etc/network/interfaces w Ubuntu Server 18.04 jest przeniesiony do netplan

# ifupdown has been replaced by netplan(5) on this system.  See
# /etc/netplan for current configuration.
# To re-enable ifupdown on this system, you can run:
#    sudo apt install ifupdown

Nie, nie, nie. Plik interfaces zostawiasz w spokoju. Nie szukasz nic z tych rzeczy. Wyłącz NetworkManager, bo libvirt z nim nie działa i koliduje z systemd networkd.

systemctl stop NetworkManager
systemctl disable NetworkManager

Potem

systemctl start systemd-networkd
systemctl enable systemd-networkd

Jeśli wszystko poszło zgodnie z planem, będziesz miał interface br0 i ten wybierasz w VMM.

Niestety nadal nie mam możliwości wybrania br0 mimo, że ifconfig pokazuje

 daniel - srv01vm - ~ $![Zrzut%20ekranu%20(43)|619x500](upload://6eJKlDf9ijt0iXLV2uvKEsur12m.png) ![Zrzut%20ekranu%20(44)|618x500](upload://rz25QTvFb0pqz8NIBQoE67R2amT.png)  ifconfig
br0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 72:cb:43:9e:31:63  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:65:60:73:32  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp2s0f0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 00:26:55:d6:d6:2a  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 18  memory 0xfe8e0000-fe900000

enp2s0f1: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 00:26:55:d6:d6:2b  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 19  memory 0xfe880000-fe8a0000

enp3s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.32.21  netmask 255.255.255.0  broadcast 10.0.32.255
        inet6 fe80::cacb:b8ff:fecf:dc3b  prefixlen 64  scopeid 0x20<link>
        ether c8:cb:b8:cf:dc:3b  txqueuelen 1000  (Ethernet)
        RX packets 92237  bytes 10740590 (10.7 MB)
        RX errors 0  dropped 143  overruns 0  frame 0
        TX packets 64913  bytes 38740040 (38.7 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 18

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 265  bytes 36660 (36.6 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 265  bytes 36660 (36.6 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:8f:38:05  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

NetworkManager wyłączyłeś? Wybierz opcję “Proszę podać nazwę urządzenia współdzielonego” i wpisujesz tam br0.

Jeszcze przychodzi mi na myśl, że nie masz w systemie zainstalowanego pakietu bridge-utils. Jeśli dobrze pamiętam, to właśnie jego brak może powodować niedostępność opcji mostkowania w VMM.

Nie lepiej zamiast tego OPNsense który jest bardziej do urządzeń fizycznych niż do VM wziąć jakiegoś firewalla zainstalować? polecam csf z nakładką web gui który możesz zainstalować na debian centos i wielu dystrybucjach.Konfiguracja jest bardzo prosta i instalacja też:
https://configserver.com/cp/csf.html

na LAMP możesz zainstalować mod_security oraz squida i przez to puścić kompy i wtedy masz absolutną kontrole nad tym co gdzie sie łączy z poziomu proxy.W firewall konfigurujesz które porty masz mieć filtrowane,ruch z których krajów zablokować,limity połączeń itp.

Jak chcesz koniecznie te OPNsense tu masz poradnik tyle że na VirtualBox ale to chyba nie problem jak skonfigurować: