最近在研究个项目,需要实现多台不同地方的内网机器组成局域网来进行维护,而且这些机子所在的地方都是没有权限进行端口映射的。一开始想到用Teamviewer,但是考虑到Teamviewer在Linux系统下并不稳定,而且开机启动也一直没有研究出来。所以最后考虑还是使用pptpd来搭建vpn服务。
实现效果如下图:
首先,我们要有一台公网的服务器,用来搭建vpn服务。下面我们开始安装相关的程序。本教程使用ubuntu 16.04作为公网服务器系统,其它Linux系统大同小异。
1、安装pptpd
apt install pptpd
2、设置后面连接此VPN服务器的客户端分配的内网IP范围
vi /etc/pptpd.conf
找到如下两行:
localip 192.168.0.1
remoteip 192.168.0.234-238,192.168.0.245
localip指的是VPN服务器的内网IP,这里我设置为192.168.5.1(尽量取个比较偏的IP段,这样才不会跟客户端本身内网的IP段重复,尽可能使用下列几个IP段:10.0.0.0-10.255.255.255,172.16.0.0-172.31.255.255,192.168.0.0-192.168.255.255)
remoteip是指分配给客户端的IP,IP的取值就在这个范围内.这里我设置为192.168.5.2-254
3、设置VPN账号密码
vi /etc/ppp/chap-secrets
按如下格式添加账号:
username pptpd "password" *
username为你的用户名,pptpd是固定字符串,password为你的密码,密码用引号包起来,*号表示允许在任意IP连接到此VPN服务
4、开启内核IP转发
vi /etc/sysctl.conf
取消掉net.ipv4.ip_forward=1 这一行的注释
然后执行sysctl -p 让上面的修改立即生效
5、重启pptpd服务
service pptpd restart
6、操作完上面几步,我们就已经完成了pptpd的简单安装和配置,目前我们已经实现了其它电脑可以连接vpn服务,并实现内网互相连通的功能。
温馨提示:如果连接vpn后无法互相连通,请在服务器上执行iptables -L -n或者iptables-save命令检查FORWARD转发功能有没有开启(ACCEPT),如果没有,则使用以下命令开启
iptables -P FORWARD ACCEPT
注意,该设置重启服务器后可能会失效,需要将该命令写进开机启动里面去,或者使用其它办法保存规则。
7、连接VPN服务并测试
在Windows系统下,找到【控制面板】->【网络和共享中心】->【设置新的连接或网络】
填写先前添加的账号密码应该就可以正常连接上VPN服务器了,然后可以查看到当前分配的内网IP地址。
VPN是连接上了,但是大家有没有发现自己的网络也断开了?这里就分两种情况来操作了:
1、连接VPN后,继续用本地的网络
2、连接VPN后,需要使用VPN服务器的IP上网,或者说要走VPN的流量
针对情况1的,解决方法非常简单,我们只要打开刚才创建的VPN连接,打开属性并按照下在的操作即可实现上网
针对情况2的,我们需要在服务器上进行一些设置:
1、设置pptpd的DNS
2、安装iptables并设置NAT转发
1、设置pptpd的DNS
vi /etc/ppp/pptpd-options
找到ms-dns,取消注释,并改成你喜欢的DNS,比如:8.8.8.8和8.8.4.4
2、安装iptables并设置NAT转发
安装iptables
apt-get install iptables
如果需要让客户机可以使用服务器的IP进行上网的话,还需要做以下步骤:
获取网卡名称,使用ifconfig,我这里是eth0,如下图
开启NAT转发
iptables -t nat -A POSTROUTING -s 192.168.5.0/24 -o eth0 -j MASQUERADE
192.168.5.0是你在上面设置的IP段,/24是指子网掩码,24 = 8 * 3(255的二进制是11111111),即255.255.255.0
如果不限制IP段的话,可以直接去掉-s参数以及后面的IP段192.168.5.0/24,那么所有连接vpn的客户机都可以通过服务器的ip进行上网
4、重启pptpd服务
service pptpd restart
再次连接VPN服务,会发现已经可以正常上网了,而且上ip138.com这些查ip网站,也会发现查出来的ip是VPN服务器的IP。
ok
mjj通道