linux内网穿透(内外网服务器端口映射)

1、安装sshpass(CentOS7)

rpm -ivh sshpass-1.06-1.el7.x86_64.rpm

若内网无法连接网络,可下载后,在上传至内网服务器,下载地址:
https://centos.pkgs.org/7/epel-x86_64/sshpass-1.06-1.el7.x86_64.rpm.html

2、内网服务器的操作

ssh -N -v -R 外网服务器端口:127.0.0.1:内网服务器端口 外网服务器用户@外网服务器ip,如:

ssh -N -v -R 8080:127.0.0.1:8090 [email protected]

该命令在内网服务器执行,执行完之后,需要输入外网服务器用户对应的密码,之后,外网服务器120.79.255.186:8080 的所有请求,都会被转发至内网服务器的8090端口。
但是执行完之后,会话不能关闭,否则端口映射会失效,可使用如下命令让映射运行在后台:

nohup sshpass -p ‘外网服务器密码’ ssh -N -v -R 8080:127.0.0.1:8090 [email protected] > 8080.out

端口映射的日志,会输出到当前目录的8080.out文件中

3、外网服务器的配置

3.1.打开 /etc/ssh/sshd_config,将GatewayPorts参数设为yes
3.2.systemctl restart sshd.service,重启ssh服务
注意:较低版本的Linux服务器 重启命令为 service sshd restart
3.3. 解决Linux服务器 FIN_WAIT2 连接过多的问题:
修改/etc/sysctl.conf文件:
net.ipv4.tcp_syncookies = 1
表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭
net.ipv4.tcp_fin_timeout = 30
表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
net.ipv4.tcp_max_syn_backlog = 8192
表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_tw_buckets = 5000
表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改为5000。

4、保持ssh长连接

如果仅仅是以上配置,端口映射无法长时间维持,时间长了,可能会断掉。
方法1:
修改外网服务器配置文件/etc/ssh/sshd_config
ClientAliveInterval 60 #server每隔60秒发送一次请求给client,然后client响应,从而保持连接
ClientAliveCountMax 3 #server发出请求后,客户端没有响应得次数达到3,就自动断开连接
配置完之后,通过命令’systemctl reload sshd’重启

方法2:
修改内网服务器配置文件/etc/ssh/sshd_config
ServerAliveInterval 60 #client每隔60秒发送一次请求给server,然后server响应,从而保持连接
ServerAliveCountMax 3 #client发出请求后,服务器端没有响应得次数达到3,就自动断开连接

说明:
1、端口映射需要开通22端口,ssh的端口映射,是通过22端口实现的
2、内网服务器应用重启,不需要重新执行端口映射的命令
3、执行端口映射的命令后,外网服务器的映射端口会被占用,故使用的进程不能被关闭,否则端口映射失效

你可能感兴趣的:(linux)