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