这几天,想把自己的服务器做成一个VPN,毕竟124.243的地址是很快的。但是以前从没有接触过VPN这一块,于是查了点资料,最后决定使用mpd5来建立VPN。
看到评论里有人指正了一下,大家需要把 net.inet.ip.forwarding=1 打开,只有这样,内核才能允许IP转发,谢谢1楼的小波同学。
- 进ports/net/mpd5下安装
- cd /usr/ports/net/mpd5
- make install clean ; rehash
- cp /usr/local/etc/mpd5/mpd.conf.sample /usr/local/etc/mpd5/mpd.conf
- vi /usr/local/etc/mpd5/mpd.conf
解释一下:
ota# cat /usr/local/etc/mpd5/mpd.confstartup:# configure mpd users 这里设置你的mpd能否用telnet , WEB来访问#下面是设置你登录用的用户名和密码set user admin admin# configure the consoleset console self 0.0.0.0 5005set console open# configure the web server这里设置WEB登录的端口 0.0.0.0是使用你host上所有#有效的IP地址。set web self 0.0.0.0 5006set web open## Default configuration is "dialup"#default字段是控制mpd启动的时候默认启动哪个配置字段,这里启动#PPTP_SERVERdefault:# load dialupload pptp_serverpptp_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 Bcreate bundle template Bset iface enable proxy-arpset iface idle 1800set iface enable tcpmssfixset 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 tempset 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 compressionset ccp yes mppcset mppc yes e40set mppc yes e128set mppc yes stateless# Create clonable link template named Lcreate link template L pptp# Set bundle template to useset link action bundle B# Multilink adds some overhead, but gives full 1500 MTU.set link enable multilinkset link yes acfcomp protocompset link no pap chapset link enable chap# We can use use RADIUS authentication/accounting by including# another config section with label 'radius'.# load radiusset link keep-alive 10 60# We reducing link mtu to avoid GRE packet fragmentation.set link mtu 1460# Configure PPTPset pptp self 124.243.215.245# Allow to accept callsset 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 hereset radius server localhost testing123 1812 1813set radius retries 3set 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 minutesset auth acct-update 300# enable RADIUS, and fallback to mpd.secret, if RADIUS auth failedset auth enable radius-auth# enable RADIUS accountingset auth enable radius-acct# protect our requests with the message-authenticatorset 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 MyPasswordPeerLogin PeerPasswordbao3 "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.rulesmap 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楼的小波同学。
我按照你的方法做的,转发不出去。结果是因为 net.inet.ip.forwarding 的问题,改成 1就好了
回复删除不知道楼主有没有遇到这个问题
这个问题,是我的失误,因为之前我的系统已经调整过了这个值,所以我在配置mpd5的时候,没有再调整。
回复删除这个选项必须要打开的。