之前尝试过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. 【input】标签去除默认样式

    input{-webkit-appearance: none; -moz-appearance: none; -o-appearance: none; appearance: none;}

  2. 一道经典JS面试题

    超过80%的候选人对下面这道JS面试题的回答情况连及格都达不到.这究竟是怎样神奇的一道JS面试题?他考察了候选人的哪些能力?对正在读本文的你有什么启示? 不起眼的开始 招聘前端工程师,尤其是中高级前端 ...

  3. Httpd总结 :HTTPD的基本概念

    这是一篇为初学者准备的文章,所以作者会尽量从基础出发,尽量细致的描述每一个细节,以求让初学者不会一头雾水,有一定基础的同学就不用看了,以免浪费你的时间.   假设博主今天春心荡漾,想要访问一些不可描述 ...

  4. tbdr+mrt

    有关mrt的在tbdr的架构下的内存排布 system memory肯定是dither 我对这里把握比较大 rt0 rgba8 rt1 r8 这样像素排列是rgba8r8rgba8r8rgba8r8. ...

  5. 201871010126 王亚涛 《面向对象程序设计 (Java)》第十七周学习总结

    内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/12 ...

  6. 题解 【NOIP2014】解方程

    题面 解析 这题的数据看起来似乎特别吓人... 但实际上, 这题非常好想. 只需要模一个大质数就行了(我模的是1e9+7)(实测有效) 另外,a要用快读读入,再一边模Mod(因为实在太大了). 然后, ...

  7. 【Python之路】特别篇--Python切片

    字符串切片操作 切片操作符是序列名后跟一个方括号,方括号中有一对可选的数字,并用冒号分割. 注意: 数是可选的,而冒号是必须的. consequence[start:end:step] 切片操作符中的 ...

  8. jquery unbind()方法 语法

    jquery unbind()方法 语法 作用:unbind() 方法移除被选元素的事件处理程序.该方法能够移除所有的或被选的事件处理程序,或者当事件发生时终止指定函数的运行.ubind() 适用于任 ...

  9. Word:英文从“单词”中间断行

    造冰箱的大熊猫@cnblogs 2019/2/1 在Word输入一个比较长的英文内容,比如“D:/software/myapp/bulids/FieldTest/Final_0533/PViewEdi ...

  10. noi.ac #528 神树和排列

    题目链接:戳我 #include<iostream> #include<cstring> #include<cstdio> #include<algorith ...