在网络上发送的所有数据包都是有原地址和目标地址的,NAT就是要对数据包的原地址或者目标地址(或者端口)进行修改的技术。
那为什么我们要修改IP地址呢?在互联网中只能传送公网地址的数据包,私有地址的数据包是无法传送的。例如,在WIFI环境下看视频浏览网站的时候终端的IP(私有地址,手机、pad、电脑发出来的所有数据包原地址基本都是私有地址)。为了能让数据包在互联网上传送,必须要一个公网IP才行。所以进行访问互联网的时候,路由器会把所有的数据包的源地址转换成它的WLAN口的IP地址(这个就是公网ip,一般就是ISP分配的IP)。这个转换的技术就是NAT。当所访问的服务器返回数据包时,路由器会把所有数据包目标地址,由它的WLAN口的IP地址,改回内网的IP地址。这样才能上进行上网的操作。所以每天都在大量使用NAT技术。
vi /etc/sysctl.conf
将 net.ipv4.ip_forward=0
修改成 net.ipv4.ip_forward=1
编辑sysctl后如果需要马上生效需要
sysctl -p
如果是同一个端口进行转发,可以直接键入下面两跳命令:
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]
service iptables save
service iptables restart
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]
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。