Browsed by
Category: Servery a sítě

Unifi VPN WireGuard

Unifi VPN WireGuard

Síťové řešení od Unifi, resp. přesněji Security Gateway VPN nativně podporuje pouze

  • dnes už prolomené PPTP a
  • už také zastaralé L2TP (např. s novým Androidem 12 už mohou být problémy)

Možnou náhradou může být OpenVPN nebo právě WireGuard o jehož zprovnoznění je tento článek.

WireGuard

Wireguard je jednoduchá a rychlá VPN (náhrada IPSecu a OpenVPN v jednom), běží všude (v kernelu jako network modul) a má klienta pro všechny platformy (Mac, iOS, Android, Windows …). Používá moderní kryptografii (jako SSH) a stačí vám veřejné a privátní klíče.

I pro nesíťaře je její nastavení jednoduché a intuitivní.

Instalace

Dost teorie, pojďme na instalaci.

I. Instalace do SGW

  1. Pomocí SSH se přihlásit přímo do Unifi Security Gateway
  2. Stáhnout aktální verzi WireGuard balíčku (pro SecurityGateway (ugw3) naleznete verze zde https://github.com/WireGuard/wireguard-vyatta-ubnt/releases) takto:
    • curl -OL https://github.com/WireGuard/wireguard-vyatta-ubnt/releases/download/1.0.20211208-1/ugw3-v1-v1.0.20211208-v1.0.20210914.deb
  3. Všechny ostatní kroky jako root:
    • su 
  4. Nainstalovat WireGuard build:
    • dpkg -i ugw3-v1-v1.0.20211208-v1.0.20210914.deb
  5. Vygenerovat public a private key pro Gateway
    • cd /config/auth
    • umask 077
    • mkdir wireguard
    • cd wireguard
    • wg genkey > wg_private.key
    • wg pubkey < wg_private.key > wg_public.key
  6. Rovnou si můžeme vygenerovat klíče pro klienty:
    • wg genkey | tee tata_ntb_private.key | wg pubkey > tata_ntb_public.key
    • wg genkey | tee mama_mobil_private.key | wg pubkey > mama_mobil_public.key
    • atd …
  7. Vygenerované klíče pro klienty si stahnout do lokálního počítače (třeba pomocí WinSCP)

II. Instalace do Unifi Controlleru

  1. Pomocí SSH se přihlásit přímo do Unifi Controlleru (nejspíše Cloud Key)
  2. V adresáři /srv/unifi/data/sites/<nazev_site> (nejspíše tedy /srv/unifi/data/sites/default) vytvořit soubor config.gateway.json podle předlohy
    • config.gateway.json
    • (pokud už jste si dříve z nějakého důvodu config.gateway.json vytvořili, editujte stávající)
    • v sekci peer nezapomeňte správně doplnit dříve vygenerované public klíče klientů

III. Konfigurace přes webové UI Controlleru

  1. Ve webovém prohlížeči otevřít Controller Web UI
  2. Zajistit distribuci změn
    • Controller Web UI > Devices > kliknout na  USG > v Properties okně záložka Config > Manage Device > a zde klinout na Provision
      • Pokud Provision běží déle než cca 3 minuty, je chyba (typo) v json konfiguráku. Takže json zvalidovat a opravit pomocí nějakého online json formatteru
  3. Povolit vzdálený přístup na firewallu:
    • Controller Web UI : Settings > Routing & Firewall > Firewall > WAN LOCAL a vytvořit nové pravidlo pro UDP traffic na portu 51820
      • Během vytváření pravidla je nutné vytvořit Port Group v sekci Source a přidat port 51820.

A máme hotovo nastavení Unifi

Nastavení klienta

  1. Na klienta (telefon, pc atp.) nainstalujeme WireGuard
  2. V klientovy vytvoříme nový tunel, jehož konfigurace pro náš případ “tata_ntb” bude vypadat takto:
    • [Interface]
      PrivateKey = <tata_ntb_private_key>
      Address = 10.222.1.10/32
      DNS = 1.1.1.1 
           
      [Peer]
      PublicKey = <gw_public_key>
      AllowedIPs = 0.0.0.0/0
      Endpoint = <veřejná IP>:51820
      PersistentKeepalive = 21
  3. Poznámky
    • v konfiguraci klienta nezapomeňte správně změnit
      • privátní klíč klienta
      • public klíč gateway
      • vaši veřejnou IP
    • Na příkladu je pěkně vidět, že konfigurace klienta nese privátní klíč klienta a public klíč gateway
    • naopak Gateway má v nastavení private klíč gateway a public klíče klientů
    • AllowedIPs
      • 0.0.0.0/0 znamená, že přes tunel vám jde veškerá komunikace, což nemusí být žádoucí
      • pokud tedy máte vnitřní sítě třeba 10.100.1.0 až 10.100.10.0, můžete je do AllowedIPs přímo vyjmenovat, nebo použít wildcard 10.100.0.0/16. Díky tomu můžete být přes WireGuard připojeni neustále, protože přes tunel pujde jen komunikace s vyjmenovanými sítěmi.

 

Toť vše, díky za pozornost

l.adamek

Ubiquiti USG – Jak nastavit vlastní statické host-names

Ubiquiti USG – Jak nastavit vlastní statické host-names

Ačkoli má Ubiquiti USG opravdu pěknou a intuitivní administraci, bohužel ne všechno v ní jde nastavit. Jedna věc, co mi hned na začátku chyběla byly statické hostnames. Neboli, abych mohl dát aliasy všem mým počítačům a službám. V základu totiž UBNT nastavít hostnames jen pro ty zařízení, které si vezmou IP adresu z DHCP a to tak, že použijí název zařízení, které si o IP řeklo bez možnosti to jednoduše změnit.

Nějak takto vypadají defaultní hosts vygenerované dle DHCP:

192.168.1.6	 Dolnipatro.localdomain	
192.168.1.20	 Samsung-Galaxy-S7.localdomain	 
192.168.0.66	 L-PC.workdomain	 
192.168.1.25	 L-Air.localdomain	 
192.168.0.108	 android-5eef773106893097.workdomain	 

Jediné co můžete ovlivnit je .domain a jinak se název generuje sám. To co jsem chtěl já bylo, abych si je mohl pojmenovat jak já chci, navíc abych tam mohl dát i takové zařízení, které DHCP nepoužívají vůbec.

192.168.1.6	 Dolnipatro.unifi
192.168.1.20	 L-S7.home
192.168.0.66	 L-PC.home
192.168.1.25	 L-BOOK.home
192.168.0.108	 I-S7.home

Naštěstí jde v Unify veškeré nastavení z Gui přepsat pomocí konfiguračního souboru. Je ale potřeba vědět jak na to a kde se vlastně konfigurační soubor nachází.

Zaprvé, soubor není na USG, ale v Controlleru. Tzn buď v cloudkey, nebo někde na serveru, kde je controller nainstalován. Cesta k souboru v controlleru je následovná (ale napoprvé si soubor musíte sami vytvořit)

[soucecode]
/usr/lib/unifi/data/sites/default/config.gateway.json
[/soucecode]

Cokoli nastavené v tomto souboru se použije a přepíše se tím nastavení z grafického rozhraní. Aktuální nastavení USG pak jde načíst v souboru /config/config.boot na USG (tzn ne v controlleru, ale už přímo na USG). Aktuální hosts pak jdou vidět na USG klasicky v souboru /etc/hosts pomocí

Pro změnu/nastaveni hostnames je potřeba vytvořit config.gateway.json a vložit do něj tento obsah:

{
   "system":{
      "static-host-mapping":{
         "host-name":{
            "L-PC.home":{
               "inet":[
                  "192.168.0.66"
               ]
            }
         }
      }
   }
}

Po změně souboru config.gateway.json je ještě potřeba poslat konfiguraci do USG. To se udělá tak, že v Controlleru na webu zvolíte USG a pak Config->Manage Device->Force provision

Domácí server s Debianem a Libvirtem s VLAN

Domácí server s Debianem a Libvirtem s VLAN

Úvod

Asi každý potřebuje v dnešní době mít doma nějaký ten server, se síťovými službami jako je NAS, DLNA, kamerový systém a mnoho dalších. Jak už tomu v oblasti IT bývá, možností, jak to zajistit je víc. Velké množství lidí sáhne po hotových řešení v podobě různých NAS serverů od Synology, QNAP, apod. Já bych vám rád představil jinou cestu, která je mnohem více flexibilní a přitom není finančně náročná.
Jedná se o využití serveru s virtualizační technologií, openvswitchem s podporou VLAN (případně bez, pokud váš router / switch VLANy nepodporuje). Výhoda je právě ta flexibilita. Na serveru máte virtualizační technologii, která vám umožňuje vytvářet dílčí virtuální servery podle potřeby a navíc v různých segmentech VLAN. To umožní odseparovat od sebe jednotlivé síťové služby s ohledem na bezpečnost.
Virtualizačních technologií je spousta. Já jsem jich postupně vyzkoušel několik. Za zmínku stojí:

  • VMware vSphere Hypervisor – dost striktní z pohledu potřebného HW. Na mém serveru bohužel nefungovalo PCI Passthrough, takže jsem ho rychle zavrhl
  • Xenserver – Toto řešení je sice na první pohled hezké, ale … Ideální pro provoz v clusteru. Jako samostatný server se mi neosvědčilo. Často vydávané aktualizace vedou k pravidelným restartům, což se v případě clasterového řešení vyřeší převodem virtuálního serveru z jednoho Xenserveru na jiný v rámci clasteru a následnému restartu.
  • Qemu (KVM) – To je cesta, která se mi ve spojení s Libvirtem osvědčila a tedy ji dále rozvedu

Server

V podstatě lze použít jakýkoliv stroj, který má v sobě procesor s podporou VT-x (v postatě všechny dnešní procesory Intel a AMD)
Pokud budete chtít virtuálnímu serveru předat z fyzického nějakou PCI kartu, budete potřebovat ještě VT-d. Zde pozor, VT-d už taková samozřejmost není a je třeba zkontrolovat podporu u procesoru, čipové sady a díky občasné chybné implementaci BIOSu MB i to nemusí být zárukou, i když v poslední době se to hodně zlepšilo. USB lze předávat i bez VT-d.
Co se týče zvoleného CPU a množství RAM, je třeba to uvážit na základě toho, kolik virtuálů budete provozovat a jak náročné na výkon procesoru budou. Raději volit rezervu.
Pro představu:

  • Já mám doma 3 roky starou I5 4670T a 32 GB RAM. Aktuálně provozuji 13 virtuálních serverů.
  • Vloni jsem kamarádovi postavil servřík na MB s integrovaným intelem N3150 s 16GB RAM a provozuje bez problémů 5 virtuálů.
  • Soused si vloni koupil repasovaný server od HP s XEONem 2. generace a 32 GB RAM za cca 7000,-. Dokoupil 3 TB WD Red a taky na tom má nějakých 10 virtuálů.

Ještě je vhodné, aby server měl 2 síťové rozhraní, jedno pro správu a jedno pro vswitch – není ale podmínkou
Počet SATA portů podle počtu HDD, které chcete připojit.
Jako disky se mi osvědčili WD Red

Systém

Jako systém budeme v našem návodu předpokládat Debian 9 Stretch, kterého určitě doporučuji pro jeho stabilitu …
Návod by měl být do jisté míry kompatibilní s debianími deriváty (Ubuntu, Mint, …), nicméně u těchto systémů nejsem v případě dotazů schopen zaručit 100% podporu z mé strany.
Debiana si nainstalujeme bez grafického prostředí, protože to samozřejmě nebudeme potřebovat.

Libvirt

Nejprve si nainstalujeme Libvirt a Openvswitch(OvS):

sudo apt-get install libvirt-daemon-system openvswitch-switch

Konfigurace OvS

Zkontrolujeme existenci patche v /etc/init.d/openvswitch-switch

sudo nano /etc/init.d/openvswitch-switch

Musí existovat řádek SYSTEMCTL_SKIP_REDIRECT=yes za _SYSTEMCTL_SKIP_REDIRECT=yes

### END INIT INFO

(test -x /usr/sbin/ovs-vswitchd && test -x /usr/sbin/ovsdb-server) || exit 0

_SYSTEMCTL_SKIP_REDIRECT=yes
SYSTEMCTL_SKIP_REDIRECT=yes

. /usr/share/openvswitch/scripts/ovs-lib

Nejprve zjistíme jaká síťová rozhraní máme v systému:

ip a

Něco takového nám vyjede. V ukázce jsou 2 fyzické síťové rozhraní eth0 a eth1

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master ovs-system state UP group default qlen 1000
    link/ether 01:01:01:01:01:54 brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 01:01:01:01:01:7a brd ff:ff:ff:ff:ff:ff
    inet 192.168.xxx.xxx/24 brd 192.168.xxx.255 scope global eno1
       valid_lft forever preferred_lft forever

Musíme se rozhodnout, jak které rozhraní použijeme. Jedno pro management a jedno pro OvS. Pokud máme jen jedno, není co rozhodovat. Bude sloužit pro obojí.
Nyní si upravíme nastavení sítě.

sudo nano /etc/network/interfaces

eth0 a eth1 si nahraďte svými hodnotami
Případ pro 1 LAN (eth0):

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

#allow-hotplug eth0
#iface eth0 inet dhcp

# OvS
allow-ovs br0
iface br0 inet static
    address 192.168.1.2
    netmask 255.255.255.0
    gateway 192.168.1.1
    ovs_type OVSBridge
    ovs_ports eth0

allow-br0 eth0
iface eth0 inet manual
    ovs_bridge br0
    ovs_type OVSPort

Pokud přidělujeme adresu pomocí DHCP, zadáme v řádku iface br0 inet static namísto static hodnotu dhcp a následně vynecháme řádky address, netmask a gateway

Případ pro 2 rozhraní (eth0 a eth1):

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet static
    address 192.168.1.2
    netmask 255.255.255.0
    gateway 192.168.1.1

# OvS
allow-ovs br0
iface br0 inet manual
    ovs_type OVSBridge
    ovs_ports eth1

allow-br0 eth1
iface eth1 inet manual
    ovs_bridge br0
    ovs_type OVSPort

V případě DHCP u eth0 analogicky stejně jako u 1 rozhraní.

Nyní restarujeme systém.

sudo reboot

Konfigurace Libvirt

Nejprve se přidáme do skupin libvirt a libvirt-qemu (username nahraďte svým):

sudo adduser <username> libvirt
sudo adduser <username> libvirt-qemu

Obecné info

Konfigurační soubory jsou uloženy v /etc/libvirt a postupně se tam přidávají definice síťí, virtuálů, …
Data jsou uložena ve /var/lib/libvirt
V cestě pro data je třeba mít dost prostoru, protože tam budou i diskové img virtuálů, pokud se nerozhodnete využívat LVM (to v tomto návodu ale není popsáno).
Pokud vám umístění dat nevyhovuje, lze adresáře /var/lib/libvirt přenést jinam a udělat na něj link z /var/lib/libvirt na nové umístění.
Konfigurace se provádí z příkazového řádku pomocí příkazu virsh. Připojení k libvirtu se provádí pomocí příkazu

virsh --connect qemu:///system

v případě lokálního libvirtu, nebo

virsh -c qemu+ssh://<username>@<ip_address>/system

Dále existuje grafický nástroj Virtual Manager (balíček virt-manager), který ovšem je vždy trošičku pozadu v podpoře nových technologií. Virtual Manager bohužel neexistuje pro Windows.

Definování sítě s VLANy

OvS již máme nakonfigurovaný, a tak nyní provedeme konfiguraci v libvirtu. Nejprve si připravíme konfigurační XML soubor:

cd
nano ovs-vlan.xml

Vložíme následující, s úpravami dle místních potřeb. Jeden segment by měl být defaultní:

<network>
  <name>ovs-vlan</name>
  <forward mode='bridge'/>
  <bridge name='br0'/>
  <virtualport type='openvswitch'/>
  <portgroup name='vlan-100' default='yes'>
    <vlan>
      <tag id='100'/>
    </vlan>
  </portgroup>
  <portgroup name='vlan-200'>
    <vlan>
      <tag id='200'/>
    </vlan>
  </portgroup>
  <portgroup name='vlan-300'>
    <vlan>
      <tag id='300'/>
    </vlan>
  </portgroup>
  <portgroup name='vlan-400'>
    <vlan>
      <tag id='400'/>
    </vlan>
  </portgroup>
  <portgroup name='vlan-500'>
    <vlan>
      <tag id='500'/>
    </vlan>
  </portgroup>
</network>

Pokud VLAN nechceme, použijeme následují XML:

<network>
  <name>ovs-vlan</name>
  <forward mode='bridge'/>
  <bridge name='br0'/>
  <virtualport type='openvswitch'/>
  <portgroup name='default' default='yes'>
  </portgroup>
</network>

Nyní se připojíme k libvirtu:

virsh --connect qemu:///system

a vytvoříme síť, spustíme jí, nastavíme jí jako automaticky spouštěnou a opustíme virsh:

net-define /home/<username>/ovs-vlan.xml
net-start ovs-vlan
net-autostart ovs-vlan
quit

Definování virtuálního serveru

Protože v případě virtuálních serverů narozdíl od virtuálních pracovních stanic nové technologie typu GPU Passthrough, Virtio-GPU, … obvykle nepotřebujeme, doporučuji nainstalovat si někam Debianí desktop s Virtual Managerem (případně lze vyřešit pomocí VM ve Windows pomocí VirtualBoxu, …) a nakonfigurovat si virtuální servery pomocí něho.

Storage

Po instalaci libvirtu je aktivní storage repositář “default”, který odkazuje do /var/lib/libvirt/images
Je možné přidat další. Já např. přidávám “iso”, který odkazuje na /var/lib/libvirt/iso a do něj si dávám CD instalační image Debiana, případně něčeho dalšího, co budu instalovat vícekrát. Stáhnout cd image z internetu můžete pomocí příkazu wget .

Defaultně je jako disk využíván image QCOW2. Pomocí příkazu qemu-img lze vytvořit image qcow2, který se automaticky zvětšuje dle obsazeného místa, neboli určujete maximální velikost a image v reálu zabere pouze tolik místa, kolik dosud maximálně obsahoval. Image pak přiřadíte v průvodci při vytvoření VM ve Virtual Manageru.
Vytvoření 50GB image test.qcow2:

cd /var/lib/libvirt/images
qemu-img create -f qcow2 test.qcow2 50G

Maximální velikost image lze pozdějí zvětšit. Zmenšit nelze.
Zvětšení o 20GB:

qemu-img resize test.qcow2 +20G

Další možnosti příkazu qemu-img si zobrazíte pomocí qemu-img –help

Zdroje informací

https://libvirt.org/
https://www.qemu.org/
https://www.openvswitch.org/
https://www.debian.org/