需求

  1. 一个外网服务器,带着若干内网服务器

  2. 内网服务器 WEB 网站通过 nginx 的 http 模块进行端口映射和转发,完美的实现

    但是,

  3. 内网服务器的 ssh 登录总是需要一个外网服务器作为跳板, 总是很繁琐,并且很难管理

  4. 内网服务器的 rdp 登录 还需要跳板服务器上安装一个图形界面,这就很不舒服了!

  5. 当前环境
    $ nginx -v
    nginx version: nginx/1.14.0 (Ubuntu)

配置 tcp 转发

$ sudo vim /etc/nginx/nginx.conf
增加一个 stream 模块

stream {log_format tcp_trans '$remote_addr [$time_local] ''$protocol $status $bytes_sent $bytes_received ''$session_time "$upstream_addr" ''"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';### Logging Settings### below will place in /usr/share/nginx/logs/# access_log logs/access.log tcp_trans;# error_log logs/error.log;# place in /var/log/nginx/access_log /var/log/nginx/access.log tcp_trans;error_log /var/log/nginx/error.log;# place all tcp transfer config hereinclude /etc/nginx/trans.conf.d/*.conf;
}

注解:

  1. 配置文件 /etc/nginx/trans.conf.d/*.conf 不能放在 conf.d 目录,所以在这里新建了一个目录 trans.conf.d

    $ sudo mkdir trans.conf.d

  2. 日志文件依然放在 nginx 惯例配置的目录: /var/log/nginx/

  3. 注意这一行
    access_log /var/log/nginx/access.log tcp_trans;
    最后一部分 tcp_trans 不要漏掉!

    http 模块配置部分没有这个部分,使用的是缺省的日志格式
    而我们 stream 模块自定义了日志格式,所以,必须加上!

测试

$ sudo nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

重启生效
$ systemctl reload nginx

错误时查看状态
$ systemctl status nginx.service

经常遇到的错误

Jul 14 10:15:22 ubuntu1804-69 systemd[1]: Reload failed for A high
performance web server and a reverse proxy se

  1. 一般首先排查 nginx 自身配置错误,保证 sudo nginx -t 正确
  2. 其次排查端口占用是否冲突,例如: 还安装了 Appache 并配置了 网站,占用了 80 端口

创建配置文件

假设外网地址是 1.2.3.4, 2 个内网地址 192.168.0.123,192.168.0.234

  1. SSH 转发
    $ cd /etc/nginx/trans.conf.d

    取一个一眼就明白的 文件名,例如:
    转发网关服务器 22123 端口到内网地址 192.168.0.123 的SSH (22)端,文件名就叫 : ssh123.conf

    也就是通过 SSH 到外网的 22123端口,实际会登录到内网 192.168.0.123 上

    $ sudo vim ssh123.conf

     # tranfer all 22123 to 192.168.0.123:22server {listen 22123;proxy_connect_timeout 65s;proxy_timeout 12h;proxy_pass 192.168.0.123:22;}
    
  2. RDP 转发

    转发网关服务器 33234 端口到内网地址 192.168.0.234 的RDP 远程桌面 (3389 端口),文件名: rdp234.conf

$ sudo vim rdp234conf

# tranfer all 22234 to 192.168.0.234:3389
server {listen 22234;proxy_connect_timeout 65s;proxy_timeout 12h;proxy_pass 192.168.0.234:3389;
}

测试

  1. 重启 nginx 生效
    $ systemctl reload nginx

  2. 在自己的桌面电脑上输入 ssh 登录命令

    $ ssh -p 22123 dhbm@1.2.3.4

    或者 putty 配置 ip 和端口

  3. 在自己的桌面电脑上配置一个远程桌面,ip = 1.2.3.4 , port = 22234

  4. 如果拿不准防火墙设置,先关闭!完成之后,再去编写 ufw 规则!

sudo ufw allow 22123;
sudo ufw allow 22234

限制 IP 访问

假设外网地址 12.34.56.78 和 1.2.3.4 允许访问 192.168.0.123:443 上的 https 网站
其他外网地址不能访问

$ cat https123.conf

# add by wzh 20210810
# # tranfer all 4123 to 192.168.0.123:443server {listen 4123;proxy_connect_timeout 65s;proxy_timeout 12hs;proxy_pass 192.168.0.123:443;allow 192.168.0.0/24;allow 12.34.56.78;allow 1.2.3.4;deny all;}

使用 nginx 的 stream模块的TCP 转发实现内网SSH相关推荐

  1. 利用nginx的stream模块实现内网端口的转发代理

    nginx从1.9.0开始,新增加了一个stream模块,用来实现四层协议的转发.代理或者负载均衡等.比如在内网有一个mysql服务,想暴露到公网上去使用,就可以通过nginx代理的方式通过nginx ...

  2. Nginx使用stream模块分流实现端口复用

    使用Nginx复用端口有很多方法,最普遍的方法是在不同的server块中监听同一端口,根据不同的主机名完成分流.本文介绍了一种较新的端口复用方法,它可以方便地对TLS加密的TCP数据进行分流. 1 N ...

  3. windows下使用nginx 端口转发 frp内网转发

    端口转发工具, win10下测试通过,用ip方式优于域名方式 https://sourceforge.net/projects/pjs-passport/ nginx下载地址 http://nginx ...

  4. CentOS 7 下用 firewall-cmd / iptables 实现 NAT 转发供内网服务器联网

    自从用 HAProxy 对服务器做了负载均衡以后,感觉后端服务器真的没必要再配置并占用公网IP资源. 而且由于托管服务器的公网 IP 资源是固定的,想上 Keepalived 的话,需要挤出来 3 个 ...

  5. ubuntu的端口转发(内网穿透)和端口开放

    最近在部署应用,涉及到内网的穿透和端口开放等知识,在此做个总结. 背景:现在有服务器A(位于内网中).服务器B(外网可访问),现在需要实现外网的主机访问服务器A上的特定ip和port. 实现步骤:服务 ...

  6. 云主机实现外网转发访问内网的 Redis 和 MongDB 数据库

    1.前提条件 如果您需要从本地 PC 端访问 Redis 实例或者 MongDB 实例进行数据操作,可以通过在 ECS 云主机上配置端口映射或者端口转发实现.但必须符合以下前提条件: 若 Redis ...

  7. kali扫描内网ip_Metasploit路由转发实现内网渗透

    利用背景 在渗透的过程中常常会遇到这种场景:我们已经通过web渗透拿下一台内网服务器,为了进一步进行内网渗透,我们会利用"沦陷主机"作为跳板进行进一步的内网渗透,扩大战果. 现在假 ...

  8. ip以及端口转发数据、根据端口转发显示内网的web的方法介绍

    一.ip和端口都转发(跨机器) 将140.207.3.110(内网是192.168.0.139)服务器 端口为11450的数据转发到 192.168.0.138的1145端口上面去. 1.部署服务器1 ...

  9. SSH反向代理转发至内网msf

    前言 买了个便宜的 vps , 在上面装 msf 也装不上,于是想着把端口映射到内网来. 正文 拓扑如下: 首先在内网主机 B ssh -fCNR 7281:localhost:5000 root@C ...

  10. windows如何拦截出网TCP流量转向内网的一个简易解决方案

    这是我2天的入坑经验.如果你跟下面需求一样,难友,留步! 在本地有一个应用程序 A.exe A.exe程序要访问他的服务器B 但是这个B服务器已经挂了,通过wireshark抓包分析到了可能是他访问了 ...

最新文章

  1. 不再受限于数据集和硬件,下一代 ML 软件如何构建?
  2. 无线网络的网速很慢_家里无线网络每天不定时段出现网速很慢或者直接无连接,这是怎么回事?...
  3. jfinal怎么连接oracle,如何用Jfinal连接多个数据库
  4. spring boot 邮件端口_1 分钟教会你用 Spring Boot 发邮件
  5. 机器学习笔记:误差的来源(bias variance)
  6. 剑指OFFER之二进制中1的个数(九度OJ1513)
  7. python图片保存_python读取和保存图片5种方法对比
  8. 初识 Vue(01)---(输出 Hello World)
  9. Objective-C 内存管理
  10. SD卡容量变小恢复方法
  11. android webview实现拍照
  12. 国产ERP不如洋品牌但适合国能中小药企(转)
  13. 【上位机与下位机通信】使用WIFI模块ESP8266连接单片机与上位机通信
  14. 扎根基层一线 助力社区(村)发展
  15. 小程序未来发展趋势怎样?2020最新趋势分析
  16. 设计初学者必学之AI图形描边:宽度工具与画笔工具
  17. 让QQ群聊天记录自动保存到群空间中(转)
  18. vue项目引入vue-i18n,实现中英文切换
  19. AR+旅游,来一场难忘的沉浸式旅行
  20. Vue 里,多级菜单要如何设计才显得专业?

热门文章

  1. CodeForces992E 二分 + 树状数组(线段树)
  2. 1006 换个格式输出整数 (15)
  3. Python3.x:定义一个类并且调用
  4. 使用工具类DbUtils连接数据库,并简单操作数据库
  5. 51nod 1577 线性基
  6. 转 生成 HTMLTestRunner 测试报告
  7. JavaScript--如何插入JS
  8. Ninject.Web.Common,Ninject.MVC3源码分析
  9. Nginx代理服务器使用
  10. 《深入理解JavaScript闭包和原型》笔记