防⽕墙之地址转换SNATDNAT
防⽕墙之地址转换SNAT DNAT
⼀、SNAT源地址转换。
1、原理:在路由器后(PSOTROUTING)将内⽹的ip地址修改为外⽹⽹卡的ip地址。
2、应⽤场景:共享内部主机上⽹。
3、设置SNAT:⽹关主机进⾏设置。
(1)设置ip地址等基本信息。
(2)开启路由功能:
sed -i '/ip-forward/s/0/1/g'
sysctl -p
(3)编写规则:
iptables -t nat -I POSTROUTING -o 外⽹⽹卡 -s 内⽹⽹段 -j SNAT --to-source 外⽹ip地址  #适⽤于外⽹ip地址固定场景
iptables -t nat -I POSTROUTING -o 外⽹⽹卡 -s 内⽹⽹段 -j MASQUERADE  #适⽤于共享动态ip地址上⽹(如adsl拨号,dhcp获取外⽹ip)
(4)做好安全控制:使⽤FORWARD时机进⾏控制,严格设置INPUT规则。
⼆、DNAT⽬的地址转换:
1、原理:在路由前(PREROUTING)将来⾃外⽹访问⽹关公⽹ip及对应端⼝的⽬的ip及端⼝修改为内部服务器的ip及端⼝,实现发布内部服务器。
2、应⽤场景:发布内部主机服务。
3、设置DNAT:⽹关主机上设置。
(1)设置ip、开启路由、设置SNAT
(2)编写防⽕墙规则:
iptables -t nat -I PREROUTING -i 外⽹⽹卡 -d 外⽹ip tcp --dport 发布的端⼝ -j DNAT --to-destination 内⽹服务ip:端⼝
NAT network address translation
仅从报⽂请求来看,可以分为:
SNAT 源地址转换
DNAT ⽬标地址转换
PNAT 端⼝转换
并⾮是⽤户空间的进程完成转换功能,靠的是内核中的地址转换规则
私有IP客户端访问互联⽹的⽅法
SNAT 、PROXY
SNAT:主要⽤于实现内⽹客户端访问外部主机时使⽤(局域⽹上⽹⽤)
定义在POSTROUTING链上
iptables -t nat -A postrouting -s 内部⽹络地址或主机地址 -j SNAT --to-source NAT服务器上的某外部地址
另外⼀个target
MASQUERADE地址伪装(适⽤于PPPOE拨号上⽹,假设eth1是出⼝)
iptables -t nat -A postrouting -s 内部⽹络或主机地址 -o eth1 -j MASQUERADE
DNAT:主要⽤于内部服务器被外⽹访问(发布服务)
定义在PREROUTING
iptables -t nat -A PREROUTING -d NAT服务器的某外部地址 -p 某协议 --dport 某端⼝ -j DNAT --to-destination 内⽹服务器地址[:port]注意:NAT服务器需要打开数据转发
echo 1 > /proc/sys/net/ipv4/ip_forward
或者修改/f net.ipv4.ip_forward = 1
实验操作
SNAT、DNAT
SNAT
规划主机A 作为SNAT server
eth0 ip地址172.20.1.10(外部地址),eth1 192.168.1.1(内部地址)
主机B当做局域⽹内主机
eth0 ip地址192.168.1.2 默认路由要指向192.168.1.1
SNAT server:
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 172.20.1.10
#上⾯和我们实例操作相同
[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
主机B ping外部的其它主机(172.20.1.20模拟互联⽹上的主机)
DNAT
[root@nat ~]# iptables -t filter -F
[root@nat ~]# iptables -t nat -F
[root@nat ~]# iptables -t nat -A PREROUTING -d 10.1.249.125 -p tcp --dport 80 -j DNAT --to-destination 192.168.2.4 Chain PREROUTING (policy ACCEPT)
target    prot opt source              destination
虚拟机vim命令DNAT      tcp  --  0.0.0.0/0            10.1.249.125        tcp dpt:80 to:192.168.2.4
[root@nat ~]# netstat -tln | grep "\<80\>"  此时本机上并没有开放80端⼝
hello  --> 此时我们访问为 nat 主机上的80端⼝由上⾯可知,此服务器上并没有开放80,⽽是将请求送往后端服务器
我们有⼀台机器A可以上外⽹,配置eth0=192.168.1.1,eth1=222.13.56.192
有6台机器只有内⽹IP ,分别是192.168.1.102~192.168.1.108,想让这6台机器通过机器A上⽹在机器A 防⽕墙上配置如下即可
/sbin/iptables -t nat -I POSTROUTING -s 192.168.1.101 -j SNAT --to-source 222.13.56.192 /sbin/iptables -t nat -I POSTROUTING -s 192.168.1.102 -j SNAT --to-source 222.13.56.192 /sbin/iptables -t nat -I POSTROUTING -s 192.168.1.103 -j SNAT --to-source 222.13.56.192 /sbin/iptables -t nat -I POSTROUTING -s 192.168.1.104 -j SNAT --to-source 222.13.56.192 /sbin/iptables -t nat -I POSTROUTING -s 192.168.1.105 -j SNAT --to-source 222.13.56.192 /sbin/iptables -t nat -I POSTROUTING -s 192.168.1.108 -j SNAT --to-source 222.13.56.192
在 6台机器上路由显⽰
route  -n
Kernel IP routing table
Destination    Gateway        Genmask        Flags Metric Ref    Use Iface
192.168.1.0    0.0.0.0        255.255.255.0  U    0      0        0 em1
169.254.0.0    0.0.0.0        255.255.0.0    U    1002  0        0 em1
0.0.0.0        192.168.1.1  0.0.0.0        UG    0      0        0 em1
iptables中DNAT转发的配置⽅法
1.⼀对⼀流量完全DNAT
⾸先说⼀下⽹络环境,普通主机⼀台做防⽕墙⽤,⽹卡两块
eth0 192.168.0.1  内⽹
eth1 202.202.202.1 外⽹
内⽹中⼀台主机 192.168.0.101
现在要把外⽹访问202.202.202.1的所有流量映射到192.168.0.101上
命令如下:
#将防⽕墙改为转发模式
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -X
iptables -t mangle -X
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -A PREROUTING -d 202.202.202.1 -j DNAT --to-destination 192.168.0.101
iptables -t nat -A POSTROUTING -d 192.168.0.101 -j SNAT --to 192.168.0.1
2.多对多流量完全DNAT
说是多对多,实际上这⾥的配置是指定了多个⼀对⼀
环境:
eth0 192.168.0.1  内⽹
eth1 202.202.202.1 、202.202.202.2 外⽹
内⽹中2台主机 192.168.0.101、192.168.0.102
现在要把外⽹访问202.202.202.1的所有流量映射到192.168.0.101上,同时把把外⽹访问202.202.202.2的所有流量映射到192.168.0.102上这⾥顺便提⼀下如何为⽹卡配置多个IP
ifconfig eth1:1 202.202.202.2 netmask 255.255.255.0 up
#将防⽕墙改为转发模式
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -A PREROUTING -d 202.202.202.1 -j DNAT --to-destination 192.168.0.101
iptables -t nat -A POSTROUTING -d 192.168.0.101 -j SNAT --to 192.168.0.1
iptables -t nat -A PREROUTING -d 202.202.202.2 -j DNAT --to-destination 192.168.0.102
iptables -t nat -A POSTROUTING -d 192.168.0.102 -j SNAT --to 192.168.0.1
3.⼀对多根据协议DNAT
这个最常⽤,⼀般是内⽹或DMZ区内有多个应⽤服务器,可以将不同的应⽤流量映射到不同的服务器上
环境:
eth0 192.168.0.1  内⽹
eth1 202.202.202.1  外⽹

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。