跳至主要内容

FreeBSD7.0 建立PPTP的VPN Via MPD5

这几天,想把自己的服务器做成一个VPN,毕竟124.243的地址是很快的。但是以前从没有接触过VPN这一块,于是查了点资料,最后决定使用mpd5来建立VPN

  1. 进ports/net/mpd5下安装
  2. cd /usr/ports/net/mpd5
  3. make install clean ; rehash
  4. cp /usr/local/etc/mpd5/mpd.conf.sample /usr/local/etc/mpd5/mpd.conf
  5. vi  /usr/local/etc/mpd5/mpd.conf
解释一下:

ota# cat /usr/local/etc/mpd5/mpd.conf
startup:
        # configure mpd users 这里设置你的mpd能否用telnet , WEB来访问
       #下面是设置你登录用的用户名和密码
 set user admin  admin
        # configure the console
        set console self 0.0.0.0 5005
        set console open
        # configure the web server这里设置WEB登录的端口 0.0.0.0是使用你host上所有
#有效的IP地址。
        set web self 0.0.0.0 5006
        set web open

#
# Default configuration is "dialup"
#default字段是控制mpd启动的时候默认启动哪个配置字段,这里启动#PPTP_SERVER
default:
#       load dialup
        load pptp_server

pptp_server:
#其实下面的这段英文已经很 好的解释了mpd的工作原理。
# Mpd as a PPTP server compatible with Microsoft Dial-Up Networking clients.
#假设你办公私网IP段为192.168.1.0/24,你的mpd服务器的IP为192.168.1.1 ,并且
#外网卡WANIP为1.2.3.4。
# Suppose you have a private Office LAN numbered 192.168.1.0/24 and the
# machine running mpd is at 192.168.1.1, and also has an externally visible
# IP address of 1.2.3.4.
#现在我们希望客户机能使用PPTP从internet连接1.2.3.4.
# We want to allow a client to connect to 1.2.3.4 from out on the Internet
# via PPTP. 
#现在我们将为远程客户机分配IP为192.168.1.50和代理ARP,所以VPN连接
#就会把本地的192.168.1.1做为网关,而192.168.1.50就是远程客户机。
#
# We will assign that client the address 192.168.1.50 and proxy-ARP
# for that address, so the virtual PPP link will be numbered 192.168.1.1 local
# and 192.168.1.50 remote. 
#
#因此从客户端来看,就好像他是在192.168.1.0/24 这个网络里一样,尽管
#实际上它可能是在很远的Internet
# From the client machine's perspective, it will
# appear as if it is actually on the 192.168.1.0/24 network, even though in
# reality it is somewhere far away out on the Internet.
#在这里,我们设置DNS服务器为192。168.1.3(自己设置哦。)
# Our DNS server is at 192.168.1.3 and our NBNS (WINS server) is at 192.168.1.4.
# If you don't have an NBNS server, leave that line out.
#下面是定义一个动态的IP地址池(配置过PPPOE或者是RedBack的人应该知道)
#IP地址池就是用户拨号后就在这个池中选一个IP,按顺序分配的
#下面是我定义的temp地址池
# Define dynamic IP address pool.
        set ippool add temp 192.168.1.2 192.168.1.10
#下面是创建了一个模板B,也就是把相同的配置归结到一个起的一个通用副本
# Create clonable bundle template named B
        create bundle template B
        set iface enable proxy-arp
        set iface idle 1800
        set iface enable tcpmssfix
        set ipcp yes vjcomp
#下面是设置网关为192.168.1.1 ,并且做为IP地址池temp的网关,DNS211.161.192.1
# Specify IP address pool for dynamic assigment.
        set ipcp ranges 192.168.1.1/32 ippool temp
        set ipcp dns 211.161.192.1
# The five lines below enable Microsoft Point-to-Point encryption
# (MPPE) using the ng_mppc(8) netgraph node type.
        set bundle enable compression
        set ccp yes mppc
        set mppc yes e40
        set mppc yes e128
        set mppc yes stateless

# Create clonable link template named L
        create link template L pptp
# Set bundle template to use
        set link action bundle B
# Multilink adds some overhead, but gives full 1500 MTU.
        set link enable multilink
        set link yes acfcomp protocomp
        set link no pap chap
        set link enable chap
# We can use use RADIUS authentication/accounting by including
# another config section with label 'radius'.
#       load radius
        set link keep-alive 10 60
# We reducing link mtu to avoid GRE packet fragmentation.
        set link mtu 1460
# Configure PPTP
        set pptp self 124.243.215.245
# Allow to accept calls
        set link enable incoming

