CentOS 7的iptables实验
--发布于 2022-03-28 17:10:40
由于CentOS 7自带的防火墙管理工具是firewalld,
默认也没有安装iptables-services。所以,我们需要先关掉firewalld
systemctl stop firewalld
将它设置为开机不启动
systemctl disable firewalld
然后,安装iptables-services
yum -y install iptables-services
将它设置为开机启动
systemctl enable iptables.service
查询机器是否开启了路由转发功能
sysctl net.ipv4.ip_forward
如果其值为0,表示没开启路由转发,需要开启路由转发功能
如果其值为1,表示已经开启路由转发,则不再需要开启路由转发功能
开启路由转发功能
编辑/etc/sysctl.conf 这个文件
vim /etc/sysctl.conf
设置如下字段
net.ipv4.ip_forward = 1
使设置生效
sysctl -p
再查看一下,确保net.ipv4.ip_forward的值为1
[root@iZj6c262htpobd1pfkqlqgZ ~]# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
有两台机器
一台位于东京的vultr-tokyo: 108.61.246.21
一台位于新加坡的vultr-singapore: 139.180.184.172
我们的需求是:
tokyo的机器在8888端口提供http服务,访问singapore机器的8080端口时,将请求转发到提供http服务的tokyo机器。
首先,在tokyo机器上启动http服务,开放8888端口
iptables -A INPUT -p tcp --dport 8888 -j ACCEPT
然后,在浏览器那里试试能不能访问
curl http://108.61.246.21:8888
然后,在singapore机器上开放8080端口
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
编写转发规则
# DNAT,如果是访问8080端口的报文,则转发到108.61.246.21:8888,也就是tokyo机器上
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 108.61.246.21:8888
# SNAT,这个也是必须的,将源地址修改为NAT服务器的地址,不然发送给108.61.246.21的IP报文的源地址还是为客户端的地址,导致NAT服务器收不到应答包
# 注意:对于阿里云的专有网络VPC,它的网卡地址不是公网地址,而是类似172.26.XX.XX这样的,这时SNAT的--to-source选项不能写公网地址,要写实际的网址地址(即172.26.XX.XX)
iptables -t nat -A POSTROUTING -p tcp -d 108.61.246.21 --dport 8888 -j SNAT --to-source 139.180.184.172
保存并重启iptables
service iptables save
service iptables restart
在浏览器输入:http://139.180.184.172:8080/
则可以访问 108.61.246.21:8888上的http服务
[参考]
用国内nat主机中转你的垃圾vps流量,让你在高峰时段更稳定的科学上网
https://www.youtube.com/watch?v=qQej5kv868g
--更新于 2023-03-09 10:51:41