首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >SSH端口转发2, 转发https流量.

SSH端口转发2, 转发https流量.

原创
作者头像
大大刺猬
修改2020-07-06 17:41:09
修改2020-07-06 17:41:09
5K0
举报
文章被收录于专栏:大大刺猬大大刺猬

1.场景:

我有台外网服务器, 我有个内网服务器上有个web应用, 现在希望通过访问外网服务器的443端口就能访问内网服务器的web服务.

client_d能访问server_a即可,server_a处于互联网中(拥有公网IP). server_b能同时访问server_a和server_c

即, CLIENT_D 访问https://129.28.x.x 时, 就相当于访问 https://192.168.1.10

图一
图一

2. ssh 用法

代码语言:javascript
复制
man ssh  #查看帮助文档最快

这看起来可能有点懵(默认情况下,方括号里的内容表示可省略)
这看起来可能有点懵(默认情况下,方括号里的内容表示可省略)

看起来比较麻烦,我都总结如下

代码语言:javascript
复制
ssh -R [HOST_1_IP]:HOST_1_PORT:HOST_2_IP:HOST_2_PORT  HOST_1_IP[:HOST_1_PORT] -Nf

解释(参考图一):

-R 关键词

-Nf 后台启用,不打开shell

HOST_1_IP 拥有公网IP的服务器(SERVER_A) HOST_1_PORT 拥有公网IP的服务器(SERVER_A)的端口 HOST_2_IP 私网服务器的IP(SERVER_C) HOST_2_PORT 私网服务器的IP(SERVER_C)的端口

3.实现图一要求:CLIENT_D 访问SERVER_C的web服务

3.1 在SERVER_A 上开启ssh的TCP转发,并重启ssh服务.

编辑 /etc/ssh/sshd_config 修改如下内容

AllowAgentForwarding yes

AllowTcpForwarding yes

3.2在SERVER_B上执行如下代码

代码语言:javascript
复制
ssh -R 8001:192.168.1.10:446 129.28.x.x  -Nf    #我这里是为了保护IP才写的x.x, 你要根据实际情况来哈.
我配置了ssh免密登录,所有不用输入密码,不会的同学可以参考我以前写的"SSH 免密登录 SHELL安装脚本"
我配置了ssh免密登录,所有不用输入密码,不会的同学可以参考我以前写的"SSH 免密登录 SHELL安装脚本"

ssh免密登录:https://cloud.tencent.com/developer/article/1612304

查看端口,确实监听了的(但是仅对于服务器自生可见)

扫描端口:https://cloud.tencent.com/developer/article/1523191

这个端口就仅服务器自生可见,其它服务器扫描不了这个端口
这个端口就仅服务器自生可见,其它服务器扫描不了这个端口

3.3 直接访问;https://server_a:8001是不得行的.

所有我们再做一下tcp转发.用haproxy.

安装haproxy

代码语言:javascript
复制
yum install haproxy

编辑配置文件/etc/haproxy/haproxy.cfg 把它原有的负载配置注释掉(frontend及其之后的行全部注释掉.),并添加如下内容.

代码语言:javascript
复制
frontend https
  bind *:443
  mode tcp
  default_backend app

backend app
  mode tcp

balance roundrobin
  stick-table type ip size 200k expire 60m
  stick on src
  server s1 127.0.0.1:8001

启动服务,并查看

测试:

访问https://129.28.x.x

总结: ssh本质上是转发的tcp流量, haproxy也是转发的tcp流量, 所以ssl认证是内网服务器和客户端进行的.

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 1.场景:
  • 2. ssh 用法
  • 3.实现图一要求:CLIENT_D 访问SERVER_C的web服务
    • 3.1 在SERVER_A 上开启ssh的TCP转发,并重启ssh服务.
    • 3.2在SERVER_B上执行如下代码
    • 3.3 直接访问;https://server_a:8001是不得行的.
  • 测试:
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档