构建一个简单的VPN NAT环境(ipfw,natd,mpd)
目的:架设一个VPN服务器,通过VPN连接到该服务器,然后连接其他公网地址。
环境:FreeBSD 6.1
使用程序:ipfw, natd, mpd.
准备:
内核配置ipfw和divert的支持:
options IPFIREWALL
options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPDIVERT
重新编译内核后重启。不编译内核加载模块应该也行。
安装mpd:
/usr/ports/net/mpd 或 /usr/ports/net/mpd4
配置mpd:
在/usr/local/etc/mpd (mpd4为 /usr/local/etc/mpd4)
mpd.conf:
------------------------------------------------
default:
load vpn1
load vpn2
load vpn3
load vpn4
load vpn5
vpn1:
new -i ng0 vpn1 vpn1
set ipcp ranges 10.1.1.1/32 10.1.1.11/32
load vpn
vpn2:
new -i ng1 vpn2 vpn2
set ipcp ranges 10.1.1.1/32 10.1.1.12/32
load vpn
vpn3:
new -i ng2 vpn3 vpn3
set ipcp ranges 10.1.1.1/32 10.1.1.13/32
load vpn
vpn4:
new -i ng3 vpn4 vpn4
set ipcp ranges 10.1.1.1/32 10.1.1.14/32
load vpn
vpn5:
new -i ng4 vpn5 vpn5
set ipcp ranges 10.1.1.1/32 10.1.1.15/32
load vpn
vpn:
set iface disable on-demand
set iface enable proxy-arp
set iface idle 0
set iface enable tcpmssfix
set bundle enable multilink
set bundle enable compression
set bundle yes crypt-reqd
set link yes acfcomp protocomp
set link no pap chap
set link enable chap-msv2
set link keep-alive 10 60
set link mtu 1460
set ipcp yes vjcomp
set ipcp dns 65.23.128.2 65.23.128.3
set ccp yes mppc
set ccp yes mpp-e128
set ccp yes mpp-stateless
------------------------------------------------
mpd.links
------------------------------------------------
vpn1:
set link type pptp
set pptp enable incoming
set pptp disable originate
set pptp disable windowing
vpn2:
set link type pptp
set pptp enable incoming
set pptp disable originate
set pptp disable windowing
vpn3:
set link type pptp
set pptp enable incoming
set pptp disable originate
set pptp disable windowing
vpn4:
set link type pptp
set pptp enable incoming
set pptp disable originate
set pptp disable windowing
vpn5:
set link type pptp
set pptp enable incoming
set pptp disable originate
set pptp disable windowing
------------------------------------------------
mpd.secret
------------------------------------------------
vpn "vpn1234567"
------------------------------------------------
启动mpd: /usr/local/etc/mpd.sh start(根据要求需要设置/etc/rc.conf mpd_enable="yes", mpd4不需要)
设置natd,ipfw:
设置/etc/rc.conf
gateway_enable="yes"
natd_enable="yes"
natd_interface="rl0" #该设置为公网ip所在网卡,下同
firewall_enable="yes"
firewall_script="/root/ipfw.rules"
启动natd和使gateway_enable生效:
/etc/rc.d/natd start
sysctl net.inet.ip.forwarding=1
设置ipfw
编辑/root/ipfw.rules
#!/bin/sh
IPFW="/sbin/ipfw -q"
$IPFW -f flush
$IPFW add 100 divert natd all from any to any via rl0
$IPFW add 65535 allow ip from any to any
保存后设置ipfw.rules为可执行chmod +x /root/ipfw.rules
运行/root/ipfw.rules, 然后使用ipfw show应可显示规则已经加载
上面已经全部设置完毕,可以连接vpn了。
其实用pf做nat的话会更好