实际上很多人都知道端口转发,但是很多都是一键脚本,实际上也没有那么麻烦,我们很简单就能做到,重点是如何理解端口转发这个概念.
转发包含了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
这个比较绿色环保,不用额外装软件的转发,总体来说还是不错的.