Outils pour utilisateurs

Outils du site


brouillon_pptp

Ceci est une ancienne révision du document !


FAI VPN

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). On verra mieux a l'usage

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 <login> --password <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 <login>
remotename itshidden
ipparam itshidden
require-mppe-128

Et d'autres fichiers aussi (au moins pour le <password>)

En prod

peer

La conf est plutot:

pty "pptp vpn-pay.itshidden.com --nolaunchpppd --localbind <ip_interface>"
lock
noauth
nobsdcomp
nodeflate
name <login>
remotename itshidden
ipparam itshidden
require-mppe-128
##defaultroute
##replacedefaultroute
##usepeerdns
#debug
noipv6
persist
# et aussi ----
mtu 1492
# <del>mtu 1400</del> <= 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ù :

  • <login> est le login
  • <ip_interface> 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 <IFACE> -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

<IFACE> 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 <dns1> gw <gw_local>
# route add <dns2> gw <gw_local>

Et voila.

Deconnexion client

deroute

Si on est un goret, on fait:

# route del <dns2> gw <gw_local>
# route del <dns1> gw <gw_local>
# route del default
# route add default gw <gw_local>

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

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 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 :

... <snip> ...
# 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 :

... <snip> ...
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/ppp/pptpd-options :

... <snip> ...
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.
# /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 :

... <snip> ...
[logging]
      default = FILE:/var/log/krb5libs.log
      kdc = FILE:/var/log/krb5kdc.log
      admin_server = FILE:/var/log/kadmind.log
... <snip> ...
[libdefaults]
      default_realm = THIERRY-JAOUEN.FR
      dns_lookup_realm = false
      dns_lookup_kdc = false
      ticket_lifetime = 24h
      forwardable = yes
 ... <snip> ...
[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
      }
 ... <snip> ...
[domain_realm]
 ... <snip> ...
      .thierry-jaouen.fr = THIERRY-JAOUEN.FR
      thierry-jaouen.fr = THIERRY-JAOUEN.FR
 ... <snip> ...

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

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 :-\

brouillon_pptp.1289702720.txt.gz · Dernière modification : 2010/11/14 02:45 de thierry