iptables及智能DNS

Posted 落阳٩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iptables及智能DNS相关的知识,希望对你有一定的参考价值。

DNS

工作原理:DNS系统采用递归查询请求的方式来响应用户的查询
1、客户端首先向首选域名服务器查询
2、首选域名服务器检查本地资源记录,如果存在则作权威回答,如果不存在,则检查本地缓存,如果有记录则直接返回结果。若本地资源记录和缓存记录都不存在,则向根域名服务器查询。
3、根域名服务器返回相应顶级域的权威域名服务器的地址,首选域名服务器继续向该顶级权威域名服务器查询。
4、顶级权威域名服务器返回次级域的权威域名服务器地址,首选域名服务器如此迭代查询,直到得到对查询域名的权威回答,保存在本地缓存中并返回给客户端,完成此次查询。

DNS的查询与解析

DNS的查询分为俩个类型

递归查询:一般客户机和本地DNS服务器之间属于递归查询,即当客户机向DNS服务器发出请求后, 若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到最终的肯定或否定的结 果后转交给客户机。此查询的源和目标保持不变,为了查询结果只需要发起一次查询

迭代查询:一般情况下(有例外)本地的DNS服务器向其它DNS服务器的查询属于迭代查询,如:若对 方不能返回权威的结果,则它会向下一个DNS服务器(参考前一个DNS服务器返回的结果)再次发起 进行查询,直到返回查询的结果为止。此查询的源不变,但查询的目标不断变化,为查询结果一般需 要发起多次查询

DNS的解析类型

FQDN --> IP 正向解析

IP --> FQDN 反向解析

DNS查询过程

Client -->hosts文件 --> Client DNS Service Local Cache --> DNS Server (recursion递归) --> DNS Server Cache -->DNS iteration(迭代) --> 根--> 顶级域名DNS-->二级域名DNS… 

DNS的各种角色及定义

DNS服务器类型

主DNS服务器:管理和维护所负责解析的域内解析库的服务器
从DNS服务器:从主服务器或从服务器"复制"(区域传输)解析库副本
    序列号:解析库版本号,主服务器解析库变化时,其序列递增
    刷新时间间隔:从服务器从主服务器请求同步解析的时间间隔
    重试时间间隔:从服务器请求同步失败时,再次尝试时间间隔
    过期时长:从服务器联系不到主服务器时,多久后停止服务
    通知机制:主服务器解析库发生变化时,会主动通知从服务器 
缓存DNS服务器(转发器)

DNS的各种资源记录

name [TTL] IN rr_type value
注意:
1. TTL可从全局继承
2. 使用 "@" 符号可用于引用当前区域的域名
3. 同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应
4. 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机

dns的解析是由众多资源记录RR(Resource Record)组成的

记录类型:A, AAAA, PTR, SOA, NS, CNAME, MX

SOA:Start Of Authority,起始授权记录;一个区域解析库有且仅能有一个SOA记录,必须位于解 析库的第一条记录

A:internet Address,作用,FQDN --> IP

AAAA:FQDN --> IPv6

PTR:PoinTeR,IP --> FQDN

NS:Name Server,专用于标明当前区域的DNS服务器

CNAME : Canonical Name,别名记录

MX:Mail eXchanger,邮件交换器

TXT:对域名进行标识和说明的一种方式,一般做验证记录时会使用此项,如:SPF(反垃圾邮 件)记录

例DNS主从实现

#搭建环境
[root@web ~]# yum -y install httpd
[root@web ~]# echo www.test.com > /var/www/html/index.html
[root@web ~]# systemctl enable --now httpd
#部署主DNS服务器
[root@test.com ~]# yum -y install bind #安装服务
[root@test.com ~]# vim /etc/named.conf  #打开配置文件按照下方配置修改
#注释下面行添加最后一行
options 
#   listen-on port 53  127.0.0.1; ;
#   allow-query      localhost; ;
    allow-transfer  10.0.0.18; ; #只允许从服务器同步数据库
