两种解决方案
- rinetd端口转发
- ssh tunnel实现
rinetd
官网地址:https://boutell.com/rinetd/
wget http://www.boutell.com/rinetd/http/rinetd.tar.gz&&tar -xvf
rinetd.tar.gz&&cd rinetdsed -i 's/65536/65535/g' rinetd.c
(修改端口范围,否则会报错)mkdir /usr/man&&make&&make install
编辑配置
vi /etc/rinetd.conf
0.0.0.0 8080 172.19.94.3 8080
0.0.0.0 2222 192.168.0.103 3389
1.2.3.4 80 192.168.0.10 80说明一下(0.0.0.0表示本机绑定所有可用地址)
将所有发往本机8080端口的请求转发到172.19.94.3的8080端口
将所有发往本机2222端口的请求转发到192.168.0.103的3389端口
将所有发往1.2.3.4的80端口请求转发到192.168.0.10的80端口命令格式是:
bindaddress bindport connectaddress connectport
绑定的地址 绑定的端口 连接的地址 连接的端口
或
[Source Address] [Source Port] [Destination Address] [Destination Port]
源地址 源端口 目的地址 目的端口启动程序
pkill rinetd ##关闭进程
rinetd -c /etc/rinetd.conf ##启动转发
把这条命令加到/etc/rc.local里面就可以开机自动运行
查看状态
netstat -antup
ssh tunnel
通过客户端ssh连接公网机器,客户端监听端口请求,并使用公网机器转发到内网机器
对于windows客户端
使用putty连接公网机器,设置putty中的ssh tunnel来监听端口请求对于linux客户端
使用ssh来连接公网机器,通过ssh参数形式来配置需要监听的端口以及转发的地址和端口
如何让ssh连接服务器或者sshtunnel保持连接?
在/etc/ssh/ssh_config文件里加两个参数
TCPKeepAlive yes #保持连接
ServerAliveInterval 300 #每过5分钟发一个数据包到服务器表示我还活着