linux系统的3种端口转发方式
很多情况下我们都需要进行端口转发,这里以centos为例记录一下linux系统上端口转发的3种方式。
iptables
想利用iptables进行端口转发,首先要打开内核转发功能:
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
然后编辑转发的服务器的/etc/sysconfig/iptables文件,添加
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -d 转发服务器的ip -p tcp --dport 转发服务器的端口 -j DNAT --to-destination 目标ip:端口
-A POSTROUTING -d 目标ip -p tcp --dport 目标端口 -j SNAT --to 转发服务器的Ip
COMMIT
重启Iptables后即可生效,在我们本机链接转发服务器的ip和端口实际上就是链接目标机器的ip和端口了。
SSH
先说几个常用参数
- -q 静默运行,就算出错也啥都不提示
- -f 后台运行
- -C 压缩,带宽很差的时候压缩会快一些,否则会更慢
- -l 指定用户名,其实就是@前面写的那个
- -N 不执行任何命令,适合仅转发的情况 然后确保本机和转发服务器的ssh服务都开启了准许转发的参数:
GatewayPorts yes
AllowTcpForwarding yes
正向代理,在本机执行:
ssh -l username -N -L 本机IP:本机端口:目标机IP:目标机端口 转发服务器IP
然后再打开一个终端,使用ssh链接本机IP:本机端口即可访问目标机。当然,首先本机需要能访问转发服务器,其次转发服务器能访问目标机器。 反向代理,在本机执行:
ssh -N -R 转发服务器IP:转发服务器端口:本机IP:本机端口 username@转发服务器IP -p转发服务器SSH端口
这样,其他原本访问不了本机服务的机器就可以通过链接转发服务器IP:转发服务器端口来访问本机提供的服务了。
socket代理,配合chrome,firefox浏览器插件翻墙的利器,不多说,给个脚本:
#!/usr/bin/expect -f
set port 7070
set user xxxx
set host xxx.xxx.xxx.xxx
set password xxxx
set timeout -1
spawn autossh -p 22 -M 9998 -NC -D $port $user@$host
expect "*assword:*"
send "$password\r"
expect eof
autossh、spawn、expect命令需要安装,当然也可以使用ssh-copy-id进行免密码登录设置。然后浏览器代理插件端口设置成7070即可。
rinetd
这个软件看说明很强大,没真正使用过。官网:https://boutell.com/rinetd/ 安装后配置vi /etc/rinetd.conf即可,编写的格式是
绑定的地址 绑定的端口 连接的地址 连接的端口
保存后启动即可,没用过我就不多说这个了。