#下面的是我以后扩展用的,没的删除,是用来跟后台radius挂勾的但是实际上,
#不需要radius支持,上面的配置已经可以使用VPN了,
#只是VPN帐号要用mpd.secret来实现
radius:
# You can use radius.conf(5), its useful, because you can share the
# same config with userland-ppp and other apps.
        set radius config /etc/radius.conf
# or specify the server directly here
        set radius server localhost testing123 1812 1813
        set radius retries 3
        set radius timeout 3
# send the given IP in the RAD_NAS_IP_ADDRESS attribute to the server.
        set radius me 1.1.1.1
# send accounting updates every 5 minutes
        set auth acct-update 300
# enable RADIUS, and fallback to mpd.secret, if RADIUS auth failed
        set auth enable radius-auth
# enable RADIUS accounting
        set auth enable radius-acct
# protect our requests with the message-authenticator
        set radius enable message-authentic
保存mpd.conf
然后我们来创建vpn帐号:
6.cp /usr/local/etc/mpd5/mpd.secret.sample /usr/local/etc/mpd5/mpd.secret 
7.vi /usr/local/etc/mpdt/mpd.secret
MyLogin         MyPassword
PeerLogin       PeerPassword


bao3            "bao3"
OK,帐号有了,bao3.
但是有个问题:我们设置的网关是192.168.1.1,而我们服务器上根本不存在!!所以现在可以拨号VPN,但仍然不能上网。这需要我们来设置一下,另一个问题,即使我们有了192.168.1.1这个IP,那么通过这个IP的数据包怎么才能转发到1.2.3.4这个服务器IP上呢?这就要开NAT功能,我们一起把这些设置做了吧。

8 vi /etc/rc.conf
ifconfig_fxp0_alias0="inet 192.168.1.1  netmask 255.255.255.0"
mpd_enable="YES"
ipnat_enable="YES"
ipnat_rules="/etc/ipnat.rules"
gateway_enable="YES"

OK,设置好了rc.conf,我们还需要设置一下ipnat.rules,这转发规则

ota# cat /etc/ipnat.rules
map fxp0 192.168.1.0/24 -> 1.2.3.4/32

好了,经过以上的设置。我们已经可以重新启用mpd5来使用PPTP VPN了。至于windows里如何设置,不用我说了。

#问题:我看到网上说,设置mpd5要编译内核,这是真的吗?
#答:别信那些了,那是以前的mpd5的配置,国人只会复制粘贴,根本不动脑思考的。不用编译一样用的。
#问题:能单独设定某个帐号使用的IP吗?
#答:当然可以,还是通过mpd.secret来实现。
#问题:我的服务器配置了两个wAN的IP,能指定哪个用户使用指定的WAN出口吗?
#答:当然了,创建IP地址池就可以实现了。。。呵呵。

好了不说了,大家去自己摸索吧。



看到评论里有人指正了一下,大家需要把 net.inet.ip.forwarding=1 打开,只有这样,内核才能允许IP转发,谢谢1楼的小波同学。

评论

  1. 我按照你的方法做的,转发不出去。结果是因为 net.inet.ip.forwarding 的问题,改成 1就好了
    不知道楼主有没有遇到这个问题

    回复删除
  2. 这个问题,是我的失误,因为之前我的系统已经调整过了这个值,所以我在配置mpd5的时候,没有再调整。
    这个选项必须要打开的。

    回复删除

发表评论

读过之后是不是文思泉涌了?快快让大家拜读一下你的高见吧~~~

此博客中的热门博文

使用StrongSwan搭建 IKEv1 IKEv2 VPN服务器

#2016-01-04 决定将本文作废,因我要另再写新版本的配置。这篇作于 2013年,而strongswan已经更新很多版本。 #本文需要有独立的VPS,如果你需要一台速度快,每月30元的左右的VPS,可以使用我的邀请注册 http://www.vultr.com/?ref=6813064 并且在注册时使用 SSDVPS 可以送 $20(或者 $10 不等)。一定要选日本线路,这个到国内延迟约40ms ~ 100ms ,一般是 80ms 左右,非常快非常稳定,一个月32元,可以和几个人合租了。 #LOG:2014-04-30 对ipsec.conf进行修改,增加了android手机的兼容,现在可以支持完整支持android 自带的VPN设置啦~~~~ #LOG:2013-0609 对ipsec.conf进行修改,加入清楚DPD代码,防止IP 地址池不正确占用 #LOG: 2013-0519 删除ipsec.conf 中多余的conn iOS一节,这本是我一年前调试用的,时间不起作用; 删除了 %default中的 rightsubnet ,如果不删除,在定义了多段IP路由的情况下会导致账号无法上网(只有一段IP没这个bug),感谢  JackWindows  ‏ @ JackWindows #LOG 2013-05-12 修正bug,原配置文件会导致一个ID不可以同时多次登陆。得蒙  @ KhaosT   指点,对  strongswan.conf 加入duplicheck.enable = no ,对 ipsec.conf 加如 uniqueids=never #完成度100% 在我们生活的周围,通常要用到很多种VPN: PPTP, L2TP/IPSec, Cisco IPSec, IKEv2, 这些不同类型的VPN覆盖了目前我们常见的所有手机或者电脑平台,比如 iOS, Blackberry OS, BB10, Android, WebOS, Windows XP, Windows Vista/7/8, Unix/Unix-like。 (*如果你正在找blackberry 翻墙方法、ios ipsec vpn、windows IKEv2 VPN、Blackberry BB10 / Z10 VPN、android VPN,建

