3.配置DNAT发布内网服务器 问题 本案例要求熟悉DNAT策略的典型应用场景,完成以下任务: 1)通过DNAT策略发布内网的Web服务器 2)通过DNAT策略发布内网的SSH服务器 3)通过DNAT策略发布内网的FTP服务器 方案 沿用练习二,采用三台RHEL6虚拟机svr5、gw1、pc120,如图-3所示。其中,虚拟机svr5作为局域网络的测试机,接入NAT网络(virbr0);虚拟机pc120作为Internet的测试机,接入隔离网络(virbr1);虚拟机gw1作为网关/路由器,配置eth0、eth1两块网卡,分别接入两个网络virbr0、virbr1。 图-3 内网测试机svr5还需要将默认网关指向Linux网关的内网接口192.168.4.1: [root@svr5 ~]# route -n | grep UG 0.0.0.0 192.168.4.1 0.0.0.0 UG 0 0 0 eth0 步骤 实现此案例需要按照如下步骤进行。 步骤一:通过DNAT策略发布内网的Web服务器 Web服务器的IP地址192.168.4.5为私有地址,从互联网无法直接访问;而企业站点的域名www.tedu.cn对外只能解析为公有地址(比如网关gw1外网接口的地址174.16.16.1)。 1)未启用DNAT策略时,外网无法访问私网Web服务器 启用svr5的httpd服务: [root@svr5 ~]# service httpd restar … … [root@svr5 ~]# echo “Test Page 5.” > /var/www/html/index.html //部署测试网页 关闭gw1的httpd服务: [root@gw1 ~]# service httpd stop … … 从外网机pc120尝试访问http://174.16.16.1会失败: [root@pc120 ~]# elinks --dump http://174.16.16.1 ELinks: 拒绝连接 2)在网关gw1上添加DNAT规则 添加的规则应该在nat表内,将从外网接口eth1进来、目标地址为174.16.16.1、目标端口为TCP 80的数据包,在路由选择之前将数据包的目标IP地址修改为内网实际Web服务器svr5的IP地址192.168.4.5: [root@gw1 ~]# service iptables stop //排除其他规则干扰 iptables:将链设置为政策 ACCEPT:nat [确定] iptables:清除防火墙规则: [确定] iptables:正在卸载模块: [确定]
[root@gw1 ~]# iptables -t nat -A PREROUTING -i eth1 -d 174.16.16.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.4.5
[root@gw1 ~]# iptables -t nat -nL PREROUTING //查看结果 Chain PREROUTING (policy ACCEPT) target prot opt source destination DNAT tcp – 0.0.0.0/0 174.16.16.1 tcp dpt:80 to:192.168.4.5 [root@gw1 ~]# 3)再次测试从外网访问内网 从外网机pc120尝试访问http://174.16.16.1,可以看到svr5的Web页面: [root@pc120 ~]# elinks --dump http://174.16.16.1 Test Page 5. 检查内网机svr5的Web访问日志,发现确实是外网机174.16.16.120在访问: [root@svr5 ~]# tail -1 /var/log/httpd/access_log 174.16.16.120 - - [19/May/2015:14:59:23 +0800] “GET / HTTP/1.1” 200 13 “-” “ELinks/0.12pre5 (textmode; Linux; -)” 步骤二:通过DNAT策略发布内网的SSH服务器 1)未启用DNAT策略时,外网无法以SSH方式远程管理私网Web服务器 如果网关gw1开启默认的SSH服务、且允许进站访问,那么当从外网机pc120远程SSH连接174.16.16.1时,登入的是gw1的Shell环境: [root@pc120 ~]# ssh root@174.16.16.1 “hostname” //SSH执行远程主机上的命令 root@174.16.16.1’s password: //验证gw1的root口令 gw1.tedu.cn //连接的是gw1 [root@pc120 ~]# 2)在网关gw1上添加DNAT规则 准备映射端口2345,当从外网接口eth1进来、目标IP地址为174.16.16.1、目标端口为TCP 2345时,在路由选择之前将数据包的目标IP地址改为192.168.4.5、目标端口改为22: [root@gw1 ~]# iptables -t nat -A PREROUTING -i eth1 -d 174.16.16.1 -p tcp --dport 2345 -j DNAT --to-destination 192.168.4.5:22
[root@gw1 ~]# iptables -t nat -nL PREROUTING Chain PREROUTING (policy ACCEPT) target prot opt source destination DNAT tcp – 0.0.0.0/0 174.16.16.1 tcp dpt:80 to:192.168.4.5 DNAT tcp – 0.0.0.0/0 174.16.16.1 tcp dpt:2345 to:192.168.4.5:22 3)测试针对SSH服务的DNAT转换 从外网机pc120以SSH连接174.16.16.1的2345端口,实际登入的是内网机svr5: [root@pc120 ~]# ssh -p 2345 root@174.16.16.1 “hostname” root@174.16.16.1’s password: //实际需验证svr5的root口令 svr5.tedu.cn //实际访问的是svr5 [root@pc120 ~]# 步骤三:通过DNAT策略发布内网的FTP服务器 1)准备测试环境 在内网机svr5上开启vsftpd服务: [root@svr5 ~]# yum -y install vsftpd … … [root@svr5 ~]# service vsftpd restart … … [root@svr5 ~]# echo “FTP Test 5.” > /var/ftp/a.txt //部署FTP测试文件 关闭网关gw1上的vsftpd服务: [root@gw1 ~]# service vsftpd stop 关闭 vsftpd: [确定] 2)未启用DNAT策略时,外网无法访问私网FTP服务器 尝试访问gw1的FTP端口时,因服务不可用而拒绝: [root@pc120 ~]# ftp 174.16.16.1 ftp: connect: 拒绝连接 ftp> quit [root@pc120 ~]# 尝试访问svr5的FTP端口时,因目标地址为私网地址而不可达: [root@pc120 ~]# ftp 192.168.4.5 ftp: connect: 网络不可达 ftp> quit [root@pc120 ~]# 3)在网关gw1上添加DNAT规则 添加的规则应该在nat表内,将从外网接口eth1进来、目标地址为174.16.16.1、目标端口为TCP 20或21的数据包,在路由选择之前将数据包的目标IP地址修改为内网实际FTP服务器svr5的IP地址192.168.4.5: [root@gw1 ~]# iptables -t nat -A PREROUTING -i eth1 -d 174.16.16.1 -p tcp --dport 20:21 -j DNAT --to-destination 192.168.4.5
[root@gw1 ~]# iptables -t nat -nL PREROUTING Chain PREROUTING (policy ACCEPT) target prot opt source destination DNAT tcp – 0.0.0.0/0 174.16.16.1 tcp dpt:80 to:192.168.4.5 DNAT tcp – 0.0.0.0/0 174.16.16.1 tcp dpt:2345 to:192.168.4.5:22 DNAT tcp – 0.0.0.0/0 174.16.16.1 tcp dpts:20:21 to:192.168.4.5 4)测试从外网访问内网的FTP服务 从外网机pc120访问174.16.16.1的FTP端口,实际上连接到内网机svr5的vsftpd服务,经DNAT转换后,能够成功登录,但是无法下载数据: [root@pc120 ~]# ftp 174.16.16.1 Connected to 174.16.16.1 (174.16.16.1). 220 (vsFTPd 2.2.2) Name (174.16.16.1:root): ftp 331 Please specify the password. Password: 230 Login successful. //成功登入 Remote system type is UNIX. Using binary mode to transfer files. ftp> ls //获取目录列表失败 227 Entering Passive Mode (192,168,4,5,204,144). ftp: connect: 网络不可达 ftp> quit 221 Goodbye. [root@pc120 ~]# 4)在网关gw1上加载FTP相关模块 [root@gw1 ~]# modprobe nf_nat_ftp nf_conntrack_ftp //加载内核模块
[root@gw1 ~]# lsmod | grep nat_ftp //确认结果 nf_nat_ftp 3507 0 nf_conntrack_ftp 12913 1 nf_nat_ftp nf_nat 22759 2 nf_nat_ftp,iptable_nat nf_conntrack 79758 7 nf_nat_ftp,nf_conntrack_ftp,iptable_nat,nf_nat,nf_conntrack_ipv4,nf_conntrack_ipv6,xt_state 5)再次测试从外网访问内网的FTP服务 从外网机pc120访问174.16.16.1的FTP端口,实际上连接到内网机svr5的vsftpd服务,可以成功登录,也可以下载数据: [root@pc120 ~]# ftp 174.16.16.1 Connected to 174.16.16.1 (174.16.16.1). 220 (vsFTPd 2.2.2) Name (174.16.16.1:root): ftp 331 Please specify the password. Password: 230 Login successful. //成功登入 Remote system type is UNIX. Using binary mode to transfer files. ftp> ls //获取目录列表成功 227 Entering Passive Mode (174,16,16,1,237,199). 150 Here comes the directory listing. drwxr-xr-x 3 14 0 4096 Apr 11 06:53 pub drwxr-xr-x 2 0 0 4096 Apr 27 02:13 rhel6 … … 226 Directory send OK. ftp> quit 221 Goodbye. [root@pc120 ~]#