linux基础之iptables SNAT和DNAT

Posted ckh2014

tags:

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

iptables要实现内网和外网通信,有两种方式:

  nat: Network Address Translation,安全性,网络层+传输层
  proxy: 代理,应用层

nat: 

SNAT: 只修改请求报文的源地址
DNAT:只修改请求报文的目标地址

nat表:

PREROUTTING: DNAT
OUTPUT
POSTROUTING: SNAT

实例:

以三台电脑搭建环境,其中一台作为外网主机,一台作为网关,一台作为内网主机

1. 以192.168.1.4这台电脑作为连接内网和外网的接口,eth0作为外网接口,ip为192.168.1.4;添加一块自定义网卡eth1,ip设置为192.168.20.1,作内网的网关用
    # ifconfig eth1 192.168.20.1/24 up
2. 以原ip为192.168.1.3这台电脑作为内网主机,网卡设置为自定义,ip设置为192.168.20.2,实现内网能够和网关192.168.20.1通信     # ifconfig eth0 192.168.20.1 up
  添加默认网关:
    # route add default gw 192.168.20.1

3. 以192.168.1.5 这台电脑作为外网主机使用 
3. 打开192.168.1.4这台电脑的网卡的转发功能
    以CentOS6为例:
          # vim /etc/sysctl.conf
            net.ipv4.ip_forward = 1 
          # sysctl -p  //使之生效 
    验证: # cat /proc/sys/net/ipv4/ip_forward

接下来做一个基于DNAT的方式进行源地址转换:

1. 首先提供环境: 让外网主机提供web服务,
  # vim /var/www/html/index.html 
示例:
<html> <title>Test Page</title> <body> <h1>Welcome to Alen</h1> <p>hello</p> </body> <html>

2. 现在外网主机是ping不同内网主机的,给外网主机增加网络路由

# route add -net 192.168.20.0/24 gw 192.168.1.4  //192.168.20网络的报文都转发到192.168.1.4这台主机上

3. 抓包测试:

外网主机: tcpdump -i eth0 host 192.168.1.5
内网主机: curl http://192.168.1.5
外网主机成功抓包: 说明内网主机可以和外网主机通信

4.现在删掉刚才添加的外网主机路由:

# route del -net 192.168.20.0/24

5. 写iptables规则实现snat转发

# iptables -t nat -A POSTROUTING -s 192.168.20.0/24 ! -d 192.168.20.0/24 -j SNAT --to-source 192.168.1.4
或者用MASQUERADE机制:
# iptables -t nat -A POSTROUTING -s 192.168.20.0/24 ! -d 192.168.20.0/24 -j MASQUERADE

6. 写IPtables规则实现dnat转发

# iptables -t nat -A PREROUTING -d 192.168.20.0/24 -p tcp --dport 80 -j DNAT --to-destination 192.168.20.2
或者用MASQUERADE机制:
# iptables -t nat -A PREROUTING -d 192.168.20.0/24 -p tcp --dport 80 -j MASQUERADE

再次测试,内网和外网可以通信

 

以上是关于linux基础之iptables SNAT和DNAT的主要内容,如果未能解决你的问题,请参考以下文章

Linux|计算机网络|iptables|dnat+snat实现外网访问局域网内部服务器

Linux-SNAT和DNAT

Linux防火墙------iptables(SNAT与DNAT)

firewall之iptables ,SNAT,DNAT

iptable之SNAT的实现

iptables之SNAT与DNAT