====== FAI VPN ======
*https://vpntunnel.se/
*https://www.anonine.com/
*http://www.hidemynet.com/
*http://www.itshidden.com
*http://www.korben.info/configurer-le-vpn-ipredator-sur-linux-ubuntu.html
| Fournisseur | VPN | M-A-J | Ports | Qualité | Commentaire |
| ItsHidden.com | pptp | 08/2010 | tous ouverts | OK | correct. (+30 ms sur les pings) |
| ipredator.se | pptp | 12/2009 | tous ouverts | Bof | trop lent ! (+120 ms sur les pings!) |
| blackvpn.com | pptp/OpenVPN | 08/2010 | fermés! | OK | les ports P2P fermés = LowID (pas de redirection) je n'ai pas insisté |
| vpntunnel.se | OpenVPN | 08/2010 | tous ouverts | OK | ping un peu lent (+120 ms). A l'usage: c'est bien. |
===== Client OpenVPN =====
OpenVPN est mieux, dans le sens où :
*la MTU est standard: 1500 (pas de règle iptables avec MSS...)
*le protocole est mieux fait (alors que "pptp" est un truc batard)
*le service/daemon peut être configuré pour maintenir la connexion 24h/24
*plus simple a configurer, sous Linux.
==== Généralité ====
# aptitude update
# aptitude install openvpn
On peut s'inspirer de la conf dans le fichier "client.conf" :
# dpkg -S openvpn | grep client.conf
openvpn: /usr/share/doc/openvpn/examples/sample-config-files/client.conf
On prépare des répertoires.
Pour les clés:
# cd /etc/openvpn
# mkdir keys
# chmod og-rx keys
Pour les confs:
# mkdir conf
On mettra les conf dans **''/etc/openvpn/conf''** . Et lorsqu'on voudra les activer (a chaque redemarrage) il faudra creer des liens vers ces confs dans **''/etc/openvpn''** .
Exemple:
# cd /etc/openvpn
# ln -s /etc/openvpn/conf/client-vpntunnel-se.conf .
(Il faut que le fichier de conf soit terminé par ".conf")
Et pour finir:
# /etc/init.d/openvpn restart
et un coup d'oeil dans les logs.
==== vpntunnel.se ====
Pour 5 euros pas mois...
On créé d'abord un compte... (on obtient les codes d'accès en passant).
On se prepare a recevoir des fichiers sensibles, et donc:
# cd /etc/openvpn/keys
# mkdir vpntunnel.se
On se connecte sur son compte, et on recupère le fichier "ca.crt"
Qu'on place dans **''/etc/openvpn/keys/vpntunnel.se''**
Dans le même répertoire, on créé aussi un fichier texte contenant son "username" et "password" comme cela (2 lignes):
username
password
On nomme ce fichier **''user-pass.txt''**
A partir de l'aide (du fournisseur de VPN), on compose une configuration comme cela:
client
float
dev tap
proto udp
remote-random
remote melissa.vpntunnel.se 1194
remote melissa.vpntunnel.se 10010
remote melissa.vpntunnel.se 10020
resolv-retry infinite
nobind
persist-key
persist-tun
ca keys/vpntunnel.se/ca.crt
ns-cert-type server
cipher BF-CBC #Blowfish
comp-lzo
verb 3
auth-user-pass keys/vpntunnel.se/user-pass.txt
le "remote-random" c'est parce qu'il y a plusieurs serveurs VPN en "remote"
Et voila.
Un petit bémol: il detourne ma gateway par defaut. Je préfère faire cela moi-même.
Astuce pour creer des routes:
Ajouter dans la conf:
# TJ
# ------------------------
# Execution de script
script-security 2
up /etc/openvpn/scripts/up-vpn-itshidden-route
down /etc/openvpn/scripts/down-vpn-itshidden-route
# ------------------------
Monter les routes a partir des scripts sus-nommé... Par exemple:
#!/bin/sh
ip rule add fwmark 0x000f0001 table 200
ip route add default dev $1 table 200
ip route flush cache
Où "$1" est le nom du tunnel ("tap0") ... ( **''man ip''** pour le reste)
====== Client PPTP ======
Connexion à un serveur VPN via PPTP, par exemple avec http://www.itshidden.com
===== Preambule =====
Il faut d'abord créer un compte sur "itshidden" ... ou bien connaitre un autre serveur VPN/PPTP.
===== Préparer client =====
# aptitude install pptp-linux
''# modprobe ppp-compress-1''
Au préalable, il peut etre necessaire d'installer "binutils" ainsi:
# aptitude update && aptitude install binutils
(parce ce que sinon, "pptpsetup" fait un test qui ne marche pas )
Creer un fichier "peer" comme ca:
# pptpsetup --create itshidden --server vpn.itshidden.com --username --password --encrypt
Adapter selon vos besoins:\\
**''itshidden''** est le nom du serveur/fichier peer.\\
**''--encrypt''** parce que ce serveur exige un cryptage.
Aprés cette commande, un fichier existe:
# cat /etc/ppp/peers/itshidden
# written by pptpsetup
pty "pptp vpn.itshidden.com --nolaunchpppd"
lock
noauth
nobsdcomp
nodeflate
name
remotename itshidden
ipparam itshidden
require-mppe-128
Et d'autres fichiers aussi (au moins pour le )
===== En prod =====
==== peer ====
La conf est plutot:
pty "pptp vpn-pay.itshidden.com --nolaunchpppd --localbind "
lock
noauth
nobsdcomp
nodeflate
name
remotename itshidden
ipparam itshidden
require-mppe-128
##defaultroute
##replacedefaultroute
##usepeerdns
#debug
noipv6
persist
# et aussi ----
mtu 1492
# mtu 1400 <= it's a myth
# ----------
| :!: Voir la section suivante a propos de la MTU |
| :!: ItsHidden.com : Sans **"mtu 1492"** (inférieure ou égale) , certains sites sont inaccessible, free.fr par exemple. |
| :!: Ipredator.se : Sans **"mtu 1404"** (inférieure ou égale) , certains sites sont inaccessible, free.fr par exemple. |
La MTU, plus c'est grand, mieux c'est. \\
Mais quand c'est trop grand ça marche pas, et quand c'est trop petit ça marche plus.
Où :\\
* est le login
* est l'adresse ip de l'interface de sortie utilisé (ouai, j'ai 17 interfaces réseaux ;) )
| :!: Et le vpn n'est pas la route par defaut. |
| :!: Les routages sont effectués avec "iptables" et "ip rule"... |
==== MTU ====
=== 99% ===
La MTU pose plusieurs problème ...
On en élimine une bonne partie en appliquant 2 choses simultannements:
* une MTU "raisonable" ... genre: 1492 (pour ItsHidden.com) ou 1404 (pour Ipredator.se) .
* une règle IPTABLES qui va bien.
Voici la règle "iptables" nécessaire:
# iptables -t mangle -A POSTROUTING -o -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
Où **''''** est l'interface du vpn. Le plus souvent: **''ppp0''**
=== 1% ===
Toutefois, il subsiste de mysterieux messages dans les logs:
kernel: [xxxx.xxxxx] mppe_compress[0]: osize too small! (have: 1404 need: 1408)
D'aprés mes recherches, dans le brouillard des archives :
*Soit c'est un problème de MTU, mais je cherche encore quoi !
*Soit c'est un bug inhérent au protocole PPTP (d'aprés ce que j'ai lu, il y aurait un algo qui veut toujours compresser les données, et parfois, il se retrouve avec plus de données qu'au départ.)
*Soit c'est simplement un bug. http://bugs.contribs.org/show_bug.cgi?id=5633
===== Connexion client =====
==== pon ====
| :!: On peut faire plus propre en s'attardant sur la config de "ppp" |
# pon itshidden
Ok ? Verifions:
# plog -f
Jul 27 14:34:10 nin2 pppd[7256]: pppd 2.4.4 started by root, uid 0
Jul 27 14:34:10 nin2 pppd[7256]: Using interface ppp0
Jul 27 14:34:10 nin2 pppd[7256]: Connect: ppp0 <--> /dev/pts/3
Jul 27 14:34:14 nin2 pppd[7256]: Warning - secret file /etc/ppp/chap-secrets has world and/or group access
Jul 27 14:34:14 nin2 pppd[7256]: Warning - secret file /etc/ppp/chap-secrets has world and/or group access
Jul 27 14:34:14 nin2 pppd[7256]: CHAP authentication succeeded
Jul 27 14:34:14 nin2 pppd[7256]: MPPE 128-bit stateless compression enabled
Jul 27 14:34:14 nin2 pppd[7256]: Cannot determine ethernet address for proxy ARP
Jul 27 14:34:14 nin2 pppd[7256]: local IP address 192.168.2.14
Jul 27 14:34:14 nin2 pppd[7256]: remote IP address 192.168.2.1
Et:
# ifconfig ppp0
ppp0 Link encap:Protocole Point-à-Point
inet adr:192.168.2.14 P-t-P:192.168.2.1 Masque:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1496 Metric:1
RX packets:113 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:3
RX bytes:31795 (31.0 KiB) TX bytes:66 (66.0 B)
==== route ====
Indispensable si l'on fait ça comme un goret:
Effacer la route par defaut actuelle:
# route del default
Mettre la nouvelle:
# route add default gw 192.168.2.1
Adapter la "gateway" selon "ifconfig" et "plog".
Mais comme les DNS ne peuvent plus me repondre...
# route add gw
# route add gw
Et voila.
===== Deconnexion client =====
==== deroute ====
Si on est un goret, on fait:
# route del gw
# route del gw
# route del default
# route add default gw
==== poff ====
# poff itshidden
Et voila.
$ plog -f
Jul 27 14:47:21 nin2 pppd[7256]: Terminating on signal 15
Jul 27 14:47:21 nin2 pppd[7256]: Modem hangup
Jul 27 14:47:21 nin2 pppd[7256]: Connect time 13.2 minutes.
Jul 27 14:47:21 nin2 pppd[7256]: Sent 58038 bytes, received 433407 bytes.
Jul 27 14:47:21 nin2 pppd[7256]: MPPE disabled
Jul 27 14:47:21 nin2 pppd[7256]: Connection terminated.
Jul 27 14:47:21 nin2 pppd[7256]: Exit.
Mais y a des relicats...
# route del 94.75.220.x
# route del 94.75.220.y
bizarre...
===== Tips =====
==== default "pon" ====
Par defaut, si on tape "pon" sans precision, c'est le "peer" nommé "provider" qui est connecté.
Donc:
# cd /etc/ppp/peers
# mv provider old-provider
# ln -s /etc/ppp/peers/itshidden ./provider
==== crontab et reboot ====
Pour que la connexion "pon" soit automatique au reboot, faire un truc comme ca:
# crontab -e
Et puis avoir une ligne comme ça:
@reboot su -c "/usr/bin/pon"
Sans le "su" , ca ne fonctionne pas du tout (pppd retourne des erreurs). Je n'ai pas d'explication.
Idem pour d'autres scriptes qui pourraient s'executer à partir de "crontab" et nécessiter "pon/poff/pppd" ....
==== interfaces ====
Possible de mettre en oeuvre "ppp/pptp" via le classique fichier **''/etc/network/interfaces''** !
D'abord, ajouter "updetach" dans le fichier "peers" et puis editer le fichier "interfaces" afin d'avoir, par exemple:
auto vpn
iface vpn inet ppp
provider itshidden
Et enfin:
# ifup vpn
et plus tard:
# ifdown vpn
Mais l'interface "vpn" n'existe nulle part dans "ifconfig" ou "ip link/addr" ... c'est le traditionnel **''ppp0''** qui reste la véritable interface.
Bien étrange, et peut être pas si interessant que cela...
====== Serveur ======
Liens:
*http://www.antiseches.net/post/Creer-un-reseau-VPN-en-pptp-avec-un-serveur-Linux-Debian-Lenny
*http://www.members.optushome.com.au/~wskwok/poptop_ads_howto_1.htm
===== Serveur PPTP et Windows Active Directory =====
Serveur PPTP et active directory.
==== environnement ====
*DomU
*amd 64 bit
*Debian Lenny
En dehors du systeme "Lenny", les packages autour de "pptp", "samba", "winbind", etc... seront piochés dans "lenny-backports" .
Le domaine: THIERRY-JAOUEN.FR
et c'est là qu'est l'os. le ".FR" créé une confusion entre domaine public et privé.
==== reseau ====
* Ip local: (elle est NATé via un firewall)
Pas d'ipv6, donc :
# echo "blacklist ipv6" >> /etc/modprobe.d/blacklist
Mais , associé au domaine "Windows" qui est "thierry-jaouen.fr"
Donc, dans **''/etc/resolv.conf''** :
domain thierry-jaouen.fr
search thierry-jaouen.fr thierry-jaouen.localhost
nameserver 192.168.6.44
nameserver 8.8.8.8
nameserver 8.8.4.4
| :!: le 1er DNS doit être le Windows "Active Directory" |
Dans **''/etc/hostname''** :
vpn-server.thierry-jaouen.fr
Dans **''/etc/hosts''** :
127.0.0.1 localhost
127.0.1.1 vpn-server.thierry-jaouen.fr vpn-server
==== Windows ====
Le "Active Directory" Windows doit avoir son DNS configuré pour faire un "reverse" correct de l'ip du serveur vpn.
Windows Server > Demarrer > Outils d'Administration > DNS > Zone Recherche Inverse >
192.168.6.x > Nouveau pointeur PTR > 192.168.6.44 = vpn-server.thierry-jaouen.fr
==== backports ====
Dans **''/etc/apt/sources.list''** :
... ...
# backports
deb http://backports.debian.org/debian-backports lenny-backports main contrib non-free
Dans **''/etc/apt/preferences''** :
Package: *
Pin: release a=lenny-backports
Pin-Priority: 200
==== ferm ====
Firewall !
Autoriser le forward et interdire la reponse arp pour n'importe quel interface:
Donc, dans **''/etc/sysctl.conf''** :
... ...
net.ipv4.conf.all.arp_ignore=1
net.ipv4.ip_forward=1
Et puis:
# sysctl -p
Preparer quelques modules (avant d'installer ferm):
Donc, dans **''/etc/modules''** :
ip_tables
ip_conntrack_ftp
ip_nat_ftp
ip_conntrack_irc
##ip_nat_pptp
##ip_conntrack_pptp
Et faire (le reste pouvant attendre) :
# modprobe ip_tables
Installer **''ferm''** :
# aptitude -t lenny-backports install ferm
Mettre les règles, dans **''/etc/ferm/ferm.conf''** :
# ------------------------------------
# Regles iptables avec Ferm
# ------------------------------------
# LAN thierry jaouen
@def $LAN_IF = "eth0";
# VPN
@def $VPN_IF = ppp+;
# ---------------------
chain ( INPUT OUTPUT FORWARD ) policy DROP;
# ---------------------
# Local
# ---------------------
chain INPUT if lo ACCEPT;
chain OUTPUT of lo ACCEPT;
# ---------------------
# LAN
# ---------------------
chain INPUT if $LAN_IF ACCEPT;
chain OUTPUT of $LAN_IF ACCEPT;
# ---------------------
# VPN
# ---------------------
chain INPUT if $VPN_IF ACCEPT;
chain OUTPUT of $VPN_IF ACCEPT;
# modifier "mtu" a la volée, sinon, certains sites dont "www.free.fr" sont inaccessible
# vpn => lan => internet
table mangle chain FORWARD if $VPN_IF of $LAN_IF proto tcp tcp-flags ( SYN RST ) SYN TCPMSS clamp-mss-to-pmtu;
chain FORWARD if $VPN_IF of $LAN_IF mod state state ( NEW ESTABLISHED RELATED ) ACCEPT;
chain FORWARD if $LAN_IF of $VPN_IF mod state state ( NEW ESTABLISHED RELATED ) ACCEPT;
# ---------------------
# EOF
Mais pourquoi tout cela ?
D'abord, pour pouvoir ultérieurement appliqués des restrictions: ce n'est pas le cas ici.
Ensuite, pour qu'un site comme "www.free.fr" soit accéssible !
Et oui, avec "free" (et surement quelques centaines de milliers d'autres sites), il y a un problème de MTU. Ce problème disparait avec la règle "MSS" ci-dessus.
Appliquer **''ferm''** :
# ferm ferm.conf
==== pptpd ====
*SANS* active directory pour commencer.
aptitude -t lenny-backports install pptpd
Dans **''/etc/pptpd.conf''** :
... ...
localip 192.168.23.254
remoteip 192.168.23.64-191
connections 10
listen 192.168.6.43
Dans **''/etc/ppp/pptpd-options''** :
name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
ms-dns 192.168.6.44
ms-dns 8.8.8.8
noproxyarp
defaultroute
lock
nobsdcomp
novj
novjccomp
nologfd
auth
nopersist
A noter:
* "noproxyarp" et "defaultroute" qui sont a l'opposé de la conf par defaut.
* "novj", "novjccomp", "nologfd", "auth" et "nopersist" qui sont ajoutés.
| :!: En pratique "(no)proxyarp" "(no)defaultroute" ne fait rien que je puisse etudier!!! je sais, c'est bizarre. A vous de voir! |
# /etc/init.d/pptpd restart
==== kerberos ====
# aptitude -t lenny-backports install krb5-config krb5-user
Serveurs Kerberos pour votre domaine :
pdc1.thierry-jaouen.fr pdc2.thierry-jaouen.fr
Serveur administratif:
pdc1.thierry-jaouen.fr
adapter le fichier **''/etc/krb5.conf''** :
... ...
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
... ...
[libdefaults]
default_realm = THIERRY-JAOUEN.FR
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
forwardable = yes
... ...
[realms]
THIERRY-JAOUEN.FR = {
kdc = pdc1.thierry-jaouen.fr
kdc = pdc2.thierry-jaouen.fr
admin_server = pdc1.thierry-jaouen.fr
default_domain = thierry-jaouen.fr
}
... ...
[domain_realm]
... ...
.thierry-jaouen.fr = THIERRY-JAOUEN.FR
thierry-jaouen.fr = THIERRY-JAOUEN.FR
... ...
Et puis:
# kinit administrateur@THIERRY-JAOUEN.FR
Password for administrateur@THIERRY-JAOUEN.FR:
Verifier que ca fonctionne avec:
# klist
==== winbind et samba ====
... nul besoin d'installer samba !
# aptitude -t lenny-backports install winbind
Domaine: (on s'en fout)
THIERRY-JAOUEN
Wins DHCP:
NON
Modifier **''/etc/samba/smb.conf''** :
[global]
workgroup = THIERRY-JAOUEN
realm = THIERRY-JAOUEN.FR
server string = %h server
interfaces = 192.168.6.43, lo
bind interfaces only = Yes
security = ADS
password server = 192.168.6.44
log file = /var/log/samba/%m.log
max log size = 50
load printers = No
printcap name = /dev/null
local master = No
domain master = No
dns proxy = No
# TJ -----------
# 2010/11/10
wins support = no
#wins server = 192.168.6.44
# --------------
panic action = /usr/share/samba/panic-action %d
idmap uid = 30000-40000
idmap gid = 30000-40000
template shell = /bin/bash
winbind separator = +
winbind enum users = Yes
winbind enum groups = Yes
printing = bsd
print command = lpr -r -P'%p' %s
lpq command = lpq -P'%p'
lprm command = lprm -P'%p' %j
[homes]
comment = Home Directories
valid users = %S
create mask = 0700
directory mask = 0700
browseable = No
[printers]
comment = All Printers
path = /var/spool/samba
create mask = 0700
printable = Yes
browseable = No
[print$]
comment = Printer Drivers
path = /var/lib/samba/printers
Je crois qu'en dehors de la section "global" , le reste ne sert a rien.
# net rpc join -S pdc1.thierry-jaouen.fr -U administrateur
Enter administrateur's password:
Joined domain THIERRY-JAOUEN.
# /etc/init.d/winbind restart
# wbinfo -t
checking the trust secret for domain THIERRY-JAOUEN via RPC calls succeeded
Ok.
Ainsi que:
# wbinfo -u
... retourne la liste des comptes presents.
# wbinfo -g
... retourne la liste des groupes...
Nous voila pret a associer le serveur "pptpd" et l'"Active Directory" Windows.
==== pptpd et Active Directory ====
Il suffit d'ajouter dans **''/etc/ppp/pptpd-options''** :
plugin winbind.so
ntlm_auth-helper "/usr/bin/ntlm_auth --helper-protocol=ntlm-server-1"
Pour autoriser que des utilisateurs appartenant au groupe "Group-VPN" :
ntlm_auth-helper "/usr/bin/ntlm_auth --helper-protocol=ntlm-server-1 --require-membership-of=THIERRY-JAOUEN+Group-VPN"
... et puis:
# /etc/init.d/pptpd restart
====== ItsHidden ======
Lien: http://www.itshidden.com
===== limites =====
Starting Nmap 4.62 ( http://nmap.org ) at 2009-12-03 01:02 CET
Interesting ports on xxxxxx:
Not shown: 1712 filtered ports
PORT STATE SERVICE
6881/tcp closed bittorrent-tracker
Oups... pas de bittorrent :-\