一、简述DNS服务器原理,并搭建主-辅服务器。
DNS服务器原理流程图:
主辅DNS服务器搭建
主辅DNS特性:
- 主服务器的解析文件中必须要有一条NS记录指向辅DNS服务器
- 辅服务器只要配置定义区域,不用提供解析文件
- 主服务器需要允许辅服务器抓取主服务器的解析文件
- 主辅服务器之间必须保持时间一致
- bind程序的版本应该保持一致
环境:
系统/功能 | ip |
---|
centos 7.8/主 | 192.168.116.145 | centos 7.8/备 | 192.168.116.146 | 网站服务器 | 192.168.116.147 | 客户端 | 192.168.116.130 | 网站域名 | www.test.ioo |
一、主服务器配置:
yum install -y bind bind-utils 安装DNS服务
开启DNS允许被访问
vi /etc/named.conf
listen-on port 53 { 192.168.116.145; };
allow-query { any; };
allow-transfer { 192.168.116.146; };
添加正向解析文件名和域名绑定(访问域名得到网站)
vi /etc/named.rfc1912.zones
zone "test.ioo" {
type master;
file "test.ioo.zone";
};
添加正向解析文件的指针
cd /var/named/
cp -a named.localhost test.ioo.zone 复制模板文件,如果不复制,需要把文件的使用者和组名改为一致即可
vi test.ioo.zone
$TTL 1D
@ IN SOA master admin.test.ioo. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
NS slave
master A 192.168.116.145
slave A 192.168.116.146
www A 192.168.116.147
添加反向解析文件名和域名绑定(直接访问IP可以得到网站)
vi /etc/named.rfc1912.zones
IP必须倒着写,145是指针,所以不用写,写192.168.116即可
zone "116.168.192.in-addr.arpa"{
type master;
file "192.168.116.145.zone";
};
添加反向解析文件的指针
cd /var/named/
cp -p named.localhost 192.168.116.145.zone 模板一致,都可以复制
vi 192.168.116.145.zone
$TTL 1D
@ IN SOA master admin.test.ioo. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master.test.ioo.
147 PTR www.test.ioo.
ls -l 文件权限必须是root为属主,named为属组
启动服务
named-checkconf 检查文件语法
systemctl start named 启动服务
ss -tunl 确认udp和tcp的53端口都已经监听
二、辅服务器配置:
yum install -y bind bind-utils 安装服务
设置DNS配置
vi /etc/named.conf
listen-on port 53 { 192.168.116.146; };
allow-query { any; };
allow-transfer { none; };
配置正向和反向解析文件名和主DNS绑定
vi /etc/named.rfc1912.zones
zone "test.ioo" {
type slave;
masters {192.168.116.145;};
file "slaves/test.ioo.slave";
};
zone "116.168.192.in-addr.arpa"{
type slave;
masters {192.168.116.145;};
file "slaves/192.168.116.145.slave";
};
启动服务
named-checkconf 检查文件语法
systemctl start named 启动服务
ss -tunl 确认udp和tcp的53端口都已经监听
确认主DNS的解析文件同步到本地目录下
ll /var/named/slaves/
三、网站服务器搭建
yum install -y httpd 安装服务
echo "web 192.168.116.147" >/var/www/html/index.html 创建网页
systemctl start httpd 启动服务
ss -tnl 确认端口打开
四、客户端配置
yum install -y bind-utils 安装DNS解析工具
设置DNS地址为主DNS的地址
vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=1343ea28-e2cd-4f53-b545-5c6bbd7bcf07
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.116.130
NETMASK=255.255.255.0
GATEWAY=192.168.116.2
DNS1=192.168.116.145
systemctl restart network 重启服务
测试网站访问
curl http://www.test.ioo 正向解析域名能访问到网站
curl http://192.168.116.147 反向解析IP能访问到网站
工具解析
dig www.test.ioo 解析域名,不要加http
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.7 <<>> www.test.ioo
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7910
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.test.ioo. IN A
;; ANSWER SECTION:
www.test.ioo. 86400 IN A 192.168.116.147 实际解析的域名和IP
;; AUTHORITY SECTION:
test.ioo. 86400 IN NS slave.test.ioo. 主DNS服务器的名字
test.ioo. 86400 IN NS master.test.ioo. 辅助DNS服务器的名字
;; ADDITIONAL SECTION:
master.test.ioo. 86400 IN A 192.168.116.145 主DNS服务器对应的IP地址
slave.test.ioo. 86400 IN A 192.168.116.146 辅DNS服务器对应的IP地址
;; Query time: 0 msec 查询延迟
;; SERVER: 192.168.116.145
;; WHEN: 日 9月 05 15:01:37 CST 2021
;; MSG SIZE rcvd: 130
将主DNS服务器关闭服务,测试辅DNS服务器是否能正常解析
systemctl stop named
把客户端的DNS改为辅的DNS服务测试
vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=1343ea28-e2cd-4f53-b545-5c6bbd7bcf07
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.116.130
NETMASK=255.255.255.0
GATEWAY=192.168.116.2
DNS1=192.168.116.146
systemctl restart network 重启网卡
再次解析
dig www.test.ioo 可以看到辅DNS服务器解析成功
二、搭建并实现智能DNS(CDN原理)
正常网站访问都是从本地访问到网站的服务器上 如:广东客户端访问北京公司的网站服务器
需求:要想让网站页面加载更快
最优选择:直接在广东这里放网站服务器
次优选择:CDN加速
- 因为地域和运营成本的限制,所以有了CDN提供商。
- CDN提供商就是在全国甚至全球不同地方都存放CDN服务器
实现方式:
- 北京的网站服务器的公司只要购买了CDN提供商提供的加速服务,那么CDN提供商的服务器就会在客户端最近的CDN服务器上下载最新的北京网站服务器的内容。
- 客户端访问因为智能选择最优DNS,就会自动访问到最近的CDN服务器提供的网站内容,从而提高用户体验。
测试:
没使用CDN加速的网站
dig www.tsinghua.edu.cn
可以看到IP的归属地是北京市 166.111.4.100 路由图查看
tracert www.tsinghua.edu.cn
可以看到走了14个路由点才到真实的IP地址那里
访问使用CDN加速后的网站
dig www.mi.com
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.7 <<>> www.mi.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44277
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 5, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; MBZ: 0x0005, udp: 4096
;; QUESTION SECTION:
;www.mi.com. IN A
;; ANSWER SECTION:
www.mi.com. 5 IN CNAME www.mi.com.mgslb.com.
www.mi.com.mgslb.com. 5 IN CNAME www.mi.com.wscdns.com.
www.mi.com.wscdns.com. 5 IN A 113.96.132.64
;; AUTHORITY SECTION:
wscdns.com. 5 IN NS dns1.wscdns.org.
wscdns.com. 5 IN NS dns4.wscdns.info.
wscdns.com. 5 IN NS dns5.cdn30.org.
wscdns.com. 5 IN NS dns3.wscdns.org.
wscdns.com. 5 IN NS dns2.wscdns.info.
;; Query time: 5 msec
;; SERVER: 192.168.116.2
;; WHEN: 日 9月 05 15:38:55 CST 2021
;; MSG SIZE rcvd: 240
可以看到IP的归属地是江门市 113.96.132.64
tracert www.mi.com 可以看到走了9个路由就到了
原理: 没有使用CDN加速的连接方式 使用CDN加速后的连接方式
智能DNS(CDN加速)的特性:
- 减少中间路由节点,降低带宽
- 解决用户访问量过大造成的服务器超载问题
- 将网站内容放在离客户端较近的区域,加速网站内容的加载,用户体验更好
- 解决网站服务器分布不均的问题,降低运营成本
- 隐藏真实网站服务器的IP,加强安全性
环境搭建
系统/功能 | IP |
---|
centos 7.8/DNS服务器 | 北京IP:192.168.116.145;上海IP:10.0.0.145 | centos 7.8/北京网站服务器 | 北京IP:192.168.116.146 | centos 7.8/上海网站服务器 | 上海IP:10.0.0.146 | centos 7.8/北京客户端 | 北京IP:192.168.116.130 | centos 7.8/上海客户端 | 北京IP:10.0.0.130 | centos 7.8/网站域名 | www.test.ioo |
DNS服务器配置:
yum install -y bind bind-utils 安装服务
ip a add 10.0.0.145/24 dev ens33:0 临时添加多一个IP
vi /etc/named.conf
acl beijingnet {
192.168.116.0/24;
};
acl shanghainet {
10.0.0.0/24;
};
options {
listen-on port 53 { 192.168.116.145;10.0.0.145; };
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { any; };
allow-transfer {none;};
/*
- If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
- If you are building a RECURSIVE (caching) DNS server, you need to enable
recursion.
- If your recursive DNS server has a public IP address, you MUST enable access
control to limit queries to your legitimate users. Failing to do so will
cause your server to become part of large scale DNS amplification
attacks. Implementing BCP38 within your network would greatly
reduce such attack surface
*/
recursion yes;
dnssec-enable yes;
dnssec-validation yes;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.root.key";
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
view beijingview {
match-clients { beijingnet;};
include "/etc/named.rfc1912.zones.bj";
};
view shanghaiview {
match-clients { shanghainet;};
include "/etc/named.rfc1912.zones.sh";
};
配置正向区域文件
cp -a /etc/named.rfc1912.zones /etc/named.rfc1912.zones.bj
cp -a /etc/named.rfc1912.zones /etc/named.rfc1912.zones.sh
vi /etc/named.rfc1912.zones.bj 配置北京的区域解析文件
zone "." IN {
type hint;
file "named.ca";
};
zone "test.ioo" {
type master;
file "test.ioo.zone.bj";
};
vi /etc/named.rfc1912.zones.sh 配置上海的区域解析文件
zone "." IN {
type hint;
file "named.ca";
};
zone "test.ioo" {
type master;
file "test.ioo.zone.sh";
};
配置正向解析文件
cd /var/named/
cp -a named.localhost test.ioo.zone.bj
cp -a named.localhost test.ioo.zone.sh
vi test.ioo.zone.bj 配置北京的正向区域解析文件
$TTL 1D
@ IN SOA bjmaster admin.test.ioo. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS bjmaster
bjmaster NS 192.168.116.145
www A 192.168.116.146
vi test.ioo.zone.sh 配置上海的正向解析文件
$TTL 1D
@ IN SOA shmaster admin.test.ioo. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS shmaster
shmaster NS 10.0.0.145
www A 10.0.0.146
配置反向区域文件
vi /etc/named.rfc1912.zones.bj
zone "116.168.192.in-addr.arpa"{
type master;
file "192.168.116.145.zone.bj";
};
vi /etc/named.rfc1912.zones.sh
zone "0.0.10.in-addr.arpa"{
type master;
file "10.0.0.145.zone.sh";
};
配置反向解析文件
cd /var/named/
cp -a named.localhost 192.168.116.145.zone.bj
cp -a named.localhost 10.0.0.145.zone.sh
vi 192.168.116.145.zone.bj 配置北京的反向区域解析文件
$TTL 1D
@ IN SOA bjmaster admin.test.ioo. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS bjmaster.test.ioo.
146 PTR www.test.ioo.
vi 10.0.0.145.zone.sh 配置上海的反向区域解析文件
$TTL 1D
@ IN SOA shmaster admin.test.ioo. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS shmaster.test.ioo.
145 PTR www.test.ioo.
named-checkconf 检查语法
systemctl start named 启动服务
ss -tunl 查看端口
北京网站服务器配置
yum install -y httpd
网页内容正常访问都是一样的,不会改变,测试用才这样做
echo "beijing-192.168.116.146">/var/www/html/index.html
systemctl start httpd
上海网站服务器配置
yum install -y httpd
网页内容正常访问都是一样的,不会改变,测试用才这样做
echo "shanghai-10.0.0.146">/var/www/html/index.html
systemctl start httpd
ip a add 10.0.0.146/24 dev ens33:0 只有192网段的话,可以添加ip作为网站
ping 10.0.0.145 和DNS服务器能通
北京客户端配置
yum install -y bind-utils 安装工具
配置DNS地址
vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=1343ea28-e2cd-4f53-b545-5c6bbd7bcf07
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.116.130
NETMASK=255.255.255.0
GATEWAY=192.168.116.2
DNS1=192.168.116.145
systemctl restart network 重启网卡
访问测试
curl http://www.test.ioo
curl 192.168.116.146
dig www.test.ioo 看到解析的IP为192.168.116.146
上海客户端测试
yum install -y bind-utils 安装工具
配置IP
vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=1343ea28-e2cd-4f53-b545-5c6bbd7bcf07
DEVICE=ens33
ONBOOT=yes
IPADDR=10.0.0.130
NETMASK=255.255.255.0
DNS1=10.0.0.145
systemctl restart network 重启网卡
重启后,可以通过虚拟机界面测试,也可以从DNS服务器上远程IP过去测试
curl http://www.test.ioo
curl http://10.0.0.146
dig www.test.ioo 查看解析的IP为10.0.0.146
三、使用iptable实现: 放行ssh,telnet, ftp, web服务80端口,其他端口服务全部拒绝
ssh服务器端口:22 telnet服务器端口:23 ftp服务器端口:21 web服务器端口:80
服务器配置
yum install -y telnet telnet-server httpd ftp vsftpd mariadb-server 安装服务
echo web>/var/www/html/index.html
systemctl start httpd
systemctl start telnet.socket
systemctl start vsftpd
systemctl start mariadb 其他端口,3306
ss -tnl
客户端访问测试
yum install -y nmap
nmap -p21,22,23,80,3306 192.168.116.145 可以看到端口都打开,可以访问
curl 192.168.116.145
ssh 192.168.116.145
服务器配置iptables
iptables -A INPUT -p tcp -m multiport --dports 21,22,23,80 -j ACCEPT
iptables -I INPUT 2 -j DROP
客户端再访问
nmap -p21,22,23,80,3306 192.168.116.145 可以看到3306端口无法访问了
curl 192.168.116.145
ssh 192.168.116.145
四、NAT原理总结
NAT作用:
- 减少IP地址的使用
- 将不同网络段进行拆分隔离,加强局域网的安全性
在linux系统中,NAT的实现分为下面类型:
-
SNAT:源地址转换 ,支持POSTROUTING, INPUT规则链,方式为修改请求报文的源地址,把局域网内的地址转换为统一的外网地址访问外部网络。 -
DNAT:目标地址转换,支持PREROUTING ,OUTPUT规则链,方式为修改请求报文中的目标地址,外部网络访问内部网络的统一出口地址,内部网络统一出口转换目标IP为内部网络的IP,然后内部网络返回信息给出口地址。 -
PNAT: 端口地址转换,支持PREROUTING,OUTPUT规则链,方式为修改请求报文中的目标IP的目标端口,外部网络访问内部网路的统一出口地址和端口,目标IP的主机将目标端口修改为同个目标主机的另外一个端口上。
五、iptables实现SNAT和DNAT,并对规则持久保存。
2个模式初始环境配置
拓扑图:
系统/功能 | IP |
---|
centos 7.8/路由服务器 | 对外IP:192.168.116.145;对内IP:10.0.0.1 | centos 7.8/后台服务器1 | 10.0.0.101 | centos 7.8/后台服务器2 | 10.0.0.102 | centos 7.8/客户端 | 192.168.116.130 |
后台服务器1配置: 先设置为nat模式,下载http和抓包工具
yum install -y httpd tcpdump 安装服务
echo 10.0.0.101>/var/www/html/index.html
systemctl enable httpd
修改为内网IP
vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=a182d975-69eb-449a-a2ef-99edbab555b2
DEVICE=ens33
ONBOOT=yes
IPADDR=10.0.0.101
NETMASK=255.255.255.0
GATEWAY=10.0.0.1
shutdown now 关机
虚拟机设置为主机模式
后台服务器2配置: 先设置为nat模式,下载http
yum install -y httpd tcpdump
echo 10.0.0.102>/var/www/html/index.html
systemctl enable httpd
修改为内网IP
vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=52757ed1-496a-45d0-a25d-cd4d7d4526fa
DEVICE=ens33
ONBOOT=yes
IPADDR=10.0.0.102
NETMASK=255.255.255.0
GATEWAY=10.0.0.1
shutdown now 关机
虚拟机设置为主机模式 路由服务器配置(需要有2张网卡) 先设置为nat模式,下载服务
yum install -y tcpdump 安装抓包工具
vi /etc/sysconfig/network-scripts/ifcfg-ens33 配置网卡1对接外网
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=7b636dc1-fa52-4fc5-a424-e8cd83fa0bfd
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.116.145
NETMASK=255.255.255.0
vi /etc/sysconfig/network-scripts/ifcfg-ens34 配置网卡2对接内网
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens34
UUID=9de44ead-9df5-46bb-bb51-bbbb041f5976
DEVICE=ens34
ONBOOT=yes
IPADDR=10.0.0.1
NETMASK=255.255.255.0
开启路由转发
vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
shutdown now 关机
设置网卡1为nat模式,对接外网,网卡2为主机模式,对接内网
SNAT源地址转化(内网访问外网)
路由服务器没做iptables策略前
- 后台服务器1测试能否出外网到192.168.116.130这个客户端
ping 192.168.116.130 到外网不通
ping 10.0.0.1 到内网能通
- 路由器访问网站测试,内网网站访问都能使用
curl http://10.0.0.101
curl http://10.0.0.102
- 客户端访问网站测试
客户端属于外网,所以访问不了内网的网站
curl http://192.168.116.145
curl http://10.0.0.101
curl http://10.0.0.102
路由服务器配置NAT转换
只要不是到10.0.0.0/24网段的IP都作转换外网的出口地址,也就是192.168.116.145
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 ! -d 10.0.0.0/24 -j MASQUERADE
iptables -t nat -L
在后台服务器1再次测试,从内网到外网能访问
ping 192.168.116.130 到外网能通了
SNAT抓包分析
- 后台服务器1发起对客户端icmp,也就是ping连接
- 路由服务器把后台服务器1的报文的源地址10.0.0.101改为192.168.116.145
- 路由器将报文发给客户端192.168.116.130
后台服务器1进行连接
tcpdump -i ens33 -nn icmp
21:24:51.788338 IP 10.0.0.101 > 192.168.116.130: ICMP echo request, id 1331, seq 1, length 64
可以看到后台服务器1发起icmp时,数据包的源地址都是10.0.0.101,为后台服务器1的真实地址
客户端192.168.116.130抓包
tcpdump -i ens33 -nn icmp
可以看到的是
21:24:52.118318 IP 192.168.116.145 > 192.168.116.130: ICMP echo request, id 1331, seq 1, length 64
只显示路由器的IP和客户端进行icmp连接,证明经过路由器后,内网的后台服务器1的IP地址被转换了,也就是10.0.0.101被路由服务器转换为192.168.116.145
DNAT:目标地址转换(外网访问内网)
路由服务器配置:
iptables -t nat -F 清空上面做的NAT策略
iptables -t nat -L
设置DNAT策略
iptables -t nat -A PREROUTING -d 192.168.116.145 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.101
iptables -t nat -L
客户端访问网站
curl http://192.168.116.145 路由服务器做了NAT,所以能访问到内网的网站
curl http://10.0.0.101 外网实际到达不了内网,需要路由服务器做NAT
curl http://10.0.0.102 外网实际到达不了内网,需要路由服务器做NAT
DNAT抓包分析
- 客户端请求路由服务器192.168.116.145的80端口
- 路由服务器把请求报文的目标IP从192.168.116.145改为10.0.0.101,然后转换到后台服务器1
- 后台服务器1(10.0.0.101)把网站内容返回给路由服务器
- 路由服务器把网站内容返回客户端
客户端抓包
tcpdump -i ens33 -nn host 192.168.116.145
192.168.116.130.37518 > 192.168.116.145.80: Flags [S], seq 84549403, win 29200, options [mss 1460,sackOK,TS val 4878404 ecr 0,nop,wscale 7], length 0
可以看到客户端一直都是跟路由服务器进行连接
后台服务器1进行抓包
tcpdump -i ens33 -nn host 192.168.116.130
192.168.116.130.37518 > 10.0.0.101.80: Flags [S], seq 84549403, win 29200, options [mss 1460,sackOK,TS val 4878404 ecr 0,nop,wscale 7], length 0
可以看到客户端原本到192.168.116.145的80端口的请求变成了到后台服务器1的10.0.0.101
也就是说路由服务器把目标IP修改了
|