- NAT
- NAT概述
- 地址转换出现的背景
- NAT的工作原理
- NAT实现方式
- NAT的术语与转换表
- NAT包含4类地址
- NAT实现方法的工作过程
- 静态转换和动态转换
- PAT
- NAT的特性
- NAT的优点
- NAT的缺点
- SNAT
- SNAT策略概述
- SNAT策略的典型应用环境
- SNAT策略的原理
- SNAT策略的应用环境
- 未使用SNAT策略时的情况
- 在网关中使用SNAT策略以后
- SNAT策略的应用
- 开启网关主机的路由转发功能
- 添加使用SNAT策略的防火墙规则
- 如何开启路由转发功能:
- #开启snat功能
- DNAT
- DNAT策略概述
- DNAT策略的典型应用环境
- DNAT策略的原理
- DNAT策略的原理
- DNAT策略的应用
- 确认已开启网关的路由转发功能
- 添加使用DNAT策略的防火墙规则
- DNAT和SNAT 的区别?
由于互联网的发展,导致ipv4地址不足,每一个设备分配一个IP地址,根本不够
NAT的工作原理Network Address Translation,网络地址转换
私有IP《-----》公有IP
所有的局域网都可以使用相同的公有地址
NAT实现方式- 静态转换(Static Translation)
- 动态转换(Dynamic Translation)
- 端口多路复用(Port Address Translation,PAT)
NAT的转换条目
- 简单转换条目
- 扩展转换条目
节省公有合法IP地址
处理地址重叠
增强灵活性
安全性(出去的时候修改了源IP地址,导致外网的用户不知道你的内网的IP是多少)
延迟增大
配置和维护的复杂性
不支持某些应用,可以通过静态NAT映射来避免
局域网主机共享单个公网IP地址接入Internet
SNAT策略的原理源地址转换,Source Network Address Translation
修改数据包的源IP地址
前提条件
局域网各主机正确设置IP地址/子网掩码
局域网各主机正确设置默认网关地址/dns服务器地址
推荐实现步骤
- 开启网关主机的路由转发功能
- 添加使用SNAT策略的防火墙规则
规则示例:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24
-o ens33 -j SNAT --to-source 218.29.30.31
-t nat 在nat表的里 table
-A POSTROUTING 在nat表的POSTROUTING 链位置追加规则 append
-s 192.168.20.0/24 源ip地址来自192.168.20.0/24网段
-o ens33 数据从ens33接口出去 output-interface
-j SNAT 告诉内核采取SNAT策略,修改ip包的源ip地址
–to-source 192.168.2.130 告诉内核修改ip包的源ip地址为192.168.2.130
1.临时开启
echo 1 >/proc/sys/net/ipv4/ip_forward [root@sc-mysql ~]# cat /proc/sys/net/ipv4/ip_forward 0 [root@sc-mysql ~]#
0表示内核里的路由转发功能是关闭的
1 开启的
[root@sc-mysql ~]# echo 1 >/proc/sys/net/ipv4/ip_forward
[root@sc-mysql ~]# cat /proc/sys/net/ipv4/ip_forward
1
[root@sc-mysql ~]#
2.永久开启
[root@sc-mysql ~]# vim /etc/sysctl.conf net.ipv4.ip_forward=1 -->添加配置,开启路由转发功能 [root@sc-mysql ~]# [root@sc-mysql ~]# sysctl -p 让内核重新加载新的配置,开启路由转发功能 net.ipv4.ip_forward = 1 [root@sc-mysql ~]# net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_nonlocal_bind = 1 vm.swappiness=0 net.core.somaxconn=1024 net.ipv4.tcp_max_tw_buckets=5000 net.ipv4.tcp_max_syn_backlog=1024#开启snat功能
iptables -t nat -A POSTROUTING -s 192.168.20.0/24 -o ens33 -j SNAT --to-source 192.168.2.130
iptables是linux内部的一个防火墙工具
-t nat 在nat表的里 table
-A POSTROUTING 在nat表的POSTROUTING 链位置追加规则 append
-s 192.168.20.0/24 源ip地址来自192.168.20.0/24网段
-o ens33 数据从ens33接口出去 output-interface
-j SNAT 告诉内核采取SNAT策略,修改ip包的源ip地址
–to-source 192.168.2.130 告诉内核修改ip包的源ip地址为192.168.2.130
iptables -L 查看filter表里的规则
iptables -t nat -L 查看nat表里的规则
[root@sc-router 89]# cat snat.sh #!/bin/bash #开启路由功能 echo 1 >/proc/sys/net/ipv4/ip_forward #关闭防火墙 service firewalld stop #清空防火墙里的filter表的规则 iptables -t filter -F #清空防火墙里的nat表的规则 iptables -t nat -F #开启snat功能 iptables -t nat -A POSTROUTING -s 192.168.20.0/24 -o ens33 -j SNAT --to-source 192.168.2.130
[root@sc-router 89]# bash snat.sh 执行脚本 [root@sc-router 89]# iptables -L -t nat -n 查看nat表里的规则 Chain PREROUTING (policy ACCEPT) target prot opt source destination Chain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination SNAT all -- 192.168.20.0/24 0.0.0.0/0 to:192.168.2.130 [root@sc-router 89]# [root@sc-router 89]# ps aux|grep dhcp root 2342 0.0 0.0 112824 988 pts/0 S+ 16:35 0:00 grep --color=auto dhcp [root@sc-router 89]# systemctl status dhcpd 查看dhcpd服务的状态 ● dhcpd.service - DHCPv4 Server Daemon Loaded: loaded (/usr/lib/systemd/system/dhcpd.service; disabled; vendor preset: disabled) Active: inactive (dead) Docs: man:dhcpd(8) man:dhcpd.conf(5) [root@sc-router 89]# service dhcpd start 启动dhcpd服务 Redirecting to /bin/systemctl start dhcpd.service [root@sc-router 89]# systemctl enable dhcpd 设置dhcpd服务开机启动 Created symlink from /etc/systemd/system/multi-user.target.wants/dhcpd.service to /usr/lib/systemd/system/dhcpd.service. [root@sc-router 89]#DNAT DNAT策略概述 DNAT策略的典型应用环境
在Internet中发布位于企业局域网内的服务器—在互联网上的机器想访问局域网内的服务器
DNAT策略的原理目标地址转换,Destination Network Address Translation
修改数据包的目标IP地址
中间防火墙服务器(网关服务器)上不需要web、nginx等服务,它只是做了转发,相当于一个中介
DNAT策略的原理在网关中使用DNAT策略发布内网服务器
通过不同的端口访问不同的服务器
前提条件
局域网的Web服务器正确设置了IP地址/子网掩码
局域网的Web服务器正确设置了默认网关地址
推荐实现步骤
- 确认已开启网关的路由转发功能
- 添加使用DNAT策略的防火墙规则
规则示例:
iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.6[root@sc-router 89]# cat snat_dnat.sh #!/bin/bash #开启路由功能 echo 1 >/proc/sys/net/ipv4/ip_forward #关闭防火墙 service firewalld stop #清空防火墙里的filter表的规则 iptables -t filter -F #清空防火墙里的nat表的规则 iptables -t nat -F #开启snat功能 iptables -t nat -A POSTROUTING -s 192.168.20.0/24 -o ens33 -j SNAT --to-source 192.168.2.130 #开启dnat功能,发布web服务器 iptables -t nat -A PREROUTING -i ens33 -d 192.168.2.130 -p tcp --dport 80 -j DNAT --to-destination 192.168.20.100:80 #开启dnat功能,发布ssh服务器(使用xshell进行验证) iptables -t nat -A PREROUTING -i ens33 -d 192.168.2.130 -p tcp --dport 2233 -j DNAT --to-destination 192.168.20.103:22 #开启dnat功能,发布mysql服务器 iptables -t nat -A PREROUTING -i ens33 -d 192.168.2.130 -p tcp --dport 3306 -j DNAT --to-destination 192.168.20.103:3306
[root@sc-router 89]# [root@sc-router 89]# iptables -L -t nat -n Chain PREROUTING (policy ACCEPT) target prot opt source destination DNAT tcp -- 0.0.0.0/0 192.168.2.130 tcp dpt:80 to:192.168.20.100:80 DNAT tcp -- 0.0.0.0/0 192.168.2.130 tcp dpt:2233 to:192.168.20.103:22 DNAT tcp -- 0.0.0.0/0 192.168.2.130 tcp dpt:3306 to:192.168.20.103:3306 Chain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination SNAT all -- 192.168.20.0/24 0.0.0.0/0 to:192.168.2.130 [root@sc-router 89]#
dnat和snat可以共存
解决的问题不一样
IP包的修改也不一样