Content
- [1 问题描述](#1 问题描述)
- [2 原因分析](#2 原因分析)
- [3 解决办法](#3 解决办法)
-
- [3.1 安装`x11`以及`gnome`桌面环境](#3.1 安装
x11
以及gnome
桌面环境) - [3.2 安装`xrdp`](#3.2 安装
xrdp
) - [3.3 远程服务器`ssh`服务配置](#3.3 远程服务器
ssh
服务配置) - [3.4 建立反向`ssh`隧道并验证](#3.4 建立反向
ssh
隧道并验证) - [3.5 `linux`桌面环境下启动浏览器访问`web`服务即可](#3.5
linux
桌面环境下启动浏览器访问web
服务即可)
- [3.1 安装`x11`以及`gnome`桌面环境](#3.1 安装
1 问题描述
在服务器(以ubuntu
为例)内部启动了web
服务,但是无法通过网页访问服务器中的web
服务,其中服务器的配置如下:
linux
服务器目前只开放了ssh
端口,只能通过ssh
访问linux
服务器ip
地址为内网地址,其中ssh
的默认端口(22)被映射到交换机或者其他设备的端口
例如当前服务器可以通过以下指令连接:
bash
ssh root@210.40.56.82 -p 10022
但是服务器内部显示ip
为192.168.10.23
(内网ip):
且ssh
中并未开放10022
端口:
- 使用
lsof -i :10022
指令查看10022端口占用情况(输出为空) - 使用
lsof -i :22
指令查看22端口占用情况(ssh
服务正在监听)
2 原因分析
目标远程服务器中均看不到ssh
连接中的210.40.56.82
地址以及10022
端口信息,说明
210.40.56.82
可能是远程服务器的公共IP
地址,用于从外部网络访问目标远程服务器;- 远程服务器位于具有网络地址转换
NAT
功能的路由器或防火墙后面,210.40.56.82
的10022
端口可能被配置为映射到内部网络中的192.168.10.23
的22端口
这样与远程服务器之间的网络通信方式为:
当外部请求到达 210.40.56.82
的 10022 端口时,路由器或防火墙会将流量转发到 192.168.10.23
的22端口
3 解决办法
通过上述分析得出,如果要访问目标服务器上面某个端口启动的web
服务,直接通过http://210.40.56.82:端口号
是无法访问到的,因为中间节点210.40.56.82
并未做端口映射来转发这样的请求数据,此时
- 要么建立新的
web
服务端口映射 - 要么建立反向SSH隧道
- 其他方式(待探索)
下面以反向SSH隧道为例说明如何具体操作。
3.1 安装x11
以及gnome
桌面环境
x11
和gnome
关系:gnome
环境是建立在 x11
之上的,它使用 x11
来管理和显示图形界面。x11
本身并不提供一个完整的桌面环境,而是提供了构建桌面环境的基础。
查看是否安装x11
bash
dpkg -l | grep xserver
有这样的信息则说明已安装x11
组件(显示相关元素即可):
否则使用下面指令安装x11
组件
bash
sudo apt install xorg
查看是否安装gnome
bash
dpkg -l | grep gnome
有这样的信息则说明已安装gnome
组件(显示相关元素即可):
否则使用下面指令安装gnome
桌面环境
bash
sudo apt install ubuntu-gnome-desktop
3.2 安装xrdp
xrdp
介绍:xrdp
是一个开源的远程桌面协议(RDP
)服务器,它允许用户通过RDP
客户端远程访问
Linux
桌面。
使用下面指令安装xrdp
(如果安装了则跳过)
bash
sudo apt install xrdp
启动xrdp
服务
bash
sudo systemctl restart xrdp
由于xrdp
服务默认使用3389端口,如果linux
防火墙拒绝3389
端口访问,则在防火墙中建立下面的规则:
bash
sudo iptables -A INPUT -p tcp --dport 3389 -j ACCEPT
3.3 远程服务器ssh
服务配置
编辑ssh
配置文件:
bash
vi /etc/ssh/sshd_config
修改以下内容为yes
bash
AllowTcpForwarding yes
GatewayPorts yes
X11Forwarding yes
重启ssh
服务
bash
sudo /etc/init.d/ssh restart
sudo /etc/init.d/xrdp restart
3.4 建立反向ssh
隧道并验证
注意:该步骤为核心步骤,并且必须保证是在本地机器中操作(以windows
举例)
在cmd
窗口中建立反向隧道:
bash
ssh -v -f -N -T -L 10023:localhost:3389 root@210.40.56.82 -p 10022
打开MobaXterm
使用RDP
工具验证
上述指令中将远程服务器3389端口映射到本地机器中的10023端口,因此配置如下信息:
输入密码
如下显示进入ubuntu
界面
3.5 linux
桌面环境下启动浏览器访问web
服务即可
===================================CHEERS ============================