前言
SNAT是原地址转换,DNAT是目标地址转换。区分这两个功能可以简单的由服务的发起者是谁来区分,内部地址要访问公网上的服务时,内部地址会主动发起连接,将内部地址转换成公有ip。网关这个地址转换称为SNAT. 当内部需要对外提供服务时,外部发起主动连接,路由器或着防火墙的网关接收到这个连接,然后把连接转换到内部,此过程是由带公有ip的网关代替内部服务来接收外部的连接,然后在内部做地址转换,此转换称为DNAT.主要用于内部服务对外发布。
SNAT应用场景
当内部地址要访问公网上的服务时(如web访问),内部地址会主动发起连接,由路由器或者防火墙上的网关对内部地址做个地址转换,将内部地址的私有IP转换为公网的公有IP,网关的这个地址转换功能称为SNAT,主要用于内部共享IP访问外部网络。 一个IP地址做SNAT转换,一般可以让内网100到200台主机实现上网。
- 数据包从内网发送到公网时,SNAT会把数据包的源地址由私网IP转换成公网IP。
- 当相应的数据包从公网发送到内网时,会把数据包的目的地址由公网IP转换为私网IP。
- 当内网有多台主机访问外网时,SNAT在转换时会自动分配端口,不同内网主机会通过端口号进行区分。
SNAT配置
配置环境:
局域网各主机已正确设置IP地址、子网掩码、默认网关地址
Linux网关开启IP路由转发
配置SNAT策略,实现SNAT功能,将所有192.168.1.0这个网段内的ip的源地址改为12.0.0.254
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ens34 -j SNAT --to 12.0.0.254
或
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ens34 -j SNAT --to-source 12.0.0.50-12.0.0.100
-A POSTROUTING 指定POSTROUTING链
-s 192.168.1.0/24 源地址所处的网段(内网IP)
-o ens34 出站网卡
-j SNAT 使用SNAT功能
--to 12.0.0.254 外网IP
--to-source 12.0.0.2-12.0.0.10 外网地址池
非固定的公网IP地址(共享动态IP地址)
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ens34 -j MASQUERADE
DNAT应用场景
当内部地址需要提供对外服务时(如对外发布web网站),外部地址发起主动连接,由路由器或者防火墙上的网关接收这个连接,然后将连接转换到内部,此过程是由带有公网IP的网关替代内部服务来接收外部的连接,然后在内部将公网IP转换为私网IP,此转换功能称为DNAT,主要用于内部服务对外发布。
- 数据包从外网发送到内网时,DNAT会把数据包的目标地址由公网IP转换成私网IP。
- 当相应的数据包从内网发送到公网时,会把数据包的源地址由私网IP转换为公网IP。
- 客户机想访问服务器时,访问的是网关地址,由网关去找服务器的内网地址。
- 如果多台服务器使用同一个网关,那么通过不同的端口号来对应不同的服务器
DNAT配置
配置环境:
局域网的服务器能够访问Internet
网关的外网地址有正确的DNS解析记录
Linux网关开启IP路由转发
把从ens34进来的要访问web服务的数据包目的地址转换为 192.168.1.100
iptables -t nat -A PREROUTING -i ens34 -d 12.0.0.254 -p tcp --dport 80 -j DNAT --to 192.168.1.100
或
iptables -t nat -A PREROUTING -i ens34 -d 12.0.0.254 -p tcp --dport 80 -j DNAT --to 192.168.1.50-192.168.1.100
-A PREROUTING 修改目标地址的链
-i ens33 入站网卡
-d 12.0.0.254 数据包的目的地址
-p tcp --dport 80 数据包的目的端口
-j DNAT 使用DNAT功能
--to 192.168.1.100 内网服务器IP
iptables与dns分离解析
实验拓扑图
实验要求:
web服务器在内网中,提供http服务。
要求内网中的主机能够通过www.apple.com 访问该web服务。
外网的主机能够通过www.apple.com 访问该web服务。
实验配置
网关服务器配置
关闭firewalld和selinux。开启路由转发功能。
iptables配置
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ens34 -j SNAT --to 12.0.0.254
iptables -t nat -A PREROUTING -i ens34 -d 12.0.0.254 -p tcp -j DNAT --to 192.168.1.100
配置dns分离解析
配置主配置文件vim /etc/named.conf
配置区域配置文件vim /etc/named.rfc1912.zones
view "lan" {
match-clients {192.168.1.0/24;}; 内网解析网段
zone "apple.com" IN { 域名
type master;
file "apple.com.zone.lan";
};
zone "." IN {
type hint;
file "named.ca";
};
};
view "wan" {
match-clients {any;}; 外网解析
zone "apple.com" IN { 域名
type master;
file "apple.com.zone.wan";
};
};
将view之外的zones都删除
配置区域数据配置文件
cd /var/named/
cp -p named.localhost apple.com.zone.lan
cp -p named.localhost apple.com.zone.wan
vim apple.com.zone.lan 编辑内网解析文件
vim apple.com.zone.wan 编辑外网解析文件
systemctl start named
内网web服务器配置
关闭firewalld防火墙
编辑网卡配置
安装httpd软件包,写一个网页,启动httpd服务。本地验证一下能否打开该网页。
外网主机配置
关闭firewalld防火墙
编辑网卡服务
实验结果
内外网主机都能访问并解析www.apple.com 服务
tcpdump----linux抓包
tcpdump 是一个很常用的网络包分析工具,可以用来显示通过网络传输到本系统的 TCP/IP 以及其他网络的数据包。tcpdump 使用 libpcap 库来抓取网络报,这个库在几乎在所有的 Linux/Unix 中都有。在 Windows 中我们通常会使用 Wireshark 进行图形化操作相当便捷,然而在 Linux 环境中如何巧妙应用 tcpdump 的命令来操作提升效率就显得尤为重要。在本文中,我们将会通过一些实例来演示如何使用 tcpdump 命令。
tcpdump 是一款灵活、功能强大的抓包工具,能有效地帮助排查网络故障问题
tcpdump tcp -i ens33 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap
tcp(ip、icmp、arp、rarp) 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型。
-i ens33 只抓经过接口ens33的包。
-t 不显示时间戳
-s 0 抓取数据包时默认抓取长度为68字节。加上(-s 0)后可以抓到完整的数据包。
-c 100 只抓取100个数据包。
dst port ! 22 不抓取目标端口是22的数据包。
src net 192.168.1.0/24 数据包的源网络地址为192.168.1.0/24。Net:网段,host:主机。
-w ./target.cap 保存成cap文件,方便用ethereal (即wireshark)分析。