iptables端口转发

/ 0评 / 0

实际上很多人都知道端口转发,但是很多都是一键脚本,实际上也没有那么麻烦,我们很简单就能做到,重点是如何理解端口转发这个概念.

转发包含了TCP转发,UDP转发,最常用的TCP转发了吧,做堡垒机,目标服务器防火墙白名单机制之类的.

转发操作全程都在自己的机器上做就行.

转发就得打开转发功能,如果包含IPv6自己改改就行.

net.ipv4.ip_forward = 1

在转发之前,我们要先说下路由,他们的路径大致是这样的.

源地址发送数据--> {PREROUTING-->路由规则-->POSTROUTING} -->目的地址接收到数据

另外转发是附带SNAT作用的,所以就可以转换源地址了啊.

比如下面例子:

iptables -t nat -A PREROUTING -p tcp --dport 49022 -j DNAT --to-destination 63.223.9.40:6022

iptables -t nat -A POSTROUTING -p tcp -d 63.223.9.40 --dport 6022 -j SNAT --to-source 47.56.22.202

这样你访问47.56.22.202的49022端口,就相当于透明的访问了63.223.9.40的6022端口,这里只打通了TCP传输.

但是有一点要注意,如果你的机器是内网机器,比如说阿里云ECS什么的,47.56.22.202就应该替换为你的内网IP了,比如172.31.112.205这样的,不然是到达不了的,再由各种转发器来完成各种需求.

另外,只是转发单个端口,也太浪费了,还可以做负载均衡哦.

比如这样,就均分数据包到两台后端服务器,暴露了Web端口.

iptables -t nat -A PREROUTING -p tcp --dport 80 -m statistic --mode nth --every 2 --packet 0 -j DNAT --to-destination 199.19.104.1:8080

iptables -t nat -A PREROUTING -p tcp --dport 80 -m statistic --mode nth --every 1 --packet 0 -j DNAT --to-destination 199.19.104.2:8080



iptables -t nat -A POSTROUTING -p tcp -d 199.19.104.1 --dport 8080 -j SNAT --to-source 172.31.112.205

iptables -t nat -A POSTROUTING -p tcp -d 199.19.104.2 --dport 8080 -j SNAT --to-source 172.31.112.205

这个比较绿色环保,不用额外装软件的转发,总体来说还是不错的.