荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: jjk (○kernel○), 信区: Linux
标  题: Configuring a VPN on FreeBSD[fwd]
发信站: 荔园晨风BBS站 (Sun Mar 24 14:37:17 2002), 转信

【 以下文字转载自 jjk 的信箱 】
【 原文由 jjksam@smth.org 所发表 】
发信人: i386 (i386), 信区: FreeBSD
标  题: Configuring a VPN on FreeBSD[fwd]
发信站: BBS 水木清华站 (Fri Jul 20 17:31:00 2001)


 Configuring a VPN on FreeBSD using pipsecd

I've had to setup two secure VPN's between FreeBSD boxes now. The
first time I didn't document my steps -- figuring I'd remember :) --
which I didn't. I just finished setting up the second one and as it
happened I also noticed several posts to c.u.b.f.m asking about
setting up secure VPN's using FreeBSD so I thought I'd write up what I
did. So, here it is:

A VPN (virtual private network) allows you to treat two physically
separate networks as though they were on the same network. At least
that's how I understand it. What's cool about this is that it allows
my home network and my office network to appear to be one contiguous
network allowing me to work from one or the other without a lot of
differences.

I'm going to use the following fictitious networks to illustrate my
steps. Below we have two separate networks whose gateways (or routers,
or firewall/natd boxes ,etc.) are gw1 and gw2. Our goal is to make it
appear to the machines on either LAN that it is one seamless network.
Additionally we want any data that is transferred between the two
networks to be secure (encrypted). We do that by setting up a secure
tunnel.

(Note: In my case, gw1 is 3.4 and gw2 is 4.0. I believe there are
other ways to do this using an all 4.0 solution, but that doesn' work
for me)
        ___________                                     ___________
        |         |                                     |         |
10.0.0.1-   gw1   -111.111.111.111 <---> 222.222.222.222-   gw2   -10.1.0.1
  (LAN) |         |   (Internet)           (Internet)   |         |  (LAN)
        |_________|                                     |_________|
             |                                               |
          10.2.0.1 <------------ encrypted -------------> 10.2.0.2
          (tunnel)                                        (tunnel)

Steps:
Make sure that you have at least one tunnel device compiled into the
kernel on both gw1 and gw2. In particular you want to make sure your
kernel config has the following:
pseudo-device tun 1
If you're going to have multiple vpns (perhaps the office server will
provide vpns for multiple employee's home networks) then you should
increase 1 to something larger. Build the new kernel, install it, and
make the devices.

Install the pipsecd port on both machines. FreeBSD-3.4 will also install
 OpenSSL, 4.0 won't since it's already there. Nothing special needs to
be done besides a "make install".

On gw1 create /usr/local/etc/rc.d/pipsecd.sh with the following:
#!/bin/sh

/usr/local/sbin/pipsecd &
#
# For some reason 4.0 complains if we access the tun device
# to soon after calling pipsecd.  Sleeping for a bit fixes that.
#
sleep 3
/sbin/ifconfig tun0 10.2.0.1 10.2.0.2 netmask 255.255.255.0
/sbin/route add -net 10.1.0.0 -netmask 255.255.255.0 10.2.0.2


On gw2 create /usr/local/etc/rc.d/pipsecd.sh with the following:
#!/bin/sh

/usr/local/sbin/pipsecd &
#
# For some reason 4.0 complains if we access the tun device
# to soon after calling pipsecd.  Sleeping for a bit fixes that.
#
sleep 3
/sbin/ifconfig tun0 10.2.0.2 10.2.0.1 netmask 255.255.255.0
/sbin/route add -net 10.0.0.0 -netmask 255.255.255.0 10.2.0.1


On gw1 create /usr/local/etc/ipsec/pipsecd.conf with the following.
'CCCCC', 'DDDDD', 'AAAAA', 'BBBBB' can be changed to any string of
characters consisting of valid hex (ie. 0123456789ABCDEF) as long as you
 change them in both files.
sa ipesp spi=1000 auth=hmac-md5-96 akey=CCCCC enc=blowfish_cbc
ekey=AAAAA dest=222.222.222.222
sa ipesp spi=1000 auth=hmac-md5-96 akey=DDDDD enc=blowfish_cbc
ekey=BBBBB
if /dev/tun0 local_spi=1000 remote_spi=1000


On gw2 create /usr/local/etc/ipsec/pipsecd.conf with the following:
sa ipesp spi=1000 auth=hmac-md5-96 akey=CCCCC enc=blowfish_cbc
ekey=AAAAA
sa ipesp spi=1000 auth=hmac-md5-96 akey=DDDDD enc=blowfish_cbc
ekey=BBBBB dest=111.111.111.111
if /dev/tun0 local_spi=1000 remote_spi=1000


That's it. Now, on both machines, start pipsecd by typing (as root):
sh /usr/local/etc/rc.d/pipsecd.sh
At this point machines on either LAN should be able to connect to
machines on the other LAN -- that is, host 10.0.0.2 should be able to
ping 10.1.0.2 provided that they are both on.

For some reason the gateways themselves will not be able to talk to each
 other. When I setup my first VPN they could, but I must have changed
something by accident and now they can't. But it's not that big of a
deal because you shouldn't be connecting from/to your gateways very much
 anyway.


Notes:
If there are firewalls involved you will need to add some rules. The
following example is for IPFW running on gw1, whose external interface
is 'ed0':
add 8000 allow 50 from 222.222.222.222 to 111.111.111.111 in recv ed0
add 8000 allow ip from any to any via tun0

My specific hardware:
Office - FreeBSD 3.4, P120, 64RAM, 512K DSL connection
Home 1 - FreeBSD 3.4, P133, 32RAM, 512K DSL connection
Home 2 - FreeBSD 4.0, P120, 64RAM, 512K DSL connection
I max out the 512K DSL connection easily transferring b/n these
servers (encryption and all). "Home 1" also runs Apache, Samba,
netatalk, mysql, DNS, SMTP, POP, firewall, natd, and dhcp without
problems.

In other words, you *don't* need beefy hardware.



--

        大家都认为 386 已经是一个很古老的东西了,
                    我也承认这个观点,
    但是我们也必须承认,386 确实是一个划时代的产品!!!
他给我们带来了许多新鲜得特性。直到今天,我们仍然从中得到好处。


※ 来源:·BBS 水木清华站 smth.org·[FROM: 166.111.120.103]
--
※ 转载:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.146]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店