原创:https://blog.csdn.net/ndzjx/article/details/113853835
linux 端口转发的方式很多种,除了防火墙(模拟路由器的功能),其他都是软件方式,在处理长连接时有问题(比如server挂了,代理还存在,就会出现连接成功,接收数据时失败。),下面详细说说防火墙的方式:
其他方式参考:Linux端口转发的几种常用方法 | 《Linux就该这么学》
https://www.cnblogs.com/wspblog/p/4297160.html
代理部署步骤:
使用CentOS7.0以上的机器,用防火墙做转发,
(0)安装服务
yum install firewalld firewall-config
(1) 开启防火墙 systemctl start firewalld
开机自启服务:systemctl enable firewalld
(2) 开启伪装IP
firewall-cmd --permanent --add-masquerade
(3)配置转发选项
vi /etc/sysctl.conf
在文本内容中添加:net.ipv4.ip_forward = 1
sysctl -p
(4) 配置端口转发,将到达本机的2222端口的访问转发到另一台服务器(比如:192.168.3.14)的2222端口。
添加:firewall-cmd --permanent --add-forward-port=port=2222:proto=tcp:toaddr=192.168.3.14:toport=2222
(5) 重新载入,使其生效
firewall-cmd --reload
------help
firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toaddr=192.168.3.14:toport=80
firewall-cmd --permanent --add-forward-port=port=443:proto=tcp:toaddr=192.168.3.14:toport=443
将当前防火墙的规则永久保存(之前的命令如果加了--permanent,这里就不用执行
firewall-cmd --runtime-to-permanent
删除:
firewall-cmd --remove-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.1 --permanent
开机启动
systemctl is-enabled firewalld
firewall-cmd --query-masquerade # 检查是否允许伪装IP
firewall-cmd --add-masquerade # 允许防火墙伪装IP
firewall-cmd --remove-masquerade# 禁止防火墙伪装IP
//=====================================
如果使用老的iptables方式:
(0)
vi /etc/sysctl.conf
在文本内容中添加:net.ipv4.ip_forward = 1
sysctl -p
(1)安装服务:
yum install iptables-services
启动:
systemctl start iptables
开机启动:
systemctl enable iptables
(2)配置转发
// 把 本机192.168.3.141/2222 转发到192.168.3.28/2222
iptables -t nat -A PREROUTING -d 192.168.3.141 -p tcp --dport 2222 -j DNAT --to-destination 192.168.3.28:2222
iptables -t nat -A POSTROUTING -d 192.168.3.28 -p tcp --dport 2222 -j SNAT --to 192.168.3.141
或者
iptables -t nat -A PREROUTING -p tcp --dport 2222 -j DNAT --to-destination 192.168.3.28:2222
iptables -t nat -A POSTROUTING -d 192.168.3.28 -p tcp --dport 2222 -j MASQUERADE
保存:(保存之前,测试可不可以telnet通,不通的话看看FORWARD表尽量没有reject 以免影响)
service iptables save
----help
清空 iptables -t nat -F PREROUTING
查看 iptables -t nat -nL --line-number
删除 iptables -t nat -D PREROUTING 1
查看占用端口的进程:
netstat -tunlp|grep 端口号