[toc]

前言

内网穿透有很多可选的办法,但要明确的是,一切都是从需求出发的。因此先来说说需求:

  1. 服务器和客户机都是Windows操作系统,客户机32位,服务器64位。
  2. 内网穿透处于内网的计算机不能有任何软件图标或者启动界面出现;
  3. 可以访问内网计算机23、3389等端口;
  4. 可以使用将内网计算机做代理服务器;
  5. 内网穿透服务可以随系统启动而启动;
  6. 不绑定域名进行内网穿透;

明确需求以后,可以排除掉花生壳等内网穿透软件,但是由于ngrok不满足第5点需求,因而放弃使用ngrok。最终选择使用FRP

下载FRP

可以通过在git上下载源代码自行编译或者使用在git上已经编译好的release版本。

官方源码:Sources

官方最新版本下载:Release.Latest

官方中文说明文档:ReadMe.zh-cn

官方英文说明文档:ReadMe.us-en

安装FRP

FRP服务端配置

配置

极简配置

一般采用极简配置即可,若需要查看完全配置,请参阅:frps完整配置文件,该配置文件在从官方下载的Release版本中也能看到。

一般只需要配置绑定的端口即可,此处还打开了dashboard功能。

# frps.ini

[common]
bind_port = xxxxx   # frp服务端端口,用以与frp客户端建立连接,不要与系统保留端口冲突,小于65535

dashboard_port = xxxxx  # 控制面板的访问端口号,不要与系统保留端口冲突,小于65535
dashboard_user = username   # 控制面板的访问账号
dashboard_pwd = passwd  # 控制面板的访问密码

运行

在frps的同级目录中,打开CMD中运行以下命令(可能需要管理员模式运行)

frps -c frps.ini

FRP客户端配置

配置

极简配置

一般采用极简配置即可,若需要查看完全配置,请参阅:frpc完整配置文件,该配置文件在从官方下载的Release版本中也能看到。

# frpc.ini

[common]
server_addr = xxx.xxx.xxx.xxx # frp服务器地址,可以是ip地址或者域名地址
server_port = # frp服务端口,用以与frp服务端建立连接,填写服务器配置中所配置的端口号

[telnet]    # 服务名称,按实际需求定义,在dashboard中可以查看
type = tcp  # 协议类型
local_ip = 127.0.0.1    # 需要映射的本地ip
local_port = 23 # 需要映射的本地端口
remote_port = 11123 # 指定服务器的转发端口号,用以建立穿透

运行

在frpc的同级目录中打开cmd,运行以下命令:

frpc -c frpc.ini

自动运行

frp在每次电脑重新启动以后都需要手动运行,因此需要通过计划任务或者其他方式使frp能够在开机时自动运行。

此处采用添加到服务的方式来自动运行。

  • 下载instsrv和srvany

  • 将instsrv和srvany复制到32位系统的system32目录下,复制到64位系统的syswow64目录下

    如果不想移动该文件,则可以将这两个文件所在的目录添加到环境变量中,以便在cmd中可以直接运行

  • 在cmd中执行以下命令

    instsrv [serviceName] srvany  # serviceName根据需求自行定义
    reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\[serviceName]\Parameters # 在服务serviceName中新建Parameters子项
    reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\[serviceName]\Parameters /v Application /d [Program Address] # Program Address为要作为服务运行的程序地址
    reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\[serviceName]\Parameters /v AppDirectory /d [Program Files Address] # Program Files Address 为要作为服务运行的程序所在文件夹路径
    reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\[serviceName]\Parameters /v AppParameters /d [Program Arguments] # 为要作为服务运行的程序启动所需要的参数
    
  • 打开service.msc,找到serviceName(自建的服务名称),然后启动即可。

建立链接

  • TELNET

    CMD中执行以下命令:

telnet 192.168.1.10 10023
telnet www.sample.com 10023
# 192.168.1.10是服务器地址,6023是映射到服务器的端口,www.sample.com处同理。将此处修改为自己的服务器配置
  • REMOTE DESKTOP

    在Windows中打开远程桌面,输入服务器地址和端口号即可连接,例如

192.168.1.10:3387
www.sample.com:3387
  • 代理服务

    由于FRP不支持GRE协议,因此,PPTP、L2TP等服务是无法通过通过与服务器之间建立端口映射的方式穿透出去,但由于FRP内建了http_proxy和socks5的代理映射,因而可以忽略部分不支持GRE所带来的影响。

    • HTTP_PROXY

    internet设置中进行配置

    • SOCKS5

    同HTTP_PROXY