NAT(端口转发)是什么
在网络上发送的所有数据包都是有原地址和目标地址的, NAT 就是要对数据包的原地址或者目标地址 (或者端口) 进行修改的技术.
那为什么我们要修改 IP 地址呢? 在互联网中只能传送公网地址的数据包, 私有地址的数据包是无法传送的. 例如, 在 Wi-Fi 环境下看视频浏览网站的时候终端的 IP(私有地址, 手机, pad, 电脑发出来的所有数据包原地址基本都是私有地址). 为了能让数据包在互联网上传送, 必须要一个公网 IP 才行. 所以进行访问互联网的时候, 路由器会把所有的数据包的源地址转换成它的 WLAN 口的 IP 地址(这个就是公网 ip, 一般就是 ISP 分配的 IP). 这个转换的技术就是 NAT. 当所访问的服务器返回数据包时, 路由器会把所有数据包目标地址, 由它的 WLAN 口的 IP 地址, 改回内网的 IP 地址. 这样才能上进行上网的操作. 所以每天都在大量使用 NAT 技术.
使用 iptables 进行端口转发
1. 启用系统转发功能
vi /etc/sysctl.conf
将 net.ipv4.ip_forward=0
修改成 net.ipv4.ip_forward=1
编辑 sysctl 后如果需要马上生效需要
sysctl -p
2. 修改 iptables 命令
如果是同一个端口进行转发, 可以直接键入下面两跳命令:
iptables -t nat -A PREROUTING -p tcp --dport [端口号] -j DNAT --to-destination [目标 IP]
iptables -t nat -A PREROUTING -p udp --dport [端口号] -j DNAT --to-destination [目标 IP]
iptables -t nat -A POSTROUTING -p tcp -d [目标 IP] --dport [端口号] -j SNAT --to-source [本地服务器 IP]
iptables -t nat -A POSTROUTING -p udp -d [目标 IP] --dport [端口号] -j SNAT --to-source [本地服务器 IP]
如果是不同端口进行转发, 需要指定目标端口号和本地端口号:
iptables -t nat -A PREROUTING -p tcp -m tcp --dport [本地端口] -j DNAT --to-destination [目标服务器 IP]:[目标端口]
iptables -t nat -A PREROUTING -p udp -m udp --dport [本地端口] -j DNAT --to-destination [目标服务器 IP]:[目标端口]
iptables -t nat -A POSTROUTING -d [目标服务器 IP]/32 -p tcp -m tcp --dport [目标端口] -j SNAT --to-source [本地服务器 IP]
iptables -t nat -A POSTROUTING -d [目标服务器 IP]/32 -p udp -m udp --dport [目标端口] -j SNAT --to-source [本地服务器 IP]
3. 保存 iptables 并重启是配置生效
- service iptables save
- service iptables restart
4. 查看 iptables 配置
iptables -t nat -L
扩展:
多端口转发的方案 ( 将本地服务器的 50000~65535 转发至目标 IP 为 1.1.1.1 的 50000~65535 端口 ):
- iptables -t nat -A PREROUTING -p tcp -m tcp --dport 50000:65535 -j DNAT --to-destination 1.1.1.1
- iptables -t nat -A PREROUTING -p udp -m udp --dport 50000:65535 -j DNAT --to-destination 1.1.1.1
iptables -t nat -A POSTROUTING -d 1.1.1.1/32 -p tcp -m tcp --dport 50000:65535 -j SNAT --to-source [本地服务器 IP]
iptables -t nat -A POSTROUTING -d 1.1.1.1/32 -p udp -m udp --dport 50000:65535 -j SNAT --to-source [本地服务器 IP]
来源: https://www.qcloud.com/developer/article/1460118