Ubuntu Server 16.04 手动配置VPN全过程录
这几天搬办公室,搬完办公室之后有几台之前在实验室用的不连内网的电脑现在终于也可以连上内网了。但是还没有想去配置访问外网,一来去找网管开几台新电脑的权限太麻烦,二来这些电脑除了偶尔要下点资料外本来也没什么必要连外网。于是想到了给之前那台实验室用的服务器配置个VPN,这几台电脑偶尔需要的时候就通过VPN连接过去访问就能满足日常需要了。
安装VPN服务
Linux上面配置VPN的途径很多,简单起见我还是决定用pptpd
来进行配置。
安装pptpd
sudo apt install pptpd
设置VPN连接的虚拟IP
sudo vi /etc/pptpd.conf
这个配置文件下面有localip
和remoteip
两个主要选项,一个是VPN里面的本地IP和分配给客户端的IP。
localip 10.1.0.1
remoteip 10.1.0.2-10.1.0.10
配置DNS
sudo vi /etc/ppp/pptpd-options
给这个配置文件写上DNS服务器地址
ms-dns 114.114.114.114
ms-dns 114.114.115.115
顺便留意一下这个配置文件的第一行,默认是name pptpd
,即VPN服务的名称。
添加VPN连接用户
sudo vi /etc/ppp/chap-secrets
这里面主要分了4咧,分别是账号、服务名称、密码、客户端IP地址。账号和密码不用多说,服务器名称就是之前上一个配置中的名称,默认pptpd
,如果上一个配置选项修改了这个名称的话,这里也要修改成相对应的。IP地址就是允许使用这个账号登录的客户端地址,如果不需要限定就直接使用通配符*
就可以了。我的配置如下:
user pptpd "password" *
这几个步骤的完成后,通过命令sudo /etc/init.d/pptpd restart
重启一下pptpd服务,其他电脑就可以通过VPN连接到这台服务器了。
设置NAT转发
虽然配置完成可以通过VPN连接服务器了,但是似乎还是不能访问网络,接下来要继续配置NAT转发才可以。
开启IP转发
sudo vi /etc/sysctl.conf
在这个配置文件中搜索net.ipv4.ip_forward
这个选项,去掉前面的注释,整行变成net.ipv4.ip_forward=1
。随后重新加载配置sudo sysctl -p
使其生效。
添加NAT转发规则
在增加转发规则之前,首先用ifconfig
查看一下当前的联网网卡,一般是eth0
,不过我这里是enp4s0
,记住这个网卡。然后执行下面的命令增加转发规则
sudo iptables -t nat -A POSTROUTING -s 10.1.0.0/24 -o enp4s0 -j MASQUERADE
sudo iptables -A FORWARD -p tcp --syn -s 10.1.0.0/24 -j TCPMSS --set-mss 1300
创建好规则之后,客户端上面就可以通过VPN来上网了,不过下次服务器重启之后不会记住这个规则,所以需要继续配置。
保存转发规则
首先通过命令sudo iptables-save > /etc/iptables-rules
来把之前建立的转发规则保存到文件中。不过这时候发生了个小意外。
小插曲1:Permission denied
执行完命令返回错误提示-bash: /etc/iptables-rules: Permission denied
,我明明使用了sudo
,如果不行的话干脆用su
命令切换到真正的root
用户再来执行,不过又发生了另外一个小意外。
小插曲2:Authentication failure
尝试切换到root
用户的时候又提示su:Authentication failure
,后面才想起我一直都没有给root
用户设置过密码,用sudo passwd root
命令给root
用户设置好密码后面就都OK了。
在root
用户下保存转发规则到文件之后就可以退出root
用户了。然后再修改网卡的配置文件。
sudo vi /etc/network/interfaces
在这个配置文件的enp4s0
的这个小节下面加上一句pre-up iptables-restore < /etc/iptables-rules
,这样只要网卡被启动就能加载这些规则。
待解决的小问题
执行完上面的过程基本上整个架设VPN服务就架设好了,但是还是遇到一些小问题。就是重启服务器之后就不能启动了,查看状态提示是如下。
user@UBUNTU:~$ sudo /etc/init.d/pptpd status
[sudo] password for user:
● pptpd.service - PoPToP Point to Point Tunneling Server
Loaded: loaded (/lib/systemd/system/pptpd.service; disabled; vendor preset: enabled)
Active: inactive (dead)
必须手动执行sudo /etc/init.d/pptpd restart
之后才能正常启动pptpd
服务,此时的状态提示如下。
user@UBUNTU:~$ sudo /etc/init.d/pptpd status
● pptpd.service - PoPToP Point to Point Tunneling Server
Loaded: loaded (/lib/systemd/system/pptpd.service; disabled; vendor preset: enabled)
Active: active (running) since Sat 2017-02-18 10:53:18 CST; 3s ago
Main PID: 1521 (pptpd)
Tasks: 1
Memory: 148.0K
CPU: 2ms
CGroup: /system.slice/pptpd.service
└─1521 /usr/sbin/pptpd --fg
Feb 18 10:53:18 UBUNTUsystemd[1]: Started PoPToP Point to Point Tunnel...r.
Feb 18 10:53:18 UBUNTUpptpd[1521]: MGR: Maximum of 100 connections redu...n
Feb 18 10:53:18 UBUNTUpptpd[1521]: MGR: Manager process started
Feb 18 10:53:18 UBUNTUpptpd[1521]: MGR: Maximum of 99 connections available
Hint: Some lines were ellipsized, use -l to show in full.
这个还需要继续查资料看看怎么处理……