kimsufi

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 Comments

  • andrea 30 ottobre 2014 at 16:09 Reply

    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

    • Alessandro Zanon 31 ottobre 2014 at 19:14 Reply

      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!

  • Andrea 4 novembre 2014 at 16:25 Reply

    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.

  • Andrea 26 gennaio 2015 at 22:41 Reply

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

    • Andrea 26 gennaio 2015 at 22:43 Reply

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

  • administrator 28 gennaio 2015 at 13:42 Reply

    Felice che ti sia servita!

  • Jj 28 giugno 2015 at 2:49 Reply

    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.

    • administrator 3 settembre 2015 at 8:40 Reply

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

  • Alex 25 agosto 2015 at 20:21 Reply

    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

  • Andrea 27 agosto 2015 at 17:46 Reply

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

    grazie

    • administrator 3 settembre 2015 at 8:39 Reply

      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.

  • Andrea 3 settembre 2015 at 13:12 Reply

    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

    • administrator 3 settembre 2015 at 14:22 Reply

      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?

  • Andrea 3 settembre 2015 at 16:03 Reply

    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

  • Andrea 3 settembre 2015 at 16:34 Reply

    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

  • Andrea 3 settembre 2015 at 17:09 Reply

    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

    • administrator 3 settembre 2015 at 17:12 Reply

      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.

  • Andrea 3 settembre 2015 at 17:47 Reply

    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

    • administrator 4 settembre 2015 at 9:34 Reply

      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

  • Andrea 4 settembre 2015 at 12:46 Reply

    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

  • Andrea 10 settembre 2015 at 13:24 Reply

    Già provato, ma niente

  • configurazione modem fastweb joy 14 aprile 2017 at 23:00 Reply

    Տ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ì

Lascia un commento