修改pptp vpn的默认端口

1、服务器端使用pptpd,网上找到3种方法:添加iptables规则、修改/etc/services文件和修改pptpd源代码。

1-1、添加iptables规则

这个方法很简单,就是在数据包进入网关时就修改其源端口为vpn的默认端口1723,实现端口重定向:

iptables -t nat -A PREROUTING -p tcp --dport 31723 -j REDIRECT --to-ports 1723

这样做的缺点是,占用了两个端口,而且还需要其他iptables规则来防止外网直接访问1723端口才能达到隐藏的目的。

1-2、修改/etc/services文件

/etc/services/文件里定义了标准网络服务所对应的端口。虽然不是强制使用,但pptpd就是使用其中定义的端口来提供服务的。搜索pptp,可以找到:

...
hks-lm           1722/tcp
hks-lm           1722/udp
pptp             1723/tcp
pptp             1723/udp
csbphonemaster   1724/tcp
csbphonemaster   1724/udp
...

将pptp开头的两行后面的1723改成想使用的端口。如果pptpd服务已经启动了的话,就重新启动一下,就可以使用新端口了。如果对于不能重启pptpd服务的情况,这种方法就没有第一种方法好,但相对下面的方法也算很简捷了。

1-3、修改pptpd源代码

下载了pptpd的源代码,grep了一下,发现在pptpdefs.h文件里有如下定义:

...
/* PPTP ctrl message port */
#define PPTP_PORT			1723
...

尝试修改了,再编译安装后,运行发现不起作用,但是无论是原来的端口还是修改后的端口都没法使用。也不知道是哪里出错,暂时没找到原因。不过有了上两种方法,这个方法能否成功也无所谓了。

2、Linux客户端使用pptpclient,参考上面服务器的修改方法

2-1、添加iptables规则

这个方法不太适合这种情况,因为是要对发出去的包的端口号进行修改,则当包回来的时候也要将其端口改回来,其实就相当于建立了一个管道了,比较麻烦。而且要对包进行标记和跟踪,需要很多步骤。

2-2、修改/etc/services文件

这个方法对客户端无效,也许客户端根本就不会读取/etc/services

2-3、修改pptpclient源代码

从pptpclient官网下载了源代码,grep之后,找到pptp端口的定义是在pptp_msg.h文件中:

...
/* PPTP magic numbers: ----------------------------------------- */
#define PPTP_MAGIC 0x1A2B3C4D /* Magic cookie for PPTP datagrams */
#define PPTP_PORT  1723       /* PPTP TCP port number            */
#define PPTP_PROTO 47         /* PPTP IP protocol number         */
/* Control Connection Message Types: --------------------------- */
...

修改其中PPTP_PORT的值后make,运行发现有效,可以顺利连接到已经修改过的pptp vpn的端口上。

发现pptpclient的结构比较简单,如果想嵌入到其他的软件里也比较方便,只需要了解一下其中主要函数的调用即可。

3、Windows自带VPN客户端

系统自带的东西,修改配置参数当然就得进注册表了。进入HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE- BFC1-08002bE10318}项,其中有类似0000、0001、0002……这样的子项,每个子项都对应一个网适配器的配置。逐一打开这些子项,找到其中字段DriverDesc值为WAN Miniport (PPTP)的子项,例如我找到的是0003。在这个子项里的TcpPortNumber的值就是pptp vpn所使用的端口,双击修改其值,选择基数为十进制,修改成所需要的值确认即可。重启机器后,修改生效。

发表评论

电子邮件地址不会被公开。 必填项已用*标注