iptables 实现端口转发
共计 962 个字符,预计需要花费 3 分钟才能阅读完成。
除了 SSH 隧道本地转发,其实可以用 iptables 进行端口转发。
以下在开启了转发功能和默认接收所有流量的情况下进行,看机器有没有开启转发参考 Linux 开启 ipv4 转发的几种方式。
1. 情况一
情况一:接受请求的网卡和转发请求的网卡是一张网卡。
现假设网络情况如下,201 机器上开放了 8080 端口的 web 服务,客户端想要访问,但网络并不通(可以认为是添加了某条路由规则导致不通)。
/>
想要访问 203 的 web 服务,这时候应该在 203 机器上配置端口转发,代码如下:
# 进行目的地址转换
iptables -t nat -A PREROUTING -d 172.21.9.203 -p tcp --dport 1080 -j DNAT --to-destination 172.21.9.201:8080
# 进行源地址转换
iptables -t nat -A POSTROUTING -d 172.21.9.201 -p tcp --dport 8080 -j SNAT --to 172.21.9.203
第一条规则进行目的地址转换,目的是告诉机器,即使访问本机 1080 端口,数据包也不是给自己的,需要将数据包发送到 201 机器的 8080 端口。
如果不配置第二条规则,数据包能被 201 机器接收到,但是它并不知道怎么返回。第二条规则进行源地址转换,将本来源地址 172.20.2.114
修改为 172.21.9.203
,这样 201 机器就知道将数据传输给 203 机器,再由 203 机器进行返回给客户端。
2. 情况二
情况二:接受请求的网卡和转发请求的网卡不是一张网卡。
现网络情况如下,基本是一样的网络情况,但是转发的机器有两张网卡。
/>
这里和前面的区别就是在源地址转换时,需要填写最终目的机器数据能到达的 ip。
# 进行目的地址转换
iptables -t nat -A PREROUTING -d 192.168.1.200 -p tcp --dport 1080 -j DNAT --to-destination 192.168.5.22:8080
# 进行源地址转换
iptables -t nat -A POSTROUTING -d 192.168.5.22 -p tcp --dport 8080 -j SNAT --to 192.168.5.3
注意这里的第二条规则,填写的是 192.168.5.3
而不是 192.168.1.200
,因为 22 机器也不知道 192.168.1.200
怎么去。
提醒:本文发布于596天前,文中所关联的信息可能已发生改变,请知悉!
Tips:清朝云网络工作室