XenServer 6.2 + Kimsufi + 1 Public IP

Nelle ultime settimane è nata la necessità di avere un ambiente in cui poter testare e/o implementare una serie di “cose” che mi venivano in mente.

Cose abbastanza semplici, ma che necessitavano di alcune macchine virtuali raggiungibili da internet. Così ho pensato di comprare alcune VPS per istallarci sopra Debian e sopperire così alle mie necessità.
Cercando su internet ho però visto che su kimsufi.com è possibile prendere in affitto un server dedicato con un Core™ i5-3570S, 16GB di RAM ed 1TB di spazio disco a 19,99 euro/mese. Facendomi due calcoli ho deciso di comprarlo.

In un paio di minuti ho avuto l’accesso alla macchina, in breve tempo ho installato XenServer 6.2 e… AMARA SORPRESA!!!
Ho scoperto (mea culpa, bastava informarsi meglio) che non è possibile aggiungere IP al server in questione. Questo rendeva impossibile creare macchine virtuali che potessero uscire su internet (e quindi essere a loro volta raggiungibili).
Ho pensato subito che bastasse configurare in modo corretto le regole di iptables, in modo da permettere alle VM di uscire e, eventualmente, renderle raggiungibili dall’esterno.

Ammetto di non essere un guru delle regole di firewall.. sò di cosa si tratta, ma sono ancora lontano dal padroneggiarle con disinvoltura assoluta. Quindi ho cercato su internet una possibile soluzione che potesse essere compatibile con la situazione nella quale mi trovavo. Dopo una breve ricerca ho trovato questo sito web che spiega in modo più che chiaro come ovviare al problema di avere un solo IP pubblico.

Riporto, nel caso in cui il sito web di origine dovesse perdersi, il testo originale:

After installing Xenserver 5.5 or 5.6 you will need to define additional IPs that your VMs will use. Usually your provider will give you a range that you can use. But what do you do when you do not want to pay additional $$$ just for a couple of routable ips?
In my case I only have one public IP that is set on interface xenbr0 interface (bridged from eth0). In order to make my VMs to access the Internet I had to add an alias interface, something like :
ifconfig xenbr0:0 10.0.0.1 netmask 255.255.255.0 up
I will consider 10.0.0.0/24 my private LAN from where the VMs will get IPs. Additionally I route all traffic from 10.0.0.0/24 to xenbr0 using :
ip addr add 10.0.0.0/24 dev xenbr0
Now if you add an VM and set an IP from the 10.0.0.0/24 range you should be able to ping the 10.0.0.1 address. In order to reach the internet I also had to :

iptables -t nat  -A POSTROUTING -s 10.0.0.0/255.255.255.0 -j MASQUERADE
iptables -I RH-Firewall-1-INPUT -s 10.0.0.0/24 -j ACCEPT
service iptables save

Last thing is to modify /etc/sysctl.conf and enable ip_forward among other settings. This is how my config looks like:
net.ipv4.ip_forward = 1
net.ipv4.conf.default.proxy_arp = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.lo.send_redirects = 0
net.ipv4.conf.xenbr0.send_redirects = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
kernel.sysrq = 1
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 4294967295
kernel.shmall = 268435456
vm.dirty_ratio = 5
kernel.printk = 4 4 1 4

Quì i comandi che ho dato sulla console del mio xen server (dopo aver controllato il file /etc/sysctl.conf):

ifconfig xenbr1:0 10.0.0.1 netmask 255.255.255.0 up
ip addr add 10.0.0.0/24 dev xenbr1
iptables -t nat  -A POSTROUTING -s 10.0.0.0/255.255.255.0 -j MASQUERADE
iptables -I RH-Firewall-1-INPUT -s 10.0.0.0/24 -j ACCEPT

service iptables save

Una volta fatto ciò le VM potranno comunicare con l’esterno!
Non resta che far comunicare l’esterno con le VM adesso!
Per fare questo ho aggiunto le seguenti regole:

Con questa regola accedo dall'esterno in ssh sulla porta XXXX alla VM (web server ad esempio).
-A PREROUTING -p tcp --dport XXXX -j DNAT --to-destination 10.0.0.YY:22
Con questa regola mando il traffico della porta 80 alla VM YY (web server).
-A PREROUTING -i xenbr1 -p tcp -s ! 10.0.0.0/24 --dport 80 -j DNAT --to-destination 10.0.0.YY:80

In questo modo posso avere più VM, con un solo IP pubblico, che ospitano diversi servizi.
Ovvio, questa soluzione ha dei limiti, ma è ottima per avere un ambiente di test e non doversi svenare!