简易 APN Proxy (APN代理)的搭建

2012年2月1日 ,新增加了一种方案,请看 《 搭建增强型代理服务器(APN Proxy) 》 2012-01-03 更新 3proxy 及 监控进程脚本,分别见 B 3) 和 曾经在twitter被封锁的时候,我在长城宽带干过一件事,那就是将twitter的请求和通讯使用SSH,让全网用户可以无阻访问,不过也因此付出了代价,略不去说了。 后来得厨神 @paveo 的创意,何不将其用在手机等移动设备上?厨神的APN现在已经很成熟并在免费有限量专供中。我今天这里写得,是如何搭建自己的APN Proxy(APN 代理),但在阅读下面内容之前,需要一个刚性要求:一台在国内的Unix-Like的主机(可以是Linux/FreeBSD/Mac Osx Server/Solaris等等)并且是公网IP地址以及在国外的VPS主机(Unix类)。这个要求可以看出成本比较高,所以我看到淘宝上已经有人开始出售APN代理了,这个可以理解。 第一部分 原理 原理图1 如上图所示,我们要实现的功能原理是,将上网请求先发送到“国内VPS”,再由“国内VPS”通过SSH隧道转送到国外,最终实现无阻上网。点击查看大图可以看出,主要配置是在“国内VPS”上,包括配置SSH -D、Squid、Privoxy或者Polipo(socks代理程序你可以选自己喜欢的)。 第二 配置 1 国外VPS 国外VPS上,你需要有一个SSH帐户,并且请注意,使用密钥方式登录你的SSH而非密码,之所以如此,是为了下一步建立长久的SSH以及断线自动重连做准备,这个很重要。关于“SSH 免密码 密钥 登录”请使用google看一下。 这里有一个小插曲,部分centos 上如果默认的话,SSH帐户会报错,大约 是adminitstatly close之类,这有可能是 openfile数目问题,可以轻松解决。我非Linux爱好者,所以是临时google,并没有记录下来,你只要记得如果遇到同样问题,5分钟之内就可以google解决。 2 国内VPS 这一节将会是我们的主战场,基本上,我将会按下面的逻辑图来进行配置,这其中会涉及很多文件的配置,需要你注意哦,最后部分我会提供部分配置文档下载,由于我使用的是FreeBSD,因此会有少量差

OCSERV 0.8.5 使用

*注1:本文不包含ocserv的编译、安装,请自行研习 *注2:本文将包含ocserv的证书认证配置,不包含pam (radius)认证 *注3:本文将包含win,mac 端的使用,移动端相对简单,不做介绍 ocserv是OpenConnect SERVer的缩写,基本上就是cisco anyyconnect的开源兼容服务器软件,好处就是这个软件使用的是SSL VPN方式,通常会用DTLS这一层,支持服务器端推送32条路由,实现国内国外按需区分路由;同时各种客户端会长连接方式,一直后台待命,省时省电。我就不废话了。 我的配置是采用了全证书的方式进行,因此不需要用户名密码,如果您要对客户端进行限制,计时方面可以采用证书有效时间;流量限制方面可以使用iptables针对IP进行限制;同时在线人数上如果是多台服务器的话,相互间无法限制(cookie/session分布于不同服务器),如果仅一台服务器话就可以在配置文件搞定。我的完全配置如下,如果你要复制配置文件可以到 这里 : #第一行用以指定认证方式,我是证书 auth = "certificate" #Added @05-10-2014 #加入这个后就可以使用occtl了 #occtl reload && occtl stop now use-occtl = true occtl-socket-file = /var/run/occtl.socket # seccomp default : true #关闭这个可以提高性能,牺牲一丁点安全,更可以避免无法启动的情况(遇到过的都知道那痛苦) use-seccomp = false # listen-host = 0.0.0.0 #最大客户端数量,根据你的服务器IP地址分配多少以及性能设置,自用的话不必很大 max-clients = 36 #这个看英文就知道意思了,你可以加以限制 max-same-clients = 4 tcp-port = 443 udp-port = 443 keepalive = 32400 dpd = 60 mobile-dpd = 1800 #故意为空 mobile-idle-timeout = deny-roaming = false