我有一台旧服务器,公网放在家里跑着几个小服务。服务公网IP是网穿有的,但80端口被运营商封了,透自443也悬。定义端口想从外面访问,公网就得动点脑筋——内网穿透,服务自定义端口,网穿这事儿其实没那么玄乎。透自
核心就一句话:在服务器上装个隧道工具,定义端口把公网某个端口的公网数据,转发到内网机器的服务指定端口上。工具选型上,网穿frp是透自首选,轻量、定义端口配置直观,我用了三年没出过岔子。你下载对应架构的二进制文件,解压后改两处配置就够。
服务器端(有公网IP的那台)的frps.ini长这样:
[common] bind_port = 7000 token = 你的密码 内网机器上的frpc.ini则是:
[common] server_addr = 你的公网IP server_port = 7000 token = 你的密码 [web] type = tcp local_ip = 127.0.0.1 local_port = 8080 remote_port = 18080 启动两边进程,公网访问你的IP:18080,流量就顺着隧道钻进内网的8080端口了。就这么简单。但实际用起来,有几个坑得自己趟过才记得住。
第一个坑是防火墙。腾讯云和阿里云的服务器默认只放行22和常用端口,你得去控制台安全组里把18080加上,不然隧道通了也白搭。本地跑frps的那台机器,如果开了系统防火墙,同样要放行bind_port和remote_port。这步漏了,你会在外面干瞪眼半小时,最后发现是安全组没配。
第二个坑是端口冲突。公网服务器上如果跑了Nginx或者别的服务,remote_port别选得太随意。我有次图省事选了8080,结果和服务器上已有的服务撞了,frpc报错半天看不出问题。后来学乖了,用10000以上的高位端口,基本没人占。
自定义端口还有个好处——避开扫描器。默认的22、3389这些端口,天天被bot扫。你开个18080,虽然不能完全隐身,但至少能过滤掉90%的自动攻击。我有个朋友做监控面板,把SSH改到22222,再把frp的remote_port设成54321,半年日志里连个尝试登录的都没有。
实际场景里,我拿这套方案干过最得意的事,是把家里NAS的Web管理界面透传出去。出差时想调个文件,公网IP加自定义端口,浏览器直接开,不用折腾VPN。但记得加密——frp的token是明文传输的,最好配个TLS证书。frps.ini里加一行tls_only = true,客户端对应设置一下,安全性就上来了。
还有个小技巧:如果你有域名,可以用frp的subdomain功能,把不同服务映射到不同子域名上。比如nas.yourdomain.com走NAS,blog.yourdomain.com走博客,端口都不用记,浏览器输域名就行。但前提是你的域名解析到服务器IP,而且服务器上得有个Nginx做反向代理。
这套东西跑起来后,基本不用管。我那个frp进程已经连续运行了200多天,内存占用不到20MB,稳得跟老狗似的。唯一一次出问题,是云服务商重启导致公网IP变了,内网机器连不上。后来加了DDNS脚本,IP一变自动更新解析,再没操过心。
你如果手头有闲置机器,值得折腾一下。成本为零,收益是随时随地能摸到内网服务。别怕配置复杂,实际跑通一次,你就明白这些参数是干嘛的了。