Com ja sabeu per aqui fem servir tunels des dels routers dels usuaris fins a un servidor per a accedir a Internet. Fins ara ho feiem amb Linksys amb OpenWRT i tunels OpenVPN amb certificats, com s'explica
aqui. De manera que els usuaris accedeixen de forma transparent tant a la xarxa guifi com a Internet.
Fins ara no haviem fet servir gaire els CPEs. La rao principal era que no els necessitavem i que tenia que posar-m'hi per a poder fer que establisin tunels de la mateixa manera que fem amb els Linksys. El RouterOS 2.x nomes suporta tunels PPTP, i despres de bastantes hores esbarellant-me amb el servidor Debian i el PPTPd, els he descartat perque tenia molts problemes d'estabilitat. Aixi que he agafat la RouterOS 3.0rc13 i m'hi he posat.
La implementació de client OpenVPN que porta el RouterOS 3.0 no suporta el sistema de certificats que feiem servir fins ara. Suporta un sistema de certificats mes senzill i també l'autenticació amb usuari i password. Com que els usuaris ja tenen un user/pass per autenticar-se en diferents serveis, i els tenim guardats en una taula de MySQL, he configurat un segon servei OpenVPN que autentiqui mitjançant els valors d'aquesta taula.
Configuració del servidorTot i que no fem servir certificats, el OpenVPN hem demana crear certificats pel servidor. Per crear-los segiu el que es diu
aqui. Necessitarem els:
dh1024.pem
openvpn-servidor.key
openvpn-servidor.crt
openvpn-auth.key
Els copiem a /etc/openvpn. I creem un openvpn.conf amb:
auth-user-pass-verify /home/joan/scripts/auth-ovpn-sql.pl via-env
client-cert-not-required
port 1194
proto tcp
dev tun
dh /etc/openvpn/dh1024.pem
ca /etc/openvpn/openvpn-ca.crt
cert /etc/openvpn/openvpn-servidor.crt
key /etc/openvpn/openvpn-servidor.key
server 192.168.12.0 255.255.255.0
ifconfig-pool-persist ipp2.txt
push "route 192.168.13.0 255.255.255.0"
client-to-client
keepalive 10 120
#comp-lzo
user nobody
group nogroup
persist-key
persist-tun
verb 3
cipher BF-CBC
auth SHA1
tls-server
El OpenVPN autenticara els usuaris mitjançant l'script
/home/joan/scripts/auth-ovpn-sql.pl. Aquest path l'heu de canviar pel que correspongui en el vostre sistema. Aquest script es cridat pel servidor OpenVPN posant a les enviromental variables el nom d'usuari i password que li ha passat el client OpenVPN per autenticar-se. L'script ha de verificar si son bones i retornar 0 si ho son i 1 si no ho son. En el meu cas ho tinc en una taula MySQL, el meu script (
auth-ovpn-sql.pl) es aquest:
#!/usr/bin/perl
use Mysql;
$host = "localhost";
$database = "nom_db";
$tablename = "nom_taula";
$user = "user_mysql";
$pw = "pass_mysql";
$connect = Mysql->connect($host, $database, $user, $pw);
$connect->selectdb($database);
$myquery = "SELECT * FROM $tablename WHERE user='".$ENV{'username'}."' AND pass='".$ENV{'password'}."'";
$execute = $connect->query($myquery);
# Si troba al menys 1 fila esta autenticat i retorna 0 al OpenVPN
if( $execute->numrows() ) { exit(0); } else { exit(1); }
Compte si el feu servir, que no hi he posat cap neteja de les variables i es pot fer Injecció de SQL. Es nomes un exemple, podeu validar contra el que vulgueu.
Configuració del CPEUna vegada posat el unsolcic, amb el winbox aneu a Interficies, en el desplegable amb la icona
+ seleccioneu
OVPN Client. En la pestanya
Dial Out:
Connect To: [IP del servidor OpenVPN]
Port: 1194
Mode: ip
User: [Nom d'usuari que teniu a la taula MySQL]
Pass: [Pass d'usuari que teniu a la taula MySQL]
Profile: default
Certificate: None
Auth: sha1
Cipher: blowfish 128
Seleccioneu la casella "Add Default Route"
Cal afegir un masquerade per a la nova Interficie que heu creat:
/ip firewall nat add action=masquerade chain=srcnat comment="" disabled=no out-interface=ovpn-out1
Heu de canviar també la ruta default que crea l'unsolclic. Aquesta ruta s'ha de canviar de manera que no encamini per dins del tunel el transit dirigit a la xarxa guifi. La manera més facil es anar a IP->Routes. Editar la ruta default que te
Destination 0.0.0.0/0 i canviar aquest valor per
10.0.0.0/8.
També
s'ha de desabilitar l'usuari guest del CPE, perque amb aquest compte es pot veure el user/pass que fa servir el trasto per establir el tunel.
Nomes afegir que ho havia provat de fer fa setmanes (mesos?) amb una Beta del RouterOS, però petava per tot arreu. Ara amb la rc13 es estable.
Comentaris
VPN
Hola Joan.
Magnific el HOWTO. He lograt conectar com a client el RouterOS (Mikrokit) i el meu openvpn basat en Debian.
Tinc un dubte que no se per on tirar.
Tal i com fiques, jo arranque la VPN desde la Debian en mode SERVER i el routerOS en OVPN-Client. Faig la conexió i desde la xarxa de darrere del mikrotik pot vore la xarxa darrere del debian amb vpn, pero al revés no. el meu iptables esta net al linux i al routerOs, pots ajudarme?
Salutacions
Problema de rutes
verifica les rutes del Debian que tingui el camí per arribar a rang de darrera del Mikrotik
Rutes al Debian
Si creia que era aixó, pero mira
Si cree la ruta com al mikrotik "route add -net 192.168.2.0 netmask 255.255.255.0 dev tun0" es crea pero no arriba
Si cree la ruta "route add -net 192.168.2.0 netmask 255.255.255.0 gw 11.0.2.6" em diu
SIOCADDRT: No existe el proceso
al tun 0 del ifcondig me ix "inet addr:11.0.2.1 P-t-P:11.0.2.2"
en canvi al LOG del ovpn
ovpn-tunel-mikrotik[23769]: XX.XX.XX.XX:41477 MULTI: primary virtual IP for XX.XX.XX.XX:41477: 11.0.2.6
Aquest es el meu EXEMPLE.conf al OPENVPN
auth-user-pass-verify /etc/openvpn/auth.sh via-env
client-cert-not-required
mode server
port 1194
proto tcp-server
dev tun
dh /etc/openvpn/keys/dh1024.pem
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/openvpn-servidor.crt
key /etc/openvpn/keys/openvpn-servidor.key
server 11.0.2.0 255.255.255.248
push "route 192.168.1.0 255.255.255.0"
ifconfig-pool-persist /etc/openvpn/ipp2.txt
client-to-client
client-config-dir ccd
keepalive 10 120
user nobody
group nogroup
persist-key
persist-tun
verb 3
cipher BF-CBC
auth SHA1
tls-server
gràcies
Bridging
Imagino que et refereixes a que a les dues bandes del tunel VPN hi vols tenir el mateix adreçament (Ex: 192.168.2.0/24), i que el tunel actui de forma transparent, de manera que puguis accedir als dispositius de les dues bandes com si estiguessin fisicament connectats a un switch.
Per fer-ho necessites una configuració diferent del OpenVPN, has de fer servir taps en comptes de tuns, i posar les interficies del tunel dins d'un bridge amb la interfície que te la 192.168.2.x. No tinc cap exemple, però ho trobaràs explicat aqui:
http://openvpn.net/index.php/open-source/documentation/howto.html#config
http://openvpn.net/index.php/open-source/documentation/miscellaneous/76-...
Si te'n surts, estaria bé que fessis un comesfa.
Routing
No, no es la meva idea.
Mes o menys es així
XARXA LOCAL SERVIDOR LINUX OPENVPN (internet) MIKROTIK ROUTEROS CLIENT XARXA REMOTA
192.168.0.0/24 ------ IP PUBLICA I FIXA ========================= IP PUBLICA DHCP ---------- 192.168.2.0/24
IP fixe per common name
Ok. Llavors has de fer que el servidor openvpn dongui sempre la mateixa IP de tunel al mikrotik i posar-hi una ruta al mikrotik.
Primer fem que el servidor sempre asigni el mateix parell d'IPs al mikrotik:
mkdir /etc/openvpn/ccd
a la config del servidor afegeixes aquestes linees:
client-config-dir /etc/openvpn/ccd
username-as-common-name
Imaginem que el username que fas servir al mikrotik per autenticar el tunel es "jtormo" i que el parell d'IPs que s'asignen son: "192.168.22.200 192.168.22.201". Crees un fitxer "/etc/openvpn/ccd/jtormo" amb el contingut:
ifconfig-push 192.168.22.200 192.168.22.201
Restart a les dues bandes. Ara el tunel entre el mikrotirk i el servidor openvpn sempre tindran el mateix parell d'IPs.
Al servidor debian li has de fer una entrada a les rutes dient que:
route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.22.200
Suposo que ja t'anirà, ho estic fent de memoria. Si alguna cosa falla, prova de fer un masquerade al Debian per tot el que entri el tunel (iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE).
Compte a les dues bandes amb els FORWARDS, que no es pugui entrar des de guifi a dins del tunel.
Routing
Hola de nou XD.
Gràcies de nou. He configurar les IP fixes per al tunel y el masquerade, pero desde la xarxa del Linux a la xarxa del mikrokit no funciona. Al revés si que ho fa.
Aquest es el resum de la meva instalació.
Al Server Debian linux (Lenny):
/etc/openvpn/tunel-mikrokit.conf
---------------------------------------------------
auth-user-pass-verify /etc/openvpn/auth.sh via-env
client-cert-not-required
mode server
port 1194
proto tcp-server
dev tun
dh /etc/openvpn/keys/dh1024.pem
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/openvpn-servidor.crt
key /etc/openvpn/keys/openvpn-servidor.key
client-config-dir /etc/openvpn/ccd
username-as-common-name
server 11.0.3.0 255.255.255.248
push "route 192.168.0.0 255.255.255.0"
ifconfig-pool-persist /etc/openvpn/ipp2.txt
client-to-client
keepalive 10 120
user nobody
group nogroup
persist-key
persist-tun
verb 3
cipher BF-CBC
auth SHA1
tls-server
-----------------------------
/etc/openvpn/ccd/pepe
ifconfig-push 11.0.3.2 11.0.3.1
La Configuració IPTABLES al servidor
---------------------------
/sbin/iptables -t filter -F
/sbin/iptables -t nat -F
/sbin/iptables -t mangle -F
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT
iptables -t nat -A POSTROUTING -o eth8 -j MASQUERADE # XARXA INTERNET
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE # XARXA TUNEL
echo 1 > /proc/sys/net/ipv4/ip_forward
----------------------------
He creat la ruta
route add -net 192.168.2.0 netmask 255.255.255.0 gw 11.0.3.2
Y aquesta es la configuració IP de la maquina
# PRIVADA DARRERE XARXA INTERNA
eth7 Link encap:Ethernet HWaddr 00:10:18:27:9f:6f
inet addr:192.168.0.7 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:77407845 errors:0 dropped:0 overruns:0 frame:0
TX packets:62755310 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1585090155 (1.4 GiB) TX bytes:4063987344 (3.7 GiB)
Interrupt:16
# PUBLICA i FIXA AL SERVIDOR
eth8 Link encap:Ethernet HWaddr 00:a0:c5:d5:05:21
inet addr:[IP PUBLICA] Bcast:XX.XX.XX.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:21005445 errors:2 dropped:0 overruns:0 frame:2
TX packets:12700458 errors:0 dropped:0 overruns:0 carrier:4
collisions:0 txqueuelen:1000
RX bytes:1177759141 (1.0 GiB) TX bytes:1352574800 (1.2 GiB)
# EL TUN DE OVPN
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:11.0.3.1 P-t-P:11.0.3.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:3800 errors:0 dropped:0 overruns:0 frame:0
TX packets:8800 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:243260 (237.5 KiB) TX bytes:642068 (627.0 KiB)
Aquesta es la tabla de rutes que tinc
11.0.3.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
11.0.3.0 11.0.3.2 255.255.255.248 UG 0 0 0 tun0
192.168.2.0 11.0.3.2 255.255.255.0 UG 0 0 0 tun0
62.43.206.0 0.0.0.0 255.255.255.0 U 0 0 0 eth8
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth7
CREC que es tota la informació possible al Servidor.
Reincie OVPN y tinc estos pings de prova
TINC INTERNET: 64 bytes from 80.58.0.33: icmp_seq=1 ttl=123 time=21.5 ms
VEIG LA TUN0 LOCAL: 64 bytes from 11.0.3.1: icmp_seq=1 ttl=64 time=0.040 ms
VEIG LA TUN0 REMOTA: 64 bytes from 11.0.3.2: icmp_seq=1 ttl=64 time=316 ms
NO VEIG LA XARXA LOCAL REMOTA: PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data. TIMEOUT..... :-(
Al Mikrokit tinc açó
Masquerade SRCNAT OUT ether1
Masquerade SRCNAT OUT ovpn-client -d 192.168.0.0724
FILTER RULES NOMES TINC: ACCEPT INPUT TCP 1194
El ovpn-client tinc:
conect to: IP PUBLICA SERVER LINUX
PORT 1194
MODE: IP
User pass: XXXX/XXXX XDDDD
PROFILE: default
SHA, Blowfish y desactivat la opcio add default route
He tratat de activarla i provar i carabasses igual
Ja no se si es de rutes o firewall, estic una mica perdut ja que en un sentit funciona.
Alguna idea?
Al mikrokit tinc
A veure si trobem on hi ha el
A veure si trobem on hi ha el problema.
Imagino que la eth1 del CPE deu tenir alguna 192.168.2.x.
Al Servidor no cal que li posis un MASQUERADE del que entra al tunel (iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE # XARXA TUNEL).
Al Mikrotik sembla que li fa mal el MASQUEREADE del que va cap a la LAN privada (Masquerade SRCNAT OUT ether1).
Quan dius que tens internet, vols dir que des de la xarxa privada hi ha com a default gateway la IP del eth1 del CPE, i el Mikrotik ho envia a traves del tunel cap al Servidor, i aquest ho reenvia cap a Internet. Per tant tambe podries treure de la config openvpn del servidor el: 'push "route 192.168.0.0 255.255.255.0"', no fa mal, pero no te sentit.
En teoria, com que al servidor ja li hem dit que la 192.168.2.0/24 la trobara a traves del tunel, al mikrotik li podries treure el masquerade: "Masquerade SRCNAT OUT ovpn-client -d 192.168.0.0/24". Has de tenir en compte, que la resta d'ordinadors que estan a la banda del Servidor, s'ha de posar que trobaran la subnet 192.168.2.0/24 a traves de la IP del servidor. A no ser que tinguis com a default gw, en la xarxa de servidor, la ip del servifor en comptes de la del router ADSL.
En resum, com que cada extrem dels tunels saben quina subnet hi ha a l'extrem contrari, i com arribar-hi, en teoria no calen els MASQUERADES.
A veure si aixi funciona
NO HI HA FORMA
Hola de nou. Estic pegamme de cabotades contra la taula i no hi ha forma.
No se si he dit que desde el servidor i la xarxa que porta darrere d'ell si que puc vore la IP que li dona de tunel (11.0.3.1 SERVIDOR) y (11.0.3.2 MIKROTIK). Eixes dos desde els dos llocs es poden vore ambes, pero la xarxa interna al darrere del mikrotik desde la xarxa del Servidor MEEC.
A vore si podem en aço
Gracies
PEP