BLOG
Enjoy when you can, and endure when you must.
JUN 30, 2016/平台与系统运维
再探 PPTP

细数我博客中关于 VPN 的文章,确实还真不少,PPTP 就占据了其中很大一部分。PPTP 对于服务端易部署,对于客户端简单易用,着实令人着迷。当然也因此存在很多的“不确定因素”。也许也算是鱼与熊掌不可兼得吧。不过至少在我目前的网络环境中,PPTP 还是很 OK 的。其实不是说一谈 VPN 就联想到“那用途”。比如我最近的需求其实很纯洁,利用 VPN 隧道打通远程局域网。要具体来说的话,就是希望能从远程访问访问一个内部的局域网。近几年互联网飞速发展,IPv4 的容量已远远满足不了需求。因此多数情况下,我们如今使用的宽带都其实是活跃在一个超大局域网中,然后又从几个屈指可数的公网 IP 访问互联网。这曾一度让很多人反感。时至今日,也许这也是没有办法的办法。反过来,某些时候,这种方式也其实还是有那么一点点好处的。但这导致一个比较麻烦的问题,就是要想从外部访问自己的网络,要如何是好呢?这时正当地利用 VPN 就可以相对简单的达到该目的。

最开始,我尝试使用 OpenVPN,其服务端的部署甚至比 PPTP 还要简单。但却在移动的宽带上栽了跟头。联想到之前尝试过 PPTP 的连接反倒没什么问题,看来还是回归老办法。

接下来在部署的时候,考虑到这仅仅是私人使用,于是准备替换默认的 1723 端口,可以一定程度上提高安全性和私密性。先从服务端下手,有个比较简单的办法就是修改 /etc/services 文件,它定义了标准网络服务所对应的端口,恰好 pptpd 也遵循该文件的定义。因此只需将其中 pptp 对应的端口改为自己所需的即可,如:

...
pptp             1723/tcp
pptp             1723/udp
...

接下来是客户端。而麻烦就麻烦在客户端。无论是 Windows 还是 Linux,修改 PPTP 的端口都不是“显而易见”的。Windows 一般说来是动注册表来达到目的。而 Linux 搜罗了半天,好像也没法直接下手。一开始我思考能否也通过 /etc/services,结果当然是并不奏效。于是又是各种尝试外加各种搜索,最后发现从源码入手可能才是比较简单的方式。在 Linux 下使用 PPTP 一般都是借助于 PPTP Client,可以从 http://pptpclient.sourceforge.net/ 下载其源码,然后修改 pptp_msg.h 中对 PPTP 端口的定义,如下:

...
#define PPTP_PORT  1723       /* PPTP TCP port number            */
#define PPTP_PROTO 47         /* PPTP IP protocol number         */
...

保存,再编译安装即大功告成。至此,问题解决。

 

COMMENTS
19/03From late

写的非常不错

LEAVE COMMNT