pptpd - 搭建基于Linux的VPN服务器

通过pptpd搭建基于Linux的VPN服务器。2019.9.28修订1。2019.10.17修订2。

1 pptpd基本搭建

1.1 安装

  • sudo apt-get install pptpd

1.2 配置文件

  • sudo vim /etc/pptpd.conf

    • 配置 localip 和 remoteip 选项;
    • pptpd默认支持最多100个连接,建议remoteip范围≤100;
  • sudo vim /etc/ppp/pptpd-options

    • 配置该VPN使用的DNS

    • 设置ms-dns项

      • ```
        ms-dns 119.29.29.29
        ms-dns 114.114.114.114
        1
        2
        3
        4
        5
        6
        7
        8

        - 有关加密设置的选项也在这个配置文件中

        - **`sudo vim /etc/ppp/chap-secrets`**

        - 配置VPN账户、密码、协议、以及可指定分配IP

        -

        Secrets for authentication using CHAP

        client server secret IP addresses

        user1 pptpd 123456 *
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        24
        25
        26
        27
        28
        29
        30
        31
        32
        33
        34
        35
        36
        37
        38
        39
        40
        41
        42
        43
        44
        45
        46
        47
        48
        49
        50
        51
        52
        53
        54
        55
        56
        57
        58
        59
        60
        61
        62
        63
        64
        65
        66
        67
        68
        69
        70
        71
        72
        73
        74
        75
        76
        77
        78
        79
        80
        81
        82
        83
        84
        85
        86
        87
        88
        89
        90
        91
        92
        93
        94
        95
        96
        97
        98
        99
        100
        101
        102
        103
        104
        105
        106
        107
        108
        109
        110
        111
        112
        113
        114
        115
        116

        - 注意:

        - 用户名及密码无需单/双引号;
        - 密码至少3位;
        - IP 填写 * 表示在remoteip范围内自由分配;

        ### 1.3 启动服务

        - **`sudo service pptpd start`**
        - 启动vsftpd 服务
        - **`sudo service pptpd status`**
        - 查看vsftpd 服务
        - **`sudo service pptpd restart`**
        - 重启vsftpd 服务(用于修改配置文件后)

        ### 1.4 VPN局域网建成

        - 完成到这一步时,应当是可以连接上服务器的(终端可以和服务器处于同一个局域网内),但不具备通过VPN服务器连接外网的能力。
        - **注意:**经测试,苏大网环境下无法连接,应该是苏大网屏蔽了PPTP VPN。其它网络,可以连接,且PPTP VPN认证速度很快,几乎瞬间连上。



        ------



        ## 2 iptables NAT实现外网访问

        ### 2.1 开启Linux的IPv4报文转发

        - Linux出于安全性考虑,默认关闭IPv4报文转发。
        - **`sudo vim /etc/sysctl.conf`**
        - 设置 `net.ipv4.ip_forward=1`,开启Linux的IPv4报文转发
        - **`sudo sysctl -p `**
        - 重新加载 sysctl.conf 配置文件,使修改生效
        - **`sudo service pptpd restart`**
        - 重新启动pptpd服务,使修改生效。

        ### 2.2 配置iptables

        > iptables/ip6tables — administration tool for IPv4/IPv6 packet filtering and NAT
        >
        >
        >
        > DESCRIPTION
        >
        >
        > Iptables and ip6tables are used to set up, maintain, and inspect the tables of IPv4 and IPv6 packet filter rules in the Linux kernel. Several different tables may be defined. Each table contains a number of built-in chains and may also contain user-defined chains.
        >



        - **`sudo apt-get install iptables`**
        - 若无iptables,则先安装;
        - **`sudo iptables -t nat -A POSTROUTING -s 192.168.0.1/24 -o eth0 -j MASQUERADE`**
        - 开启NAT转发
        - IP地址是之前配置好的 localip
        - eth0是能访问外网的网卡,根据具体服务器网络环境而定,可通过**`ifconfig`**查看
        - 腾讯云eth0既是内网网卡也是外网网卡,其内外网访问转发由腾讯云的网关处理。
        - `-j ` 表示jump target,即如果遇到匹配上的网络数据包,因如何处理
        - 或通过`sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source <server外网IP>`
        - **`sudo iptables-save -c > /etc/ufw/iptables.save`**
        - 保存设置
        - **`sudo iptables-restore -c /etc/ufw/iptables.save `**
        - 使用修改过的配置重置iptables,可实现开机自动加载自定义配置
        - 可用于修复/复原iptables,如输入的是一个文件,则依据该文件中的配置信息来配置iptables
        - `-c` 表示counters,会重置报文即字节数计数器(restore the values of all packet and byte counters)
        - **`sudo service pptpd restart`**
        - 可能需要重启下pptpd服务使修改生效
        - 如果错误输入了iptables规则,可以通过:
        - `iptables -nvL --line-number` 检查规则所处的表及表内序号;
        - `iptables -D <TABLE> <NUM>` 删除(Delete)指定表的指定序号的规则。

        ### 2.3 iptables NAT转发配置完成

        - 完成到这一步,连接到VPN服务器的终端应该是可以访问外网的。



        ------



        ## 3 常见问题

        ### 3.1 无法连接到VPN

        - **注意:**经测试,苏大网环境下无法连接,应该是苏大网屏蔽了PPTP VPN。
        - 但其它网络,经测试可以连接,且PPTP VPN认证速度很快,几乎瞬间连上。

        ### 3.2 Windows防火墙拦截

        - 可搜索“pptp 619”,即可查找有关连接pptp时619错误的资料,通常在Windows防火墙中放通1723端口数据出站即可。

        ### 3.3 iptables FORWARD未开启

        检查iptables的FORWARD功能有没有开启。

        `sudo iptables -nvL`,如果FORWARD的功能是ACCEPT则正常,否则请执行:

        `sudo iptables -P FORWARD ACCEPT`

        ### 3.4 “一些网站能打开,一些网站无法打开”(MTU默认过小)

        我发现[百度](https://www.baidu.com)、[哔哩哔哩](https://www.bilibili.com)无法打开,而[必应](https://cn.bing.com)、[知乎](https://www.zhihu.com)却可以正常访问。经查,是默认MTU不足以应对如今部分网站的需求,MTU过小会导致高于MTU值的报文被丢弃。

        通过以下命令对iptables进行设置。

        > [Ubuntu配置 PPTP 服务器端](https://www.cnblogs.com/gaozhengwei/p/7101363.html)
        >
        > H. 设置MTU来确保过大的包不会被丢弃(这个可以不做)
        >
        > ```bash
        > sudo iptables -I FORWARD -s 192.168.0.0/24 -p tcp --syn -i ppp+ -j TCPMSS --set-mss 1300
        >

