相信很多同学都听说过 FRP 吧,FRP可以将公网上指定端口的流量转发到内网中的指定端口来,实现个人站长在家用PC 电脑当服务器的想法。博主的博客,包括学校实验室的服务器都是运行在这种架构上的,但是这种架构有一种致命缺点,FRP 的不稳定性导致当PC设备的网络出现故障时,很可能无法正常连上服务器(FRPS),或者FRPS 遭到扫爆作业时也会导致 FRP 掉线,中断。
今年寒假的时候,博主把服务器搬到了学校的中心机房,Emm,再也不担心放假没电没网的问题了,但是由于学校的中心机房不是随时可以进入的,这就对设备的安全冗余提出了非常高的要求。穿透内网的设备必须足够稳定,能够在中断后自动恢复。博主今天无意中发现腾讯云提供了南京节点,从学校ping 这个节点的延迟只有几毫秒,非常稳定。于是果断决定买一台这样的设备来做安全冗余,那么怎么把腾讯的ECS 上的网络给穿透到学校内网呢?FRP 是肯定不行的,博主的朋友,巨巨想到了VPN,他试图在 腾讯云上面装自定义镜像,跑软路由服务器实现内网穿透。但是博主觉得这实在是浪费,毕竟跑了软路由后这台服务器就废了,不能跑WEB等其它服务了。这怎么行,我还指望这台服务器跑几个WEB网站玩玩呢...
所以博主在仔细研究一番后,提出了使用 PPTP VPN + Firewalld 服务的方法 ,全网唯一 ,你不容错过
首先我们需要一台 centos 7,具有公网地址的服务器(这里直接开的按量计费),安全组默认放通所有 服务器公网地址 129.211.164.203 内网地址 10.206.0.17 ,这里直接借鉴一位前辈的文章
1.检查是否支持pptp
返回ok即表示支持
modprobe ppp-compress-18 && echo ok
2.安装ppp
yum install -y ppp
3.安装pptpd
首先要安装epel源,由于官方源已经移除pptpd包,需要安装第三方源epel
yum install -y epel-release
yum install -y pptpd
4.修改 /etc/pptpd.conf 文件
配置本地隧道网卡地址,及客户端地址池,需要同一网段
localip 10.10.10.1
remoteip 10.10.10.10-100
5.修改 /etc/ppp/options.pptpd 文件
配置隧道dns
ms-dns 8.8.8.8
ms-dns 8.8.4.4
6.修改 /etc/ppp/chap-secrets 文件
添加pptp vpn账号与密码,格式:用户名 pptpd 密码 ip地址
test pptpd 123456 *
7.修改 /etc/sysctl.conf 文件
允许系统路由转发,修文件后执行命令 sysctl -p 立即生效
net.ipv4.ip_forward=1
8.添加防火墙规则
放行pptp服务相关端口,设置nat规则,注:eth0为外网网卡
systemctl start firewalld.service
firewall-cmd --permanent --zone=public --add-port=1723/tcp
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -p gre -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -p gre -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i ppp+ -o eth0 -j ACCEPT
firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i eth0 -o ppp+ -j ACCEPT
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -I POSTROUTING -o eth0 -j MASQUERADE -s 10.10.10.0/24
firewall-cmd --reload
9.重启 pptpd 服务
systemctl restart pptpd
10.设置开机启动 pptpd 服务
systemctl enable pptpd
在完成上面的操作后 ,重点来了。我们需要部署端口转发,这其中有五处大坑。
1.转发的对端设备不同,一般是win 的防火墙阻断了连接
2.用于转发的服务器没有开启需要转发端口的防火墙
3.网上普遍存在的转发端口的教程中 存在输入错误 port 写成了 proto, (在这里问候一下那些不仔细检查一位照搬的人,知道你们的操作造成了多么恶劣的结果)
4.需要注意 网上的教程没有提到 加入的转发规则是临时存在的,重启后失效
5.需要注意,接受转发流量的对端设备一定要放行防火墙
这里我用hfs 做个试验,用hfs 快速搭建了一个web 文件传输工具
注意(旧版本的HFS 有致命BUG ,不建议使用2.3版本,这会带来安全风险,不建议长时间开启此程序)
# 开启防火墙的端口转发功能
firewall-cmd --permanent --zone=public --add-masquerade
# 放通需要使用的端口
firewall-cmd --permanent --zone=public --add-port=18000/tcp
# 将制定端口转发到虚拟网断中的指定设备的指定接口
firewall-cmd --permanent --add-forward-port=port=18000:proto=tcp:toaddr=10.10.10.100:toport=18000
# 重载防火墙生效配置
firewall-cmd --reload
接下来在windows 中新建 vpn 连接,当然也可以在路由器上配置,这都需要你学会操作系统路由表,较难,这里略过
这里我成功的连入了 vpn-test 并获得 172.20.10.100 这个地址 此时就可通过外网访问 18000 端口下载文件了