这几天搬办公室,搬完办公室之后有几台之前在实验室用的不连内网的电脑现在终于也可以连上内网了。但是还没有想去配置访问外网,一来去找网管开几台新电脑的权限太麻烦,二来这些电脑除了偶尔要下点资料外本来也没什么必要连外网。于是想到了给之前那台实验室用的服务器配置个VPN,这几台电脑偶尔需要的时候就通过VPN连接过去访问就能满足日常需要了。

安装VPN服务

  Linux上面配置VPN的途径很多,简单起见我还是决定用pptpd来进行配置。

安装pptpd

sudo apt install pptpd

设置VPN连接的虚拟IP

sudo vi /etc/pptpd.conf

  这个配置文件下面有localipremoteip两个主要选项,一个是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.

  这个还需要继续查资料看看怎么处理……