如何在我自己的Ubuntu服务器上设置PPTP VPN?

假设我有一个像Linode这样运行Ubuntu的虚拟专用服务器,我如何轻松设置PPTP VPN以便Ubuntu客户端可以连接到它?

默认情况下,Ubuntu提供连接到这些PPTP网络。 我想以这样的方式设置它,以便它很容易连接(即不在客户端上安装任何软件包)。

绝对最低服务器设置

以下是获得在Ubuntu下运行的基本PPTP VPN服务器所需的绝对最低指令。 然后,客户端将能够VPN到服务器并路由他们的互联网流量,以便它通过服务器到达互联网。 与往常一样,请参阅完整的文档以了解一切正在做什么。

首先,安装所需的软件:

sudo apt-get install pptpd 

其次,通过取消注释/etc/sysctl.conf中的相关行,在内核中为IPv4启用ip_forward

 sudo sed -i -r 's/^\s*#(net\.ipv4\.ip_forward=1.*)/\1/' /etc/sysctl.conf # Reload the config file to have the change take effect immediately. sudo -i sysctl -p 

第三,启用NAT(如果它尚未启用),以便私有VPN网络上的用户可以将其数据包路由到Internet:

 OUTIF=`/sbin/ip route show to exact 0/0 | sed -r 's/.*dev\s+(\S+).*/\1/'` sudo -i iptables --table nat --append POSTROUTING --out-interface $OUTIF --jump MASQUERADE # Enable NAT on boot from the rc.local script. CMD="iptables --table nat --append POSTROUTING --out-interface $OUTIF --jump MASQUERADE" sudo sed -i "\$i$CMD\n" /etc/rc.local 

注意:本指南假设您未在服务器上配置防火墙。 如果服务器上有防火墙,例如UFW ,请参阅相关文档 。

第四,对于每个VPN用户,在文件/ etc / ppp / chap-secrets中创建一个帐户。 将$USER替换$USER您要为该VPN用户使用的实际用户名。

 KEY=`head -c 20 /dev/urandom | sha1sum | nawk '{print $1}'` echo "$USER pptpd $KEY *" | sudo tee -a /etc/ppp/chap-secrets 

最后,你准备……

配置客户端

在Network Manager小程序中 ,选择VPN Connections配置VPN ,然后单击添加 。 在下一个屏幕上,为VPN类型选择PPTP ,然后单击“ 创建”

在此处输入图像描述

在此窗口中,输入服务器的主机名或IP以及添加到服务器上/ etc / ppp / chap-secrets文件的用户名和密钥。

现在单击高级

在此处输入图像描述

在此窗口中,启用“使用点对点加密(MPPE)”并选择128位安全性。 禁用MSCHAP身份validation(启用MSCHAPv2 )。

最后,单击“ 确定” ,然后单击“ 保存”以关闭上一个窗口。

您现在可以通过转到网络管理器小程序→ VPN连接并选择刚刚创建的连接来测试VPN连接。 确保收到消息说VPN连接成功,然后浏览到IP检查网站以validation您的IP现在显示为服务器的IP。

如果您收到一条消息,指出与服务器的VPN连接失败:首先validation您是否正确输入了客户端设置; 第二,检查客户端是否与服务器上的TCP端口1723建立了网络连接; 最后,检查服务器上的日志文件/ var / log / messages以获取更多线索。 如果您的VPN连接成功,但您随后无法从客户端浏览到任何网站,请在pptpd网站上查阅这个非常有用的诊断指南 。

笔记

如果您连接的本地网络使用的是192.168.0.0/24和192.168.1.0/24子网,则会遇到问题,因为这是PPTP服务器默认使用的问题。 您必须配置PPTP以在pptpd.conf中使用不同的子网。

您可能想要进行许多其他配置更改。 例如,仍将使用本地DNS服务器查询所有域名查找,而不是通过PPTP服务器。 花点时间阅读完整的文档 ,了解如何更改此设置以及许多其他设置。

我写的这个教程将指导您完成。 它应该可以帮助您避免使用VPS的人犯的常见错误。

首先登录您的VPS面板并启用TUN / TAPPPP 。 如果您没有此选项,请与您的ISP联系以便为您启用此选项。

在此处输入图像描述

首先安装此包:

 sudo apt-get install pptpd 

因为我们不希望我们的VPN公开,所以我们将创建用户。
我正在使用VI你可以使用NANO或任何你喜欢的文本编辑器

 vi /etc/ppp/chap-secrets 

格式是

 [username] [service] [password] [ip] 

 john pptpd johnspassword * 

*表示允许从所有IP地址访问,仅在您拥有静态IP时才指定IP。

编辑PPTPD设置

 vi /etc/pptpd.conf 

