ubuntu创建vpnserver

来源:互联网 发布:js 窗口打开 运行js 编辑:程序博客网 时间:2024/06/14 09:34
关于端口说明:

ssh和pptpd都需要22端口.


我们知道,VPN有很多种,比如Windows Server系列自己就带了VPN服务器,安装配置都非常简单,而今天我要在日志中介绍部署的,是Linux下的VPN-Server,基于PPTP协议。Ubuntu系统是基于Debian构造的一版发行版,交流社区非常活跃,而且因为基于Debian,他自己带的包管理器能很好的处理依赖关系,方便我们安装软件。

安装pptp服务
sudo apt-get install pptpd
修改pptp的配置文件

这里需要修改pptp的三个配置文件:
sudo gedit /etc/pptpd.conf
找到localip和remoteip,如图,localip是linux主机的ip地址,remoteip是地址池,也就是远程拨进来的计算机所分配到的ip地址




localip 192.168.105.253

remoteip 192.168.1.200-238,192.168.1.245


 我是这样配置的,你可以根据自己的需要灵活配置。
修改/etc/ppp/pptpd-options

sudo gedit /etc/ppp/pptpd-options
找到ms-dns,如图,配置dns服务器,我这里用的是google的dns,你可以添加两个,另起一行再写一个即可

ms-dns 8.8.8.8

ms-dns 8.8.4.4



修改/etc/ppp/chap-secrets,这个文件是用来添加vpn用户的,
sudo gedit /etc/ppp/chap-secrets

demo:

# Secrets for authentication using CHAP

# client    server    secret            IP addresses

wangchen    *    1234            *




按照,用户名(tab)主机名(tab)密码(tab)分配到的ip地址 这样的格式来填写,其中主机名可以用“*”代替,如果不强制指定该用户分配到哪一个ip地址,可以将最后一项也改为“*”

如果发现这样无法访问外网了,需要开启ipv4 forward,如下:
修改/etc/sysctl.conf,去掉“net.ipv4.ip_forward=1”前的注释号,之后“sudo sysctl -p”应用配置
重启pptp服务

sudo service pptpd restart

/etc/init.d/pptpd restart


有些时候,经过这样设置,客户端机器就可以上网了(我在虚拟机上这样操作后就可以了)。但我在实验室的服务器上这样操作后仍然无法访问网络,这样我们就需要建立一个 NAT。这里我们使用强大的 iptables 来建立 NAT。首先,先安装 iptables:
sudo apt-get intall iptables
装好后,我们向 nat 表中加入一条规则:

192.168.1.0/24是允许上网的ip段,

eth0改为你的网卡名,比如:enp5s0

sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o enp5s0 -j MASQUERADE

但是,只是这样,iptables 的规则会在下次重启时被清除,所以我们还需要把它保存下来,方法是使用 iptables-save 命令:
sudo passwd:改root密码

su root

iptables-save > /etc/iptables-rules

su lbg

然后修改 /etc/network/interfaces 文件,找到 eth0(网卡名字) 那一节,在对 eth0 的设置最末尾加上下面这句:
pre-up iptables-restore < /etc/iptables-rules
这样当网卡 eth0 被加载的时候就会自动载入我们预先用 iptables-save 保存下的配置。
到此,一个 VPN Server/Gateway 基本就算架设完毕。



当然,也许你按照我的方法做了,还是无法成功,那么下面总结一些我碰到的问题和解决方案:
无法建立 VPN 连接
安装好 pptpd 并设置后,客户端还是无法建立到服务器的连接。造成的原因可能有以下几种:
  1. 服务器端的防火墙设置:PPTP 服务需要使用 1723(tcp) 端口和 gre 协议,因此请确保您的防火墙设置允许这两者通行。
  2. 如果服务器在路由器后面,请确保路由器上做好相应的设置和端口转发。
  3. 如果服务器在路由器后面,那么请确保你的服务器支持 VPN Passthrough。
  4. 如果客户端在路由器后面,那么客户端所使用的路由器也必须支持 VPN Passthrough。其实市面上稍微好点的路由器都是支持 VPN Passthrough 的,当然也不排除那些最最最便宜的便宜货确实不支持。当然,如果你的路由器可以刷 DD-Wrt 的话就刷上吧,DD-Wrt 是支持的。
能建立链接,但“几乎”无法访问互联网
 这里我使用“几乎”这个词,是因为并不是完全不能访问互联网。症状为,打开 Google 搜索没问题,但其它网站均无法打开;SSH 可用,但 scp 不行;ftp 能握手,但传不了文件。我就遇到了这种情况,仔细 Google 后发现原来是 MTU 的问题,用 ping 探测了一下果然是包过大了。知道问题就好办了,我们可以通过 iptables 来修正这一问题。具体原理就不讲了,需要的自己 Google。这里只说解决方案,在 filter 表中添加下面的规则:
 sudo iptables -A FORWARD -s 10.100.0.0/24 -p tcp -m tcp --tcp-flags SYN,RST SYN
-j TCPMSS --set-mss 1200
 上面规则中的 1200 可以根据你的实际情况修改,为了保证最好的网络性能,这个值应该不断修改,直至能保证网络正常使用情况下的最大值。
好了,至此,一台单网卡 pptp-server 就算完成了。


有时客户端还是不能上网,客户端需要添加8.8.8.8服务器

gedit /etc/resolv.conf

nameserver 8.8.8.8

0 0