3.5 Windows10无法正常连接或登录

Windows10连接时,系统提示:“不能建立到远程计算机的连接。你可能需要更改此连接的网络设置。

而其它设备,如:Android设备,连接则完全正常。

使用Windows10的重置网络也无法解决问题。

【常见问题】不能建立到远程计算机的连接。你可能需要更改此连接的网络设置。

选择设备管理器

选择网络适配器

网络设配器中WAN开头的右键点击卸载设备

将所有的都写在掉

然后右键网络适配器点击扫描检测硬件改动

等WAN恢复回来

解决方法:

  1. 打开Windows的设备管理器;
  2. 找到“网络适配器”;
  3. 通过右键选择“卸载设备”,把以WAN Miniport开头的虚拟设备全部卸载;
  4. 选中并右键“网络适配”,点击“扫描检测硬件改动”;
  5. 等WAN Miniport系列恢复后即可正常连接。

4 参考链接

如何使用ubuntu搭建pptp vpn服务器 - 腾讯云论坛

PPTP Client Diagnosis HOWTO

英文,PPTP问题诊断大全

Ubuntu配置 PPTP 服务器端

H. 设置MTU来确保过大的包不会被丢弃(这个可以不做)

1
sudo iptables -I FORWARD -s 192.168.0.0/24 -p tcp --syn -i ppp+ -j TCPMSS --set-mss 1300`

Linux下安装配置pptpd搭建vpn服务器,组建局域网实现内网互连互通

5、检查iptables的FORWARD功能有没有开启

iptables -L -n,如果FORWARD的功能是ACCEPT则正常,否则请执行

iptables -P FORWARD ACCEPT

【常见问题】不能建立到远程计算机的连接。你可能需要更改此连接的网络设置。

选择设备管理器

选择网络适配器

网络设配器中WAN开头的右键点击卸载设备

将所有的都写在掉

然后右键网络适配器点击扫描检测硬件改动

等WAN恢复回来

支持我的写作!(Support my writing!)

欢迎关注我的其它发布渠道