HOWTO setup a simple IPSEC tunnel
Poul-Henning Kamp
phk at phk.freebsd.dk
Tue Jun 12 10:14:35 UTC 2007
Feel free to use whereever...
How to set up an IPSEC tunnel between two FreeBSD machines.
-----------------------------------------------------------
Replace these with your own parameters below:
${MY_IP_ADDRESS}
${OTHER_IP_ADDRESS}
${MYHOSTNAME}
${OTHERHOSTNAME}
Do the obvious MY<->OTHER flip in the other end of the tunnel.
Install ports/security/ipsec-tools
Add kernel options (or kldload):
device gif
device crypto
options FAST_IPSEC
If you have a HiFn cryptoboard (ie: Soekris NET14xx) also add:
device hifn
In your /etc/rc.conf:
gif_interfaces="gif0"
gifconfig_gif0="${MY_IP_ADDRESS} ${OTHER_IP_ADDRESS}"
ifconfig_gif0="192.168.48.22 192.168.48.21 netmask 255.255.255.252"
ipsec_enable=YES
ipsec_file=/etc/setkey.conf
racoon_enable=YES
You can use whatever addresses you want instead of 192.168.48.{21,22}, just
make sure to select them as the middle two in a /30 network. In other
words, the last byte of the IP numbers must be "N * 4 + 1" and "N * 4 + 2".
If you do not plan on running a routing daemon (routed(8) and such)
you can use any two IP# as long as you remove the "netmask 255..." bit.
Create /etc/setkey.conf containing:
spdflush;
spdadd 0.0.0.0/0 0.0.0.0/0 4 -P out ipsec esp/transport//require;
spdadd 0.0.0.0/0 0.0.0.0/0 4 -P in ipsec esp/transport//require;
This means: I want IPSEC on all IP-IP protocol packets. IP-IP is what
gif tunnels use and it has IP protocol 4 (see /etc/protocols).
Create /etc/racoon_psk.txt containing:
${MYHOSTNAME} ${PASSWORD}
${OTHERHOSTNAME} ${PASSWORD}
Make sure it has mode r--:
chmod 400 /etc/racoon_psk.txt
It's ok to use the same password for both hosts, it's easier that way.
A good way to find passwords for this kind of stuff is:
strings -16 < /dev/random
Create /usr/local/etc/racoon/racoon.conf containing:
path pre_shared_key "/etc/racoon_psk.txt" ;
remote anonymous
{
exchange_mode aggressive;
my_identifier fqdn ${MYHOSTNAME}
lifetime time 24 hour ;
proposal {
encryption_algorithm 3des;
hash_algorithm sha1;
authentication_method pre_shared_key ;
dh_group 2 ;
}
}
sainfo anonymous
{
pfs_group 2;
lifetime time 12 hour ;
encryption_algorithm 3des, cast128, blowfish 448, des, rijndael ;
authentication_algorithm hmac_sha1, hmac_md5 ;
compression_algorithm deflate ;
}
That should do it...
--
Poul-Henning Kamp | UNIX since Zilog Zeus 3.20
phk at FreeBSD.ORG | TCP/IP since RFC 956
FreeBSD committer | BSD since 4.3-tahoe
Never attribute to malice what can adequately be explained by incompetence.
More information about the freebsd-doc
mailing list