[Exchange Ideas] Windows ssh 客户端 PuTTY 正向与反向流量转发(转)
Experiences and Insight 2393 views · 7 replies
Tofloor
poster avatar
littlebat
deepin
2022-01-09 08:02
Author

(原文地址:学习日记 https://www.learndiary.com/2022/01/putty-forward/ )

在我的上篇日记“ssh正向和反向流量转发”( https://www.learndiary.com/2022/01/ssh-forward/ )中,我介绍了在 Linux 中怎样用 ssh 客户端在网关电脑中打通内外网连接。今天,换成 Windows 7 网关电脑中的 ssh 客户端 PuTTY 来做同样的事情。同样,使用虚拟机模拟1台 Windows 7 网关电脑和 2台 Linux 电脑加上宿主机的 Deepin Linux 来做演示。视频演示地址:https://www.bilibili.com/video/BV15q4y1y7Gh?share_source=copy_web

一、各主机及网络状态

各主机的 IP 如下:
A: 网关 Windows 7,10.0.2.15,10.0.0.1
B: littlebat@openeuler,10.0.0.2
C: test@i7,192.168.1.11
D: test@centos,192.168.1.12

各主机连通性如下:
A、B 在同一个局域网 10.0.0.0/24 内,可以互访;
C、D 在同一个局域网 192.168.1.0/24 内,可以互访;
A 通过另一接口 10.0.2.15 可以访问 C、D;
B 不能访问 C、D;
C、D 均不能访问 A、B。

主机 C 开放 ssh 服务器 22 端口,主机 B、D 开放 http 服务器 80 端口。主机 A 的 ssh 客户端 PuTTY 连接 C 的 ssh 服务器,示范正向把 A 的 8088 端口转发到 D 的 80 端口,和反向把 C 的 8088 转发到 B 的 80 端口。

二、正向转发
把 A 的 8088 端口转发到 D 的 80 端口,使 B 访问 A 的 8088 端口从而访问到 D 的 http 服务。
如果 A 是 Linux 主机,可以在 A 中执行 ssh 客户端命令如下:
ssh -p 22 -L *:8088:192.168.1.12:80 test@192.168.1.11
这里 A 是 Windows 主机,可以用 ssh 客户端 PuTTY 来做:
1、点击 PuTTY 左侧的 “Session”,在 “Host Name(or IP address)” 和 “Port” 中分别填上 C 的 IP 192.168.1.11 和 ssh 端口 22,”Connection type” 保持 “SSH” 不变,“Saved Sessions” 取一个名字,如“Deepin_i7”;

p1.jpg

2、点击左侧的“Connection”->“Data”,在右侧“Auto-login username”中填上 ssh 登录的用户名 “test”;

p2.jpg

3、点击左侧的“Connection”->“SSH”->“Tunnels”,在右侧的“Source port” 填写“ :8088”(即一个空格+冒号+8088),“Destination” 填写“192.168.1.12:80”,下面不变,点击“ADD” 按纽(注意,如果“Source port”不填空格+冒号,点选上面的“Local ports accept connections from other hosts”也是一样的效果);

3_1.jpg

或者:

3_2.jpg

4、点击左侧“Session”,点击右侧的“Save”按纽保存“Deepin_i7”的配置;
5、点击右侧下方“open”按纽,如是初次登录,会跳出一些验证提示,点击”Accept”同意就行,然后输入”test”用户的登录密码,进入 Deepin_i7 主机。同时转发成功。
这时,在 B 主机 openEuler 上,访问 http://10.0.0.1:8088 就行了。

三、反向转发
把 C 的 8088 转发到 B 的 80 端口,使 D 访问 C 的 8088 端口从而访问到 B 的 http 服务。
首先设置 C 的 /etc/ssh/sshd_config 的 Gateway = yes 。
如果 A 是 Linux 主机,可以在 A 中执行 ssh 客户端命令如下:
ssh -p 22 -R 8088:10.0.0.2:80 test@192.168.1.11
这里 A 是 Windows 主机,可以用 ssh 客户端 PuTTY 来做:
在上面“Deepin_i7”的配置基础上,直接进入第3步:
3、点击左侧的“Connection”->“SSH”->“Tunnels”,在右侧的“Source port” 填写“8088”,“Destination” 填写“10.0.0.2:80”,下面选择“Remote”,点击“ADD” 按纽(注意,这个反向转发的配置可以和上面的正向配置项并存的);

3_3.jpg

点击了“Add”按纽后和上面正向转发并存时的样子如下:

p3.jpg

4、点击左侧“Session”,点击右侧的“Save”按纽保存“Deepin_i7”的配置;
5、点击右侧下方“open”按纽,然后输入”test”用户的登录密码,进入 Deepin_i7 主机。同时转发成功。
这时,在 D 主机 CentOS 上,访问 http://192.168.1.11:8088 就行了。

四、后记
现在的 Windows 有内置的 WSL(即 Windows 的 Linux 子系统),里面的 ssh 客户端命令行应该也能做到原生 Linux 下的 ssh 一样的功能,我没有测试过。有兴趣的朋友不妨一试。

Reply Favorite View the author
All Replies
deepin-mq
Offical Team
2022-01-10 01:15
#1

感谢分享

Reply View the author
liuyongjin1987
deepin
2022-01-10 02:56
#2

netsh interface portproxy add v4tov4 listenport=8080 connectaddress=D connectport=80

A是Windows操作系统,在A上直接运行这条命令转发不是更简单吗?

Reply View the author
liuyongjin1987
deepin
2022-01-10 02:57
#3

PortTunnel也很好使啊

Reply View the author
liuyongjin1987
deepin
2022-01-10 03:00
#4

专业的代理 还是选用Nginx吧

Reply View the author
littlebat
deepin
2022-01-10 07:28
#5
liuyongjin1987

专业的代理 还是选用Nginx吧

统统的收下,不错,学习了👍

Reply View the author
176******94
deepin
2022-01-10 09:57
#6

ssh 命令就支持这些功能还有必要使用putty?

Reply View the author
deepin
deepin
2022-05-05 10:51
#7

应该不会,感觉是kernel的问题重装内核试一试

Reply View the author
Use Markdown Editor
Loading