23 risposte a “XenServer 6.2 + Kimsufi + 1 Public IP”

  1. Ciao Alessandro,
    non so esattamente come funziona Kimsufi ma in generale, se hai disponibile un IP statico con tutte le porte aperte, diventa obbligatorio avere un gateway che regoli e assicuri il traffico LAN e WAN.
    Per tutto questo basta una minuscola vm con pfSense, che offre gateway, router, firewall, Soluzione facile da attivare e completa. Se poi hai masticato sistemi di rete e firewall watchguard, sei attivo in poche ore, (anche qualcosa di più via!)
    Richiede poche risorse ed offre servizi paragonabili alle soluzioni commerciali.
    Qui trovi la live CD su FreeBSD:
    https://www.pfsense.org/download/mirror.php?section=downloads
    Fammi sapere

    1. Ciao,
      il tuo ragionamento è corretto! Inizialmente avevo pensato alla soluzione che mi proponi, ma al posto di pfSense volevo usare routerOS. Ma, essendo a pagamento, ho abbandonato la soluzione ed ho adottato quella descritta nel post.
      Quello che avrei fatto con la pfSense l’ho fatto direttamente con iptables sul server fisico.
      Ovvio, con una vm-pfSense in mezzo avrei sicuramente più versatilità e una gestione più semplice probabilmente! Visto che mi sembra dotata di una gui.. ma devo provarla per poter esser sicuro!
      Non conosco i prodotti Watchguard, ma conosco il loro funzionamento e come replicare i loro servizi in ambienti opensource!
      Ti ringrazio molto del consiglio, proverò sicuramente la pfSense appena possibile! Anche perchè sembra un prodotto niente male da quello che ho letto brevemente in giro!

      Grazie!

  2. Non ne rimarrai deluso.
    Con la web GUI gestisci ogni aspetto della configurazione nei minimi dettagli con regole semplici e potenti. Solo le NIC messe a disposizione da XEN sono da configurare via shell ma in pochi passaggi ben descritti.
    Fai attenzione al fatto che da questa vm dipende tutto il resto della rete, per cui ti consiglio di mantenerti sempre la porta aperta e di fare uno snapshot di emergenza con i parametri minimi.
    Tra l’ altro puoi scaricare la configurazione parziale o totale sulla tua macchina locale.
    BSD manca di xentools, almeno non ne ho trovati in giro, forse tu ne sai qualcosa.
    Grazie a te.

  3. Ciao scusa volevo chiederti quando hai creato le vm che impostazioni di rete gli hai dato?

    1. Risolto ahahahha dovevo solo fare il reload del file di configurazione. Grazie per la guida!

  4. Ciao, io ho preso su hetzner.com all’asta, un i7 con 16 gb e due dischi raid e due ip pubblici a 35€ , notevole.

    Avendo due ip pubblici, uno l’ho assegnato al citrix xen host e l’altro ad endian firewall che fa da router per la lan virtuale dove faccio girare 4 server ed un front apache2 proxy.
    Avendo ip statico con fastweb, ho impostato con iptables il solo accesso ssh e https dal mio ip, mentre alla lan virtuale dei server ed al firewall endian mi collego con openvpn.

    Sono molto contento del tutto, ma rimango scettico e timoroso della sicurezza dello xenhost soprattutto in mancanza di tool dedicati.. Impossibilità di installare ossec, leggere log chiari di iptables sui droppackets e sulla possibilità di ricevere via email avvisi di bruteforce ecc attraverso software dedicati…

    Qualcuno ha esperienza in merito?
    Nel frattempo ho chiesto disponibilità di due server nello stesso rack, x installare un firewall dedicato che protegga esclusivamente lo xen host sul secondo server cablati fisicamente tra loro e poi un firewall per la rete lan virtuale dei server virtuali via proxy.

    1. Sfortunatamente ho i tuoi stessi dubbi sulla sicurezza della soluzione.
      Attualmente non ho ancora trovato nulla che mi faccia “dormire tranquillo”!

  5. Ciao,
    ho una server kimsufi con aimè un solo ip pubblico, ho letto in giro varie soluzioni utilizzando pfsense, ma avendo come distribuzione ESXI non posso fare routing, come è possibile risolvere?
    volendo usare xenserver, e avendo pfsense come gateway per le VM, come devo settare il tutto?
    penso che su pfsese dovrei inserire una default route vs la management di xenserver.
    grazie mille per l’aiuto

  6. Ciao, aveo postato una domanda, ma non è stata pubblicata.
    il post è ancora attivo?

    grazie

    1. Il post è attivo, ma non ho ricevuto nessun messaggio oltre quelli pubblicati.
      Se vuoi puoi scrivere nuovamente e vediamo se posso esserti utile in qualche modo.

  7. Ciao, allora cerco di rifare la domanda
    ho affittato un server kimsufi con ho messo su proxmox, dopo aver provato xen e esxi, ho visto che proxmox fa di più al caso mio.. Ho seguito passo passo la tua guida, e in uscita è tutto ok.

    in etrata non riesco assolutamente a raggiungere la macchina, esempio in rdp questa è la sintassi che inserisco nel file /etc/network/interfaces

    iptables -t nat -A PREROUTING -i vmbr0 -p tcp –dport 10080 -j DNAT –to 192.168.0.1:3389

    questa stringa io la inserisco nel file come detto sopra, ma la connessione in ingresso non funziona, ho provato con altri service: ftp, http, ssh. ma nulla, anche su più vm che siano windows o linux.

    non so se sbaglio qualcosa io.
    grazie mille per il supporto

    1. Non sò se con proxmox la situazione è la stessa, perchè la riga di iptables che hai postato mi sembra corretta.
      Se dai un “iptables -vnL” sulla macchina dovresti vedere le regole attive ed il traffico che viene fatto sopra.
      Vedi qualcosa?

  8. ciao, grazie per la risposta, dopo che inserisco la stringa direttamente in CLI, facendo la verifica dell’iptables come mi hai indicato, esce quanto di seguito. non vorrei che mi sfuggisse qualcosa

    root@:~# iptables -t nat -A PREROUTING -i vmbr0 -p tcp –dport 10080 -j DNAT –to 192.168.0.10:3389
    root@:~# iptables -vnL
    Chain INPUT (policy ACCEPT 281K packets, 31M bytes)
    pkts bytes target prot opt in out source destination

    Chain FORWARD (policy ACCEPT 30 packets, 1963 bytes)
    pkts bytes target prot opt in out source destination

    Chain OUTPUT (policy ACCEPT 338K packets, 66M bytes)
    pkts bytes target prot opt in out source destination

  9. ciao, sono riuscito a risolvere, bisogna salvare la tabella iptables con:

    #iptables-save

    e salvare la tablessa su iptables.rules con

    #iptables-save > /etc/iptables.rules

    grazie

  10. Ciao, leggendo i commenti ho letto della possibilità di usare pfsense,
    quindi senza utilizzare le regole di iptables, in tal caso però dovrei inserire cmq una regola dove accetto tutto il traffico in ingresso?
    potresti delucidarmi in merito.
    grazie mille

    1. Non ho provato la soluzione con la pfsense in mezzo perchè sono poi passato a Soyoustart in quanto ero troppo limitato con un solo IP pubblico.
      Non ti sò aiutare su questo.

  11. Ok, grazie mille, allora magari potresti darmi questa dritta su iptables.

    se volessi abilitare l’accesso dall’esterno su un range di porte verso una singola macchina come potrei fare.
    o ancora meglio fare un forwarding di tutto il traffico in ingresso vs una singola macchina così da includere tutte le porte, come potrei fare? grazie mille

    1. Ti conviene aprirti solo delle porte singole piuttosto che redirigere tutto il traffico verso una sola vm.
      Redirigere tutto su una vm sola rende inutile la virtualizzazione.. no? O probabilmente non ho inteso correttamente quello che vuoi ottenere.
      Per le porte singole puoi usare questa sintassi:
      -A PREROUTING -i xenbr1 -p tcp -s ! 10.0.0.0/24 –dport 80 -j DNAT –to-destination 10.0.0.YY:80
      Per un range di porte devi cambiare il –dport in –dport xxxx:yyyy

  12. l’intento era quello di indirizzare tutto il traffico vs un firewall/gateway ma poi non riuscirei a raggiungere la management di proxmox che si trova sulla 8006.
    facendo però un nat 1:1 per il servizio ftp, riesco a laggarmi sulla macchina, ma nn riesce a leggere l’albero della directory, credo che non dovrei nattare solo la porta 21 in questo caso. Hai suggerimenti? grazie mille

  13. Տono 2 ore che navogo e questo post è la sola ϲosa interessante che trovo.
    Veramente brillante. Se tutte le persone che creаno post si preoccupassero di dare materiale interessante come iil tuo la
    retе sarebbe sicramente più piacevole da leggerе.
    Continua così

I commenti sono chiusi.