Mettre en place un VPN ( Virtual Private network ) entre 2 FreeBSD dont l'un a une IP dynamique.

 

Supposons le schema suivant :

FreeBSD 4.0 nommé Client
FreeBSD 4.1 nommé Server

Le Client posséde :
- 1 carte Ethernet ( 192.168.115.1 255.255.255.0 )
- 1 connexion Internet via User-PPP chez un provider X avec un modem 56K
- 1 nom DNS dynamique ( http://www.dyndns.org ) : alfnet.dyndns.org

Le Server posséde :
- 1 carte Ethernet ( 172.27.58.1 255.255.0.0)
- 1 carte Ethernet ( 195.25.1.2 255.255.255.0)

Le tunnel VPN doit etre dans une classe IP ( impossible d'utiliser le ip unnumbered d'un cisco )
Les 2 machines doivent avoir OpenSSH installé

 

/etc/ppp/ppp.conf on the client

default: set log Phase Chat LCP IPCP CCP tun command Connect
 set device /dev/cuaa1
 set speed 115200
 deny lqr
 disable lqr
 deny pred1
 disable pred1
 set reconnect 1 0
 set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \"\" AT \ OK-AT-OK ATE1Q0 OK  \\dATM0L1DT\\T TIMEOUT 40 CONNECT"
internet:
 set filter alive 0 permit 0/0 0/0
 set filter alive 1 permit icmp
 set filter dial  0 permit 192.168.115.1/32 195.25.46.33/32
 set filter dial  1 permit 192.168.115.2/32 195.25.46.33/32
 set filter dial  2 permit 10.0.0.1/32 195.25.46.33/32
 set filter dial  3 deny icmp
 set filter dial  4 deny 0/0 0/0
 set filter in    0 permit 0/0 0/0
 set filter out   0 permit 0/0 0/0
 alias port tcp 192.168.115.2:31457 31457
free:
 load internet
 set phone 0170762000
 set login
 set authname LOGIN
 set authkey  PASSWD
 set timeout 0
 accept chap
 set ifaddr 10.0.0.1/0 10.0.0.2/0 0.0.0.0 0.0.0.0
 add default HISADDR
vpn:
 set timeout 600
 set log Phase LCP command
 set ifaddr 192.168.117.1 192.168.117.2  255.255.255.255
 add 172.27.0.0/16 HISADDR

/etc/ppp/ppp.linkup on the client

free:
 delete ALL
 add 0 0 HISADDR
 !bg su root     -c "/usr/sbin/sendmail -q"  
 !bg su - alf    -c "/usr/local/scripts/fetch.sh"
 !bg su - jerome -c "/usr/local/scripts/fetch.sh"
 !bg su - root   -c "/etc/ppp/ppp.script.majdns.sh"
 !bg su - root   -c "/usr/sbin/ntpdate -b canon.inria.fr"
 !bg su - root   -c "/etc/ppp/ppp.script.clog.sh"
vpn:

/etc/ppp/ppp.linkdown on the client

vpn:
 delete 172.27/16 HISADDR

/etc/services on the client

iimenu    	    18000/tcp #Beckman Instruments, Inc.
biimenu         18000/udp #Beckman Instruments, Inc.
ppp-out         19000/tcp #outgoing ppp tunnel
ppp-in          19001/tcp #incoming ppp tunnel
dbbrowse        47557/tcp #Databeam Corporation
dbbrowse        47557/udp #Databeam Corporation

/etc/inetd.conf on the client

swat    stream  tcp     nowait.400      root    /usr/local/samba/bin/swat        swat
ppp-in  stream  tcp     nowait			root    /usr/sbin/ppp					 ppp -direct vpn-in

/etc/services on the server

iimenu    	    18000/tcp #Beckman Instruments, Inc.
biimenu         18000/udp #Beckman Instruments, Inc.
ppp-out         19000/tcp #outgoing ppp tunnel
ppp-in          19001/tcp #incoming ppp tunnel
dbbrowse        47557/tcp #Databeam Corporation
dbbrowse        47557/udp #Databeam Corporation

/etc/rc.conf on the server

# User ppp configuration.
ppp_enable="YES"        # Start user-ppp (or NO).
ppp_mode="auto"         # Choice of "auto", "ddial", "direct" or "dedicated".
                        # For details see man page for ppp(8). Default is auto.
ppp_nat="NO"            # Use PPP's internal network address translation or NO.
ppp_profile="work"      # Which profile to use from /etc/ppp/ppp.conf.

/etc/ppp/ppp.conf the server

default:
 set log Phase Chat LCP IPCP CCP tun command
 set device /dev/cuaa1
 set speed 115200
 set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5\"\" AT OK-AT-OK ATE1Q0 OK\\"
 set filter alive 0 permit 0/0 0/0
 set filter alive 1 permit icmp

 set filter dial 0 permit 0/0 0/0
 set filter dial 1 permit icmp

 set filter in  0 permit 0/0 0/0
 set filter out 0 permit 0/0 0/0

work:
 set ifaddr 192.168.117.2 192.168.117.1 255.255.255.255
 add 192.168.115.0/24 HISADDR
 set timeout 600
 set reconnect 6 8
 set dial
 set device "!ssh -i /etc/ppp/ppp.key alfnet.dyndns.org"


Sur le server, en root, lancer les commandes suivantes : ssh-keygen -f /etc/ppp/ppp.key -C "Home PPP key" chmod 400 /etc/ppp/ppp.key Appuyez sur ENTER pour ne pas mettre de passphrase Copier le fichier /etc/ppp/ppp.key.pub depuis le server vers le Client ATTENTION : Ce fichier est la clef de protection du VPN ... Personne ne doit avoir acces, ou intercepter ce fichier! Sur le client, editez le fichier ~root/.ssh/authorized_keys cd ~root/.ssh vi authorized_keys ajouter la ligne suivante : command="echo foo",no-port-forwarding,no-X11-forwarding,no-pty,no-agent-forwarding Sauvegardez, puis quitter, cat your_dir/ppp.key.pub >> authorized_keys un more sur le fichier devrait donner un truc comme cela : command="echo foo",no-port-forwarding,no-X11-forwarding,no-pty,no-agent-forwarding 1024 35 1458<.....>317 Home PPP Key Pour tester, faites cela : ssh -i /etc/ppp/ppp.key alfnet.dyndns.org Si tout est OK, cela affiche "foo", remplacer alors "echo foo" par "ppp -direct vpn" Assurez vous que la machine assure le routage gateway_enable=YES dans /etc/rc.conf ou sysctl -w net.inet.ip.forwarding=1 si vous ne voulez pas rebooter Tapez ppp -auto work sur le Server, et un simple ping vers 192.168.117.1 devrait suffire a etablir la connexion. Bon courage Reference, exemples ( en anglais ) : http://www.itga.com.au/~gnb/vpn/fbsd.html et aussi : http://www.google.com/search?q=setting+up+a+vpn+using+freebsd&meta=lr%3D%26hl%3Dfr