在屏蔽任何FRP环境下从零开始搭建安全的FRP内网穿透服务

背景

本人目前在境外某大学读博,校园网屏蔽了所有内网穿透的工具的数据包和IP访问,为了实现在家也能远程访问服务器,就不得不先开个学校VPN,再登陆。我们实验室还需要访问另一个大学的服务器,每次我都要去找另一个大学的同学借账户和动态token访问,不胜其烦。

我尝试了包括向日葵、FRP、ngrok等多个内网穿透工具,在校园无线网、校园访客WiFi、有线网均做了测试。我发现大学为了防hack,真是煞费苦心:最终这些数据包全被过滤了

我想到的解决方案,有两点:1. 进一步加密frp等工具的流量,让防火墙认不出来;2. 买插sim卡的无线路由器一步到位(前提是服务器环境有手机信号)。

我最终为了节约时间,选择了后者。成本包括FRP服务器、路由器、流量卡在内大概500元RMB,能保证一年的ssh访问流量(77GB)。果然,能用钱解决的问题,就不是问题。

步骤

内网穿透diagram

在屏蔽任何FRP环境下从零开始搭建安全的FRP内网穿透服务_第1张图片

FRP服务器搭建

选购服务器

  1. FRP服务:我选择了同城的低成本vps,不到200一年,521MB内存,70Mbps网口。实测下载速度跑到6MB/s没啥压力。
  2. 冗余服务器:我在网上找了做ngrok隧道的,做了冗余隧道。万一FRP程序死机了,还有另一条冗余隧道。

FRP server搭建

  1. github下载最新版FRP客户端和服务端:github地址
  2. 根据文档一步步搭建FRP服务端:文档
  3. 我FRP server主要配置如下:
bindPort = 7000
auth.token = "填写长一点的数字+字母的token,我试过加符号会出错"
# 服务端dashboard
webServer.port = 7500
webServer.user = "admin"
webServer.password = "admin"
#日志记录等级,有trace, debug, info, warn, error
log.level = "info"
#日志保留时间
log.maxDays = 3
log.to = "/root/frp_0.54.0_linux_amd64/log/frps.log"

详细配置参考官方文档

启动FRP服务器

使用以下命令启动服务器:./frps -c ./frps.toml。 使用以下命令启动客户端:./frpc -c ./frpc.toml。
如果需要在后台长期运行,建议结合其他工具,如 systemd 和 supervisor。

路由器&SIM流量卡选购

路由器特点:支持以太网口、SIM卡插入、外部电源供电
踩坑:我就是买了WiFi蛋,一开始可以usb有线网接入,后面供电不行,只能开启wifi接入,结果网速慢多了。

SIM卡:零月租,纯流量,77G 365天。SSH没几个人用,每天平均200多M,应该够用了。
在屏蔽任何FRP环境下从零开始搭建安全的FRP内网穿透服务_第2张图片

Client路由设置

  1. 确定主要流量走以太网(校园网);只有内网穿透流量走流量卡(SSH流量);
  2. ip route get {FRP服务器ip}查看是否走了wifi路由器,用traceroute {域名}也可以;
  3. 考虑到FRP服务器ip可能会变,需要定时解析;
#!/bin/bash

# 域名
DOMAIN_NAME="xx.xx.com"

# 使用dig命令解析域名获取IP地址
IP_ADDRESS=$(dig +short $DOMAIN_NAME | tail -n1)

if [ -z "$IP_ADDRESS" ]; then
    echo "无法解析域名: $DOMAIN_NAME"
    exit 1
fi

# WiFi接口名称,注意下面只是example接口名
WIFI_INTERFACE="wlx200db0362a21"

# 获取WiFi接口的默认网关
WIFI_GATEWAY=$(ip route show default | grep $WIFI_INTERFACE | awk '{print $3}')

# 构造预期的路由规则
EXPECTED_ROUTE="$IP_ADDRESS via $WIFI_GATEWAY dev $WIFI_INTERFACE"

# 检查是否已存在预期的路由规则
EXISTING_ROUTE=$(ip route show to match $IP_ADDRESS | grep $WIFI_INTERFACE)

if [[ "$EXISTING_ROUTE" == *"$EXPECTED_ROUTE"* ]]; then
    echo "路由规则已存在,无需更新: $EXPECTED_ROUTE"
else
    # 删除旧的路由规则(如果存在)
    sudo ip route del $IP_ADDRESS dev $WIFI_INTERFACE 2> /dev/null

    # 添加新的路由规则
    sudo ip route add $EXPECTED_ROUTE

    echo "路由更新完成: $EXPECTED_ROUTE"

    sudo systemctl restart frpc.service
fi


  1. SSH和FRP安全设置,参考前一篇文章。
  2. 开启frptables

你可能感兴趣的:(服务器,安全,服务器,内网穿透,FRP)