之前尝试过otunnel,也记录过使用方法,见[笔记] 使用otunnel从外网访问内网,但是用了几天发现还是不够稳定。

然后尝试frp,发现性能稳定,够用,将过程及配置分享在这里吧。

需求

内网机器没有公网IP,但是可以访问外网,现在需要从外网访问内网机器。

举例,在家里机器A访问公司内网机器B。

前提

需要一台有公网IP的服务器S做中转,这样就可以打通AB两端了。

A <---> S <---> B

环境

  • 家中A机,Win10
  • 服务器S,Ubuntu 16.04 LTS 64 bit,公网IP: 123.12.23.13 (举例而已),SSH 端口: 22
  • 内网B机,Ubuntu 18.04 LTS 64 bit,内网IP: 192.168.2.3 (举例而已),SSH 端口: 1122,用户名: shit

工具

  • 大牛fatedier开发的frp,官网介绍如下:“frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。”

    下载链接:frp,支持Mac,FreeBSD,Linux,OpenBSD,Windows等平台,当前最新版本是v0.28.2

教程

frp架构如下,在服务器上运行frps,在客户机上运行frpc。

官方教程:frp用法

最简配置实战

基于上面的环境,作如下操作:

  • 在服务器S上下载frp并解压出frpsfrps.ini,修改frps.ini如下:

    [common]
    bind_port = 7000

    启动frps

    ./frps -c ./frps.ini

    这是在服务器S上监听端口7000。

  • 在内网B机上下载frp并解压出frpcfrpc.ini,修改frpc.ini如下:

    [common]
    server_addr = 123.12.23.13
    server_port = 7000 [ssh]
    type = tcp
    local_ip = 192.168.2.3
    local_port = 1122
    remote_port = 6000

    启动frpc

    ./frpc -c ./frpc.ini

    这是从内网机器连接到服务器S的7000端口,以后外网SSH连接到服务器S的6000端口,就等价于连接到内网B机的1122端口

  • 从家中A机的bash窗口运行SSH:

    $ ssh shit@123.12.23.13 -p 6000

内网多HTTP服务透出配置实战

只是ssh肯定不够用,当然想将内网更多的HTTP服务透出啊,比方jupyter notebook,或者内网机器上搭建的git server。基于上面的环境,作如下操作:

  • 修改服务器S上的配置文件frps.ini如下:

    [common]
    bind_port = 7000
    vhost_http_port = 8080
    token = ohmygod

    重新启动frps

    ./frps -c ./frps.ini

    这是在服务器S上监听端口7000,同时将内网HTTP服务以8080端口透出,并且使用ohmygod作为Token加密。

  • 修改内网B机上的配置文件frpc.ini如下:

    [common]
    server_addr = 123.12.23.13
    server_port = 7000
    token = ohmygod [ssh]
    type = tcp
    local_ip = 192.168.2.3
    local_port = 1122
    remote_port = 6000
    use_encryption = true
    use_compression = true [cmcc]
    type = http
    local_port = 10086
    custom_domains = cmcc [unicom]
    type = http
    local_port = 10010
    custom_domains = unicom

    重新启动frpc

    ./frpc -c ./frpc.ini

    这样就可以同时将内网的两个HTTP服务(cmcc和unicom)透出。

  • 从家中A机的浏览器访问内网机B上的HTTP服务

    修改%windir%\system32\drivers\etc\hosts文件,添加如下内容:

    123.12.23.13   cmcc
    123.12.23.13 unicom

    如果需要访问内网B机的cmcc服务,在浏览器中输入http://cmcc:8080

    如果需要访问内网B机的unicom服务,在浏览器中输入http://unicom:8080

    注意到了吗?访问的端口,都是8080,只是域名不同。服务器S会根据这个域名映射到内网B机真正的HTTP服务上。

[笔记] 使用frp从外网访问内网的更多相关文章

  1. [笔记] 使用otunnel从外网访问内网

    需求 内网机器没有公网IP,但是可以访问外网,现在需要从外网访问内网机器. 举例,在家里机器A访问公司内网机器B. 前提 需要一台有公网IP的服务器S做中转,这样就可以打通AB两端了. A <- ...

  2. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

随机推荐

  1. 执行nvidia-smi出错

    执行nvidia-smi出错 NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make su ...

  2. keras基于卷积网络手写数字识别

    import time import keras from keras.utils import np_utils start = time.time() (x_train, y_train), (x ...

  3. 【Python之路】特别篇--Python反射

    反射 说反射之前先介绍一下__import__方法,这个和import导入模块的另一种方式 1. import commons 2. __import__('commons') 如果是多层导入: 1. ...

  4. jquery trigger() 方法 语法

    jquery trigger() 方法 语法 作用:trigger() 方法触发被选元素的指定事件类型.深圳大理石平台 触发事件:规定被选元素要触发的事件. 语法:$(selector).trigge ...

  5. mysql的五大引擎跟优劣之分

    MySQL有多种存储引擎,每种存储引擎有各自的优缺点,可以择优选择使用: MERGE.MEMORY(HEAP).EXAMPLE.ARCHIVE.CSV. · MEMORY存储引擎提供“内存中”表.ME ...

  6. NTT 练习

    一 . Rikka with Subset  题目: http://acm.hdu.edu.cn/showproblem.php?pid=5829 参考  https://blog.csdn.net/ ...

  7. 远程管理FTP

    FTP默认路径 建立pub目录(注意不是文件) LeapFTP使用 注:上传到服务器的pub文件下,不要弄错目录. 在本地计算机利用LeapFTP与FTPServer进行数据的传输,但是FTPServ ...

  8. Linux—查看远程Linux系统运行时间

    [选择题]在Shell环境下,如何查看远程Linux系统运行了多少时间? A.scp user@被监控主机ip "uptime" B.ssh user@被监控主机ip " ...

  9. CUDA-F-2-2-核函数计时

    Abstract: 本文介绍CUDA核函数计时方法 Keywords: gettimeofday,nvprof 开篇废话 继续更新CUDA,同时概率和数学分析也在更新,欢迎大家访问www.face2a ...

  10. maven项目启动找不到org.springframework.web.context.ContextLoaderListener

    解决方法: 1. 右键单击工程项目 ->点击 properties2. 选择 Deployment Assembly3. 点击 Add -> Java Build Path Entries ...