目录
一、介绍
基于snat和dnat技术,利用iptables编写规则,实现对内网服务(ssh)发布,以及内网能够访问外网
SNAT
开通内网机器的外网访问权限,是指在数据包从网卡发送出去的时候,把数据包中的源地址部分替换为指定的IP,这样,接收方就认为数据包的来源是被替换的那个IP的主机,MASQUERADE是用发送数据的网卡上的IP来替换源IP,因此,对于那些IP不固定的场合,比如拨号网络或者通过dhcp分配IP的情况下,就得用MASQUERADE
DNAT发布内网服务,让外网能访问到,就是指数据包从网卡发送出去的时候,修改数据包中的目的IP,表现为如果你想访问A,可是因为网关做了DNAT,把所有访问A的数据包的目的IP全部修改为B,那么,你实际上访问的是B,因为路由是按照目的地址来选择的。因此,DNAT是在PREROUTING链上来进行的,而SNAT是在数据包发送出去的时候才进行,因此是在POSTROUTING链上进行的
iptables基于内核netfilter实现的,可以制定一些规则(rules)来对主机收到的数据包进行处理,规则其实就是网络管理员预定义的条件,规则一般的定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息 包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的 主要工作就是添加、修改和删除这些规则。
二、准备工作
设计网络拓扑图如下:
两台Linux虚拟机:一台做防火墙,一台做shh服务器
防火墙配置:
准备两块网卡ens36和ens33:
[root@router network-scripts]# cat ifcfg-ens33
BOOTPROTO=none
NAME=ens33
UUID=b6b1e7a7-fe47-4fec-890a-1a939b5bcaaa
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.31.133
GATEWAY=192.168.31.1
NETMASK=255.255.255.0
DNS1=114.114.114.114
[root@router network-scripts]# cat ifcfg-ens36
BOOTPROTO="none"
NAME="ens36"
DEVICE="ens36"
ONBOOT="yes"
IPADDR=192.168.204.101
PREFIX=24
[root@router network-scripts]#
ssh服务器配置:
一块ens33网卡:
[root@ssh network-scripts]# cat ifcfg-ens33
BOOTPROTO=none
NAME=ens33
UUID=b6b1e7a7-fe47-4fec-890a-1a939b5bcaaa
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.204.100
GATEWAY=192.168.204.101
NETMASK=255.255.255.0
DNS1=114.114.114.114
三、实现:在防火墙上配置iptables规则
[root@router ~]# cat iptables.sh
#!/bin/bash
iptables -F
iptables -t nat -F
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
iptables -t nat -A POSTROUTING -s 192.168.204.0/24 -o ens33 -j SNAT --to-source 192.168.31.133
iptables -t nat -A PREROUTING -i ens33 -d 192.168.31.133 -p tcp --dport 2233 -j DNAT --to-destination 192.168.204.100:22
四、测试:
1、ssh服务器访问路由器:成功
2、用户访问内网ssh服务:成功