内网和外网知识
一、内网和外网科普
内网指一块区域的局域网,处于同一局域网的设备之间可以直接进行通信,不用经过网关另外转换,如果设备处于不同局域网,其之间要进行通信,则需要经过网关转换。外网指的广域网或者城域网,其会连接各个局域网,实现其之间的通信。由于ip地址有限,所以局域网内部的设备对外表现为同一个ip地址,由路由器负责信息的再转发。在局域网内部,设备的ip一般为10、172或者192开头。
IP地址是以网络号和主机号来标示网络上的主机的,我们把网络号相同的主机称之为本地网络(同一局域网),网络号不相同的主机称之为远程网络主机(不同局域网),本地网络中的主机可以直接相互通信;远程网络中的主机要相互通信必须通过本地网关(Gateway)来传递转发数据。
通过上述可以知道,对于一个公网ip,可以在网络上唯一确定一台设备,但对于内网ip,由于其是经过路由器再转发的,所以内网ip不能确定设备。一个最简单的例子就是无论在内网还是外网的服务器上,均可以使用ssh来登陆公网ip设备,但使用不处于同一局域网的设备通过ssh和内网ip是无法登陆内网设备的。
二、内网穿透
要想使得ssh像登陆公网ip一样登陆内网设备,可以使用内网穿透技术来实现,其原理就是将内网设备的端口挂载到一个公网ip的设备上,让内网设备的端口映射到公网ip设备的端口上,这样当访问公网ip设备的对应端口时,就会将信息转换到内网对应端口上。
1、开启ssh服务
对于linux系统,无论是CentOS还是Ubuntu,系统自带了ssh客户端,但ssh远程连接服务端需要自己手动安装,所以使用如下命令来安装:
sudo apt install openssh-server
安装好服务端后,还需要对其进行配置,使用如下命令打开配置文件:
vim /etc/ssh/sshd_config
一般需要将如下配置开启:
Port 22
ListenAddress 0.0.0.0
PermitRootLogin yes
PasswordAuthentication yes
设置好配置文件后,重启sshd服务即可:
sudo service sshd restart #重启
sudo service sshd stop #停止
注:开启ssh服务内网设备和外网设备均需操作
2、开启22端口
一般ssh连接使用的22端口(也可以使用其他端口,需要在ssh配置文件的Port项中设置),所以首先判断22端口是否开启,使用如下命令查看:
netstat -nltp | grep 22
或者使用如下命令查看所有已经使用的端口状态:
netstat -nultp
若22端口没有开启,则需要先将其开启:
sudo apt-get install ufw
sudo ufw enable
sudo ufw allow 22
3、端口挂载
将内网电脑的端口22映射到云服务器的端口1111:
ssh -fNR 1111:127.0.0.1:22 root@云服务器ip
将云服务器的2222端口收到的信息转发给云服务器的1111端口:
ssh -fCNL *:2222:127.0.0.1:1111 root@云服务器ip
此时便可通过访问云服务器的2222端口来连接内网设备
注:当使用ssh -p 2222 root@服务器ip
来连接时,所填的用户名和密码是内网设备的用户名和密码
4、ssh闲置自动断开
关于ssh闲置一段时间之后会自动断开这个问题,可以在办公电脑上设置每分钟发送一次数据包来维持ssh连接。
在 /etc/ssh/ssh_config 下添加
ServerAliveInterval 60
5、ssh参数介绍
-f 后台运行
-N 不执行远程命令,只用于端口转发,如果后台执行不添加此参数会报错,错误如下:
Cannot fork into background without a command to execute.
-C 请求压缩所有数据
-R port:host:hostport user@host 非本地起端口映射到一台主机
例如 1111:127.0.0.1:22 root@111.111.111.111
将云服务器上的1111端口映射到本地的22端口
-L *:port:host:hostport root@host 本地起端口转发到一台主机
例如 *:2222:127.0.0.1:1111 root@111.111.111.111
将云服务器的2222端口转发到本地的1111端口
-p port 指定ssh访问的端口