![iptables端口使用两个接口将公共网络转发到专用网络](https://linux22.com/image/160981/iptables%E7%AB%AF%E5%8F%A3%E4%BD%BF%E7%94%A8%E4%B8%A4%E4%B8%AA%E6%8E%A5%E5%8F%A3%E5%B0%86%E5%85%AC%E5%85%B1%E7%BD%91%E7%BB%9C%E8%BD%AC%E5%8F%91%E5%88%B0%E4%B8%93%E7%94%A8%E7%BD%91%E7%BB%9C.png)
iptables 端口从公共接口上的传入连接转发到专用接口。
我想做以下事情(在kali linux中):
1.) 来自外部的传入连接到达公共接口(例如 wlan0、119.118.117.56:8080)
2.) 使用私有接口(例如 eth0、172.20.15.5)将 119.118.117.56:8080 转发到 172.20.15.9:443
3.) 获取从 172.20.15.9:443 到私有接口(eth0、172.20.15.5)的响应
4.) 将响应从私有接口(eth0、172.20.15.5)转发到公共接口(wlan0、119.118.117.56:8080),以将响应发送回公共接口上的传入连接
答案1
我们可以使用一条DNAT
规则来拦截传入数据包并将其重定向到内部 IP:
iptables -t nat -p tcp -A PREROUTING -j DNAT -d 119.118.117.56 --dport 8080 --to-dest 172.20.15.9:443
除非内部设备172.20.15.9使用172.20.15.5作为默认网关,否则我们需要伪装数据包:
iptables -t nat -A POSTROUTING -d 172.20.15.9 -j MASQUERADE
您还需要允许来自外部的转发(最初传入)连接:
iptables -I FORWARD -i wlan0 -p tcp -d 172.20.15.9 --dport 443 -j ACCEPT
并允许在内部接口上传入答案:
iptables -I FORWARD -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
另外,必须在内核中启用 ip_forwarding:
sysctl net.ipv4.ip_forward=1
要使此更改永久生效,/etc/sysctl.conf
请使用以下行进行编辑
net.ipv4.ip_forward=1