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实现外网访问局域网内部服务器