[root@test.com ~]# vim /etc/named.rfc1912.zones  #最下方添加
zone "test.com" IN 
    type master;
    file "test.com.zone"; 
 ;
[root@test.com ~]# cp -p /var/named/named.localhost /var/named/test.com.zone
[root@test.com ~]# vim /var/named/test.com.zone
$TTL 1D
@   IN SOA  master  rname.invalid. (
                    1   ; serial
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum
    NS  master
    NS  slave
master  A   10.0.0.8
slave   A   10.0.0.18
www     A   10.0.0.7
[root@test.com ~]# systemctl enable --now named   #开启服务
[root@test.com ~]# rndc reload   #若修改配置文件此命令读取配置文件不必重启服务
#部署从服务器
[root@test.com-slave ~]# yum -y install bind #安装服务
[root@test.com-slave ~]# vim /etc/named.conf  #打开配置文件按照下方配置修改
#注释下面行添加最后一行
options 
#   listen-on port 53  127.0.0.1; ;
#   allow-query      localhost; ;
allow-transfer  none;; #从服务器不允许主机同步数据库
[root@test.com-slave ~]# vim /etc/named.rfc1912.zones  #最下方添加
zone "test.com" IN 
    type slave;
    masters  10.0.0.7;;
    file "slaves/test.com.salve";
;   
[root@test.com-slave ~]# systemctl enable --now named   #开启服务
[root@test.com-slave ~]# rndc reload   #若修改配置文件此命令读取配置文件不必重启服务
[root@test.com-slave ~]# ls /var/named/slaves/    #查看区域数据库是否形成
test.com.salve
#测试
[root@client ~]# dig www.test.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.8 <<>> www.test.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20929
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;www.test.com.          IN  A

;; ANSWER SECTION:
www.test.com.       86400   IN  A   10.0.0.7

;; AUTHORITY SECTION:
test.com.       86400   IN  NS  slave.test.com.
test.com.       86400   IN  NS  master.test.com.

;; ADDITIONAL SECTION:
master.test.com.    86400   IN  A   10.0.0.8
slave.test.com.     86400   IN  A   10.0.0.18

;; Query time: 0 msec
;; SERVER: 10.0.0.8#53(10.0.0.8)
;; WHEN: Sun Feb 13 08:40:07 CST 2022
;; MSG SIZE  rcvd: 130

智能DNS

环境:DNS服务器:10.0.0.8
      web1:10.0.0.7
      web2:10.0.0.18
      客户端1:10.0.0.17
      客户端2:10.0.0.28
实现客户端1访问www.test.com由10.0.0.7返回结果
客户端2访问www.test.com由10.0.0.18返回结果
#web服务器部署
[root@web1 /]# yum -y install httpd
[root@web1 /]# echo "www.test.com in 10.0.0.7" > /var/www/html/index.html
[root@web1 /]# systemctl enable --now httpd
[root@web2 /]# yum -y install httpd
[root@web2 /]# echo "www.test.com in 10.0.0.18" > /var/www/html/index.html
[root@web2 /]# systemctl enable --now httpd
#DNS服务器搭建
[root@test.com ~]# yum -y install bind #安装服务
[root@test.com ~]# vim /etc/named.conf  #打开配置文件按照下方配置修改
#注释下面行
options 
#   listen-on port 53  127.0.0.1; ;
#   allow-query      localhost; ;
#删除以下内容
zone "." IN 
   type hint;
   file "named.ca";
;
include "/etc/named.rfc1912.zones";
#添加以下内容
acl  anet 
    10.0.0.28;
;

acl bnet 
    10.0.0.0/24;
;

view 10.0.0.18    
    match-clients  anet;;
    include "/etc/named.rfc1912.zones.18";
;
view 10.0.0.7    
    match-clients  anet;;
    include "/etc/named.rfc1912.zones.7";
;
[root@test named]# cp  /etc/named.rfc1912.zones  /etc/named.rfc1912.zones.7
[root@test named]# cp  /etc/named.rfc1912.zones  /etc/named.rfc1912.zones.18
[root@test named]# vim /etc/named.rfc1912.zones.7   #启用view需把所有区域写到view中
#添加一下内容
zone "." IN 
   type hint;
   file "named.ca";
;
zone "test.com" 
        type master;                                                                                                                                                     
        file "test.com.zone.7";
;
[root@test named]# vim /etc/named.rfc1912.zones.18   #启用view需把所有区域写到view中
#添加一下内容
zone "." IN 
   type hint;
   file "named.ca";
;
zone "test.com" 
        type master;                                                                                                                                                     
        file "test.com.zone.18";
;

[root@test named]# vim test.com.zone.18   #创建区域数据库文件
$TTL 1D
@   IN SOA  master rname.invalid. (
                    1   ; serial
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum
        NS  master
master  A   10.0.0.8                                                                                                                                                           
webser   A   10.0.0.18
www     CNAME  webser
[root@test named]# vim test.com.zone.7     #创建区域数据库文件
$TTL 1D
@   IN SOA  master rname.invalid. (
                    1   ; serial
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum
        NS  master
master  A   10.0.0.8
webser    A   10.0.0.7
www     CNAME  webser                      
[root@test named]# rndc reload   #读取配置文件
#测试
[root@client1 ~]# curl www.test.com
www.test.com in 10.0.0.7
[root@client2 ~]# curl  www.test.com
www.test.com in 10.0.0.18

IPTABLES

在iptables对应钩子函数的为五个表table和五个链chain

五个内置链

INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING

五个表

filter:过滤规则表,根据预定义的规则过滤符合条件的数据包,默认表
nat:network address translation 地址转换规则表
mangle:修改数据标记位规则表
raw:关闭启用的连接跟踪机制,加快封包穿越防火墙速度
security:用于强制访问控制(MAC)网络规则,由Linux安全模块(如SELinux)实现
#优先级由高到低的顺序
security -->raw -->mangle -->nat -->filter

iptables 的规则

规则rule:根据规则的匹配条件尝试匹配报文,对匹配成功的报文根据规则定义的处理动作作出处理,
规则在链接上的次序即为其检查时的生效次序
匹配条件:默认为与条件,同时满足
基本匹配:IP,端口,TCP的Flags(SYN,ACK等)
扩展匹配:通过复杂高级功能匹配
处理动作:称为target,跳转目标
内建处理动作:ACCEPT,DROP,REJECT,SNAT,DNAT,MASQUERADE,MARK,LOG...
自定义处理动作:自定义chain,利用分类管理复杂情形
规则要添加在链上,才生效;添加在自定义链上不会自动生效
白名单:只有指定的特定主机可以访问,其它全拒绝
黑名单:只有指定的特定主机拒绝访问,其它全允许,默认方式

语法

iptables   [-t table]   SUBCOMMAND   chain   [-m matchname [per-match-options]]   
-j targetname [per-target-options]

选项

-N:new, 自定义一条新的规则链
-E:重命名自定义链;引用计数不为0的自定义链不能够被重命名,也不能被删除
-X:delete,删除自定义的空的规则链
-P:Policy,设置默认策略;对filter表中的链而言,其默认策略有:ACCEPT:接受, DROP:丢弃
-L:list, 列出指定鏈上的所有规则,本选项须置后
-n:numberic,以数字格式显示地址和端口号
-v:verbose,详细信息
-vv 更详细
-x:exactly,显示计数器结果的精确值,而非单位转换后的易读值
--line-numbers:显示规则的序号
-S selected,以iptables-save 命令格式显示链上规则
-A:append,追加
-I:insert, 插入,要指明插入至的规则编号,默认为第一条
-D:delete,删除
   (1) 指明规则序号
   (2) 指明规则本身
-R:replace,替换指定链上的指定规则编号
-F:flush,清空指定的规则链
-Z:zero,置零
   iptables的每条规则都有两个计数器
 (1) 匹配到的报文的个数
 (2) 匹配到的所有报文的大小之和
#常用组合
-vnL #查看规则L必须放后面
-vvnxL --line-numbers   #查看规则L必须放后面
#处理动作
-j targetname [per-target-options]
REJECT:--reject-with:icmp-port-unreachable默认由回包
RETURN:返回调用链
REDIRECT:端口重定向
LOG:记录日志,dmesg
MARK:做防火墙标记
DNAT:目标地址转换
SNAT:源地址转换
MASQUERADE:地址伪装
ACCEPT   允许
DROP   拒绝无回包

iptables基本匹配条件

基本匹配条件:无需加载模块由netfilter自行提供

[!] -s, --source address[/mask][,...]:源IP地址或者不连续的IP地址
[!] -d, --destination address[/mask][,...]:目标IP地址或者不连续的IP地址
[!] -p, --protocol protocol:指定协议,可使用数字如0(all)
 protocol: tcp, udp, icmp, icmpv6, udplite,esp, ah, sctp, mh or“all“  
 参看:/etc/protocols
[!] -i, --in-interface name:报文流入的接口;只能应用于数据报文流入环节,只应用于INPUT、FORWARD、PREROUTING链
[!] -o, --out-interface name:报文流出的接口;只能应用于数据报文流出的环节,只应用于FORWARD、OUTPUT、POSTROUTING链

[root@centos8 ~]#iptables -A INPUT -s 10.0.0.6,10.0.0.10 -j REJECT
[root@centos8 ~]#iptables -I INPUT -i lo -j ACCEPT
[root@centos8 ~]#curl 127.0.0.1
10.0.0.8
[root@centos8 ~]#curl 10.0.0.8
10.0.0.8
[root@centos8 ~]#iptables -I INPUT 2 -s 10.0.0.6 ! -p icmp -j ACCEPT
#拒绝icmp
[root@localhost ~]# iptables -A INPUT -s 192.168.1.0/24 -p icmp -j DROP

iptables 扩展匹配条件

扩展匹配条件:需要加载扩展模块(/usr/lib64/xtables/*.so),方可生效

扩展模块的查看帮助 :man iptables-extensions

扩展匹配分为隐式扩展和显式扩展

隐式扩展

iptables 在使用-p选项指明了特定的协议时,无需再用-m选项指明扩展模块的扩展机制,不需要手动加 载扩展模块

tcp

[!] --source-port, --sport port[:port]:匹配报文源端口,可为端口连续范围
[!] --destination-port,--dport port[:port]:匹配报文目标端口,可为连续范围
[!] --tcp-flags mask comp
     mask 需检查的标志位列表,用,分隔 , 例如 SYN,ACK,FIN,RST
     comp 在mask列表中必须为1的标志位列表,无指定则必须为0,用,分隔tcp协议的扩展选项
--tcp-flags SYN,ACK,FIN,RST SYN 表示要检查的标志位为SYN,ACK,FIN,RST四个,其中SYN必
须为1,余下的必须为0,第一次握手
--tcp-flags SYN,ACK,FIN,RST SYN,ACK 第二次握手
#错误包
--tcp-flags ALL ALL  
--tcp_flags ALL NONE
--syn:用于匹配第一次握手, 相当于:--tcp-flags SYN,ACK,FIN,RST SYN

udp

[!] --source-port, --sport port[:port]:匹配报文的源端口或端口范围
[!] --destination-port,--dport port[:port]:匹配报文的目标端口或端口范围

icmp

[!] --icmp-type type[/code]|typename
 type/code
 0/0   echo-reply icmp应答
 8/0   echo-request icmp请求

[root@centos8 ~]#iptables -A INPUT -s 10.0.0.6 -p tcp --dport 21:23 -j REJECT
[root@centos8 ~]#ipn
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               
destination         
1        1    60 REJECT     tcp  -- *     *       10.0.0.6             
0.0.0.0/0           tcp dpts:21:23 reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               
destination         
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               
destination
[root@centos8 ~]#iptables -A INPUT -p tcp --syn -j REJECT
[root@centos8 ~]#iptables -A INPUT -s 10.0.0.6 -p icmp --icmp-type 8 -j REJECT 

显式扩展

显示扩展即必须使用-m选项指明要调用的扩展模块名称,需要手动加载扩展模块

CentOS 7,8: man iptables-extensions

CentOS 6: man iptables

multiport 扩展

以离散方式定义多个端口匹配最多指定15个端口

#指定多个源端口
[!] --source-ports,--sports port[,port|,port:port]...
# 指定多个目标端口
[!] --destination-ports,--dports port[,port|,port:port]...
#多个源或目标端
[!] --ports port[,port|,port:port]...

[root@centos8 ~]#iptables -A INPUT -s 10.0.0.6 -p tcp -m multiport --dports 
445,139 -j REJECT
[root@centos8 ~]#iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp -m multiport --dports 20:22,80 -j ACCEPT
iprange扩展

至连续的IP地址范围(但一般不是整个网络)

[!] --src-range from[-to] 源IP地址范围
[!] --dst-range from[-to] 目标IP地址范围

[root@centos8 ~]#iptables -A INPUT -d 172.16.1.100 -p tcp --dport 80 -m iprange --src-range
172.16.1.5-172.16.1.10 -j DROP
mac扩展

mac 模块可以指明源MAC地址,,适用于:PREROUTING, FORWARD,INPUT chains

[!] --mac-source XX:XX:XX:XX:XX:XX

[root@centos8 ~]#iptables -A INPUT -s 172.16.0.100 -m mac  --mac-source 00:50:56:12:34:56 -j  ACCEPT
[root@centos8 ~]#iptables -A INPUT -s 172.16.0.100  -j REJECT
connlimit扩展

根据没个客户端 IP做并发链接数数量统计匹配可防止DDOS

--connlimit-upto N #连接的数量小于等于N时匹配
--connlimit-above N #连接的数量大于N时匹配

[root@centos8 ~]#iptables -A INPUT -d 172.16.100.10 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT
state扩展

state扩展模块可以更据链接追踪机制取检查链接状态

conntrack机制:追踪本机上的请求和响应之间的关系

状态类型

NEW:新发出请求;连接追踪信息库中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求
ESTABLISHED:NEW状态之后,连接追踪信息库中为其建立的条目失效之前期间内所进行的通信状态
RELATED:新发起的但与已有连接相关联的连接,如:ftp协议中的数据连接与命令连接之间的关系
INVALID:无效的连接,如flag标记不正确
UNTRACKED:未进行追踪的连接,如:raw表中关闭追踪

#######################################################################################################################################
[root@centos8 ~]#cat /proc/net/nf_conntrack  # iptables追踪记录的链接信息库
[root@centos8 ~]#cat /proc/sys/net/netfilter/nf_conntrack_max   #iptables追踪记录的最大链接数量
[root@centos8 ~]#cat /proc/sys/net/netfilter/nf_conntrack_count  #查看连接跟踪有多少条目

例使用iptable实现: 放行ssh,telnet, ftp, web服务80端口,其他端口服务全部拒绝

[root@localhost ~]# iptables -A INPUT  -p tcp -m multiport --dports 20:23,80 -j ACCEPT
[root@localhost ~]# iptables -P INPUT DROP
[root@localhost ~]# iptables -vnL
Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
  219 13960 ACCEPT     tcp  --  *      *       0.0.0.0/0       0.0.0.0/0            multiport dports 20:23,80

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

iptables规则保存

永久保存规则

#centos7、8
iptables-save > /date/iptables
#centos6
service iptables save   #讲规则保存覆盖至/etc/sysconfig/iptables中

加载规则

#centos7、8
iptables-restore < /date/iptables
-n, --noflush:不清除原有规则
-t, --test:仅分析生成规则集,但不提交
#centos6
service iptables restart

开机启动启动规则

1、将规则命令写入脚本,将脚本设置在/etc/rc.d/rc.local文件中开机自启

2、在/etc/rc.d/rc.loacl中添加 iptables-restore < /date/iptables

3、在cenos7、8中安装iptables-services 实现iptables.service

NAT

NAT的基本工作原理是,当私网主机和公网主机通信的IP包经过NAT网关时,将IP包中的源IP或目的IP在私有IP和NAT的公共IP之间进行转换

nat的俩种实现类型

SNAT:source NAT ,支持POSTROUTING, INPUT,让本地网络中的主机通过某一特定地址访问外部网络,实现地址伪装,请求报文:修改源IP
DNAT:destination NAT 支持PREROUTING , OUTPUT,把本地网络中的主机上的某服务开放给外部网络访问(发布服务和端口映射),但隐藏真实IP,请求报文:修改目标IP
PNAT: port nat,端口和IP都进行修改

SNAT

SNAT:基于nat表的target,适用于固定的公网IP

snat选项

--to-source [ipaddr[-ipaddr]][:port[-port]]
--random
#例
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 ! –d 10.0.0.0/24 -j SNAT --to-source 172.18.1.6-172.18.1.9
#需要开启ip_forward

例:SNAT实现

[root@firewall ~]# vim /etc/sysctl.conf   # 开启转发
[root@firewall ~]# sysctl -p    #参数生效
net.ipv4.ip_forward = 1
[root@firewall ~]# iptables -t nat  -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source 192.168.148.129
[root@firewall ~]# iptables -vnL -t nat
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    1   124 SNAT       all  --  *      *       10.0.0.0/24          0.0.0.0/0            to:192.168.148.129

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
[root@firewall ~]# 
[root@lan ~]# ping 192.168.148.128     #内网测试可以访问外网
PING 192.168.148.128 (192.168.148.128) 56(84) bytes of data.
64 bytes from 192.168.148.128: icmp_seq=1 ttl=63 time=4.54 ms
64 bytes from 192.168.148.128: icmp_seq=2 ttl=63 time=0.670 ms
^X64 bytes from 192.168.148.128: icmp_seq=3 ttl=63 time=0.793 ms
^C
--- 192.168.148.128 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2068ms
rtt min/avg/max/mdev = 0.670/2.002/4.544/1.798 ms
[root@internet ~]# ping 10.0.0.28    #外网不可以访问内网
connect: Network is unreachable
[root@firewall ~]# cat /proc/net/nf_conntrack    #查看转发信息
ipv4     2 tcp      6 299 ESTABLISHED src=10.0.0.1 dst=10.0.0.18 sport=60628 dport=22 src=10.0.0.18 dst=10.0.0.1 sport=22 dport=60628 [ASSURED] mark=0 zone=0 use=2
[root@firewall ~]# iptables-save > /date/SNAT     # 保存规则

DNAT

DNAT:nat表的target,适用于端口映射,即可重定向到本机,也可以支持重定向至不同主机的不同端口,但不支持多目标,即不支持负载均衡功能

DNAT选项

--to-destination [ipaddr[-ipaddr]][:port[-port]]
#例
iptables -t nat -A PREROUTING -d ExtIP -p tcp|udp --dport PORT -j DNAT --to-destination InterSeverIP[:PORT]
#需要开启ip_forward

例:DNAT实现

[root@firewall ~]# vim /etc/sysctl.conf   # 开启转发
[root@firewall ~]# sysctl -p    #参数生效
net.ipv4.ip_forward = 1
[root@firewall ~]# iptables -t nat -A PREROUTING -d 192.168.148.129 -p tcp --dport 8080 -j DNAT --to-destination 10.0.0.28:8080    #-d写公网地址开启后没有端口监听
[root@firewall ~]# iptables -t nat -vnL
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            192.168.148.129      tcp dpt:8080 to:10.0.0.28:8080

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
[root@firewall ~]# 
[root@internet network-scripts]# curl 192.168.148.129:8080   #公网测试可以访问
lanwebservice
[root@firewall ~]# iptables-save > /date/DNAT     # 保存规则

以上是关于iptables及智能DNS的主要内容,如果未能解决你的问题,请参考以下文章

免费的域名解析介绍一款

iptables常用语句及端口

搭建DNS主从服务器实现反向解析,子域,转发,智能DNS及排错和互联网DNS架构实验

iptables dns

DNS主从复制子域授权和转发及智能解析

iptables