查找localip和remoteip设置。 删除两者的# (注释字符),以便实际识别这些设置。 将localip更改为您的服务器IP。 如果您不知道服务器IP,可以查看VPS控制面板。

remoteip基本上是IP范围,将分配客户端(连接到VPN的计算机)。 例如,如果您需要以下IP范围:192.168.120.231-235,您的VPN服务器将能够为客户端分配192.168.120.232,192.168.120.233,192.168.120.234和192.168.120.235。 这取决于您想要用于此领域的内容。

我个人选择这个设置:

 localip 10.0.0.1 remoteip 10.0.0.100-200 

所以我可以连接大约200个客户端。

将DNS服务器添加到/etc/ppp/pptpd-options

 ms-dns 8.8.8.8 ms-dns 8.8.4.4 

您可以将其添加到文件末尾或查找这些行,取消注释并将IP更改为所需的公共DNS。

设置转发

在PPTP服务器上启用IP转发非常重要。 这将允许您在使用PPTP设置的公共IP和专用IP之间转发数据包。 只需编辑/etc/sysctl.conf并添加以下行(如果它已经不存在):

 net.ipv4.ip_forward = 1 

要激活更改,请运行sysctl -p

为iptables创建NAT规则

这是一个重要的部分,如果你使用VPS你可能不会使用eth0而不是venet0,你应该通过运行ifconfig检查你有哪个接口

 iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE && iptables-save 

如果您还希望PPTP客户端相互通信,请添加以下iptables规则:

 iptables --table nat --append POSTROUTING --out-interface ppp0 -j MASQUERADE iptables -I INPUT -s 10.0.0.0/8 -i ppp0 -j ACCEPT iptables --append FORWARD --in-interface eth0 -j ACCEPT 

同样,如果您使用VPS,则需要使用venet0替换eth0。

我建议跑

 sudo iptables-save 

现在您的PPTP服务器也充当路由器。

您可以运行此命令,以便VPN服务在启动时启动

 systemctl enable pptpd 

我建议安装iptables-persistent,这样即使重启后规则仍然存在

 sudo apt-get install -y iptables-persistent 

请遵循以下教程: 使用Ubuntu的PPTP VPN服务器

  1. 在软件选择下,选择OpenSSH服务器 – 用于远程管理机器 – 以及实际pptpd软件包的手动软件包选择。 如果您想要更多服务,例如,如果您想将计算机也用作网络服务器,您当然可以选择其他软件。 出于安全原因,我通常建议人们如果在关键环境中设置,只能从每台机器的外部可访问服务运行一个,但实际上这取决于您。

  2. 在手动选择中导航到未安装的软件包> net ,您将在其中找到pptpd。 选择它并按两次“g”以安装包。

  3. 让安装完成并重启系统。

  4. SSH到您新设置的机器并运行sudo aptitude update && sudo aptitude safe-upgrade首先更新所有软件包。 必要时重新启动。

  5. 打开pptpd.conf文件: sudo nano /etc/pptpd.conf调整底部的IP设置。 在本地IP下,您在VPN服务器的本地网络中输入IP(如果您不知道它键入’sudo ifconfig’,它将显示您的网络接口和分配的IP)。 就此而言,我建议在/ etc / network / interfaces或路由器配置中设置静态IP。

  6. 如果需要,可以在/etc/ppp/pptpd-options更改主机名

  7. 指定要授予vpn访问权限的用户名和密码: sudo nano /etc/ppp/chap-secrets 。 如果您在步骤之前更改了主机名,请确保在server下输入相同的主机名

    例:

     # client server secret IP addresses eubolist pptpd myübersecretpassword * 

    与在pptp中一样,没有密钥文件安全性仅取决于密码。 这就是为什么你应该选择一个长的(例如32个字符)随机密码。 您可以在此处生成此类密码。

  8. 现在我们需要设置ip-masquerading: sudo nano /etc/rc.local

    在“exit 0”行上方添加以下行

     # PPTP IP forwarding iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 

    我建议您选择保护SSH服务器免受暴力攻击:

     #SSH Brute Force Protection iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl --name SSH -j 

    下降

    (也可插入’出口0’上方)

    您可能必须将“eth 0”更改为另一个界面,具体取决于配置为连接到计算机上的Internet的接口。

  9. 最后,在/etc/sysctl.conf取消注释这一行:

     net.ipv4.ip_forward=1 
  10. 重启

  11. 如果您的vpn服务器没有直接连接到Internet,您可能需要将端口1723 TCP和GRE转发到您的vpn服务器的LAN IP。 有关供应商的具体说明,请参阅路由器手册或portforward.com。 同样,您可能需要在/etc/network/interfaces分配静态IP。