内网穿透 与 安全远程
Contents
内网穿透,就是把内网机器端口映射到公网,便于远程访问。
应用场景:
- 直接在公网演示本地 demo;
- 出门在外远程自己的电脑;
- 下班路上控制路由远程下载;
- ……
内网穿透的方案主要两种:
- 花生壳等 第三方服务:免费凑合用,花钱买速度;
- ngrok、frp 等开源自建服务:简单部署,一劳永逸。
对速度要求不高的情况下,花生壳是不错的选择。ngrok 也有免费的限流服务。 测试之后,我选了自己搭建 frp 。 具体原因:
- 速度快,远程桌面清晰流畅;
- 比 ngrok 部署简单、无依赖;
- 客户端、服务端 都很小,不怎么占资源。
我们开始部署 frp 吧!
-
获取对应版本的 frp in github
cd /usr/local/ # 例:服务器系统 Ubuntu 64位 wget https://github.com/fatedier/frp/releases/download/v0.21.0/frp_0.21.0_linux_amd64.tar.gz #妥善解压、配置文件路径 tar -xvf frp_0.21.0_linux_amd64.tar.gz mv frp_0.21.0_linux_amd64 frp
-
配置服务端
#frps 服务端程序 #frps.ini 服务端配置文件 #frpc 客户端程序(此处 frpc 仅用于amd64 linux 系统,下文 客户端 需单独下载。) #frpc.ini 客户端配置文件
vim frps.ini
[common] #frp服务器监听地址,如果是IPV6地址必须用中括号包围 bind_addr = 0.0.0.0 #frp服务器监听端口 bind_port = 7000 #kcp的udp监听端口,如果不设那就不启用 #kcp_bind_port = 7000 #指定使用的协议,默认tcp,可选kcp #protocol = kcp #如果要使用vitual host,就必须设置 vhost_http_port = 8080 #vhost_https_port = 443 #Web后台监听端口 dashboard_port = 7500 #Web后台的用户名和密码 dashboard_user = abc dashboard_pwd = 123 #Web后台的静态资源目录,调试用的,一般不设 #assets_dir = ./static #日志输出,可以设置为具体的日志文件或者console log_file = /var/log/frps.log #日志记录等级,有trace, debug, info, warn, error log_level = info #日志保留时间 log_max_days = 3 #启用特权模式,从v0.10.0版本开始默认启用特权模式,且目前只能使用特权模式 #privilege_mode = true #特权模式Token,请尽量长点且复杂 privilege_token = 123 #特权模式允许分配的端口范围 privilege_allow_ports = 2000-3000,3001,3003,4000-50000 #心跳超时,不用改 #heartbeat_timeout = 90 #每个代理可以设置的连接池上限 #max_pool_count = 5 #认证超时时间,一般不用改 #authentication_timeout = 900 #如果配置了这个,当你的模式为http或https时,就能设置子域名subdomain #subdomain_host = frps.com #是否启用tcp多路复用,默认就是true,不用管 #tcp_mux = true
整理好 frps.ini 配置文件,即可先启动服务端:
screen -S frp #或者 nohup 挂后台执行 nohup ./frps -c frps.ini & ./frps -c frps.ini
-
配置客户端
-
Win PC
# 例:win10 64 位 # https://github.com/fatedier/frp/releases/download/v0.21.0/frp_0.21.0_windows_amd64.zip 下载==>解压==>配置目录
编辑 frpc.ini
[common] #frp服务器地址 server_addr = 服务器地址 #frp服务器端口 server_port = 7000 #特权模式Token privilege_token = 123 #转发desktop 远程桌面端口 [desktop] type = tcp #可以指定为其它IP,默认是本地 #local_ip = 127.0.0.1 local_port = 3389 remote_port = 1234 #启用加密 #use_encryption = true #启用压缩 #use_compression = true
启动win客户端:
frpc.exe -c frpc.ini
然后,便可通过win自带远程桌面,控制远在异地或者床下的PC了。
-
路由器 openwrt
cd /mnt/sda1/ # !! 切换到外置存储,地方够大 mkdir frp cd frp wget https://github.com/fatedier/frp/releases/download/v0.21.0/frp_0.21.0_linux_mips.tar.gz
路由器版本依照 硬件和固件版本确定,笔者 路由 型号
DW33D
、固件LEDE Reboot 17.01.4 r3560-79f57e422d / LuCI lede-17.01 branch (git-17.290.79498-d3f0685)
。vi frp/frpc.ini
[common] #frp服务器地址 server_addr = 服务器地址 #frp服务器端口 server_port = 7000 #特权模式Token privilege_token = 123 #转发desktop [ssh] type = tcp #可以指定为其它IP,默认是本地 #local_ip = 127.0.0.1 local_port = xxxx remote_port = xxxx #启用加密 #use_encryption = true #启用压缩 #use_compression = true
openwrt 开机自启:
cd /etc/init.d/ vi frp #---start #!/bin/sh /etc/rc.common START=99 start(){ sleep 10 /mnt/sda1/frp/frpc -c /mnt/sda1/frp/frpc-domy.ini } restart(){ /mnt/sda1/frp/frpc -c /mnt/sda1/frp/frpc-domy.ini } #---end chmod 755 frp # 赋权 ./frp enable # 启用 ./frp start # 尝试手动启动
-
至此,服务端与客户端均已配置完毕,并开始连接。
login to server success,……
[ssh] start proxy success
以上便是 frp 内网穿透的最常用部署过程。此外,还有很多种方案可探索:
- 结合 aria2 远程下载;
- 远程打印
- 自建云盘
安全建议:
在公网上暴露自己是有风险的,最基本的安全措施要有:
-
更改默认端口(如,默认ssh的22端口)
-
强密码
-
低调
全文完。希望需要的人能参考一二。
Author NickHoo
LastMod 2018-09-03