新書推薦:
《
不止江湖
》
售價:NT$
449.0
《
天才留步!——从文艺复兴到新艺术运动(一本关于艺术天才的鲜活故事集,聚焦艺术史的高光时刻!)
》
售價:NT$
704.0
《
双城史
》
售價:NT$
505.0
《
冯友兰和青年谈心系列:不是问题的问题(哲学大师冯友兰和年轻人谈心,命运解读)
》
售價:NT$
254.0
《
月与蟹(青鲤文库)荣获第144届直木奖,天才推理作家经典作品全新译本。一部青春狂想曲,带你登上心理悬疑之巅。
》
售價:NT$
230.0
《
索恩丛书·盛清统治下的太监与皇帝
》
售價:NT$
403.0
《
透过器物看历史(全6册)
》
售價:NT$
2234.0
《
我在台北故宫博物院读名画
》
售價:NT$
500.0
編輯推薦:
知识体系涵盖Linux系统管理应掌握的各个方面,覆盖了系统管理员应具备的各方面知识和技能。? 注重实践和应用,从Linux入门、系统管理入门、网络管理入门到Linux系统的高级运维等重要方面都做了详尽的描述。? 写作过程中提供大量的系统管理技巧和示例,使读者在实际应用时能快速上手,并且在遇到问题时能够在本书中获得有益的参考。? 实例详尽、图文并茂、示例清晰,且所有案例均在实践环境中经过检验。? 既适合院校教学过程,也适合读者自学掌握。每节均配有相关习题,可帮助读者全面掌握相关知识点。
內容簡介:
Red Hat Enterprise Linux 7发布已经超过1年时间了,不同于以往的版本,红帽公司在新版本上进行了大刀阔斧的改革,包括系统架构、防火墙管理工具等核心部件都已经发生了改变。本书就是立足于Red Hat Enterprise Linux 7版本,带领读者学会最基本的Linux系统管理和网络管理。 本书分为3部分:第1部分是Linux入门,包括必须掌握的Linux基础、Red Hat Enterprise Linux的安装、图形界面、命令行界面;第2部分是Linux系统管理入门,包括Red Hat Enterprise Linux 7新架构、日志系统、用户和组、应用程序的管理、系统启动控制与进程管理;第3部分是高级运维,包括Linux网络管理、网络文件共享、搭建MySQL服务、配置Oracle数据库、LAMP、NAT上网、集群负载均衡LVS、集群技术与双机热备、Linux防火墙管理、KVM虚似化、安装OpenStack、Hadoop和Spark部署。 本书示例丰富、代码实用,是广大Linux系统管理员入门必看书籍,也可作为各大Linux培训学校的企业级Linux培训教程。
關於作者:
孙亚南,Linux高级运维工程师,Linux培训讲师。
目錄 :
第1章 必须掌握的Linux基础 11.1 认识Linux 11.1.1 Windows与Linux的区别 11.1.2 UNIX与Linux的区别 21.2 GNU公共许可证 21.3 Linux的内核版本 31.4 Linux的发行版本 31.5 Red Hat Enterprise Linux 7的新特性 31.5.1 systemd服务管理软件 41.5.2 网络 41.5.3 文件系统和存储 51.5.4 虚拟化 61.6 学习Linux的建议 61.7 小结 71.8 习题 7第2章 Red Hat Enterprise Linux的安装 82.1 安装前的准备 82.1.1 硬件准备 82.1.2 选择安装方式 92.2 在虚拟机上安装Linux 102.2.1 虚拟机简介 102.2.2 安装VMware虚拟机 112.2.3 创建虚拟机 132.2.4 安装Red Hat Enterprise Linux 152.3 Linux的第一次启动 252.3.1 本地登录 252.3.2 远程登录 262.4 小结 282.5 习题 29
第3章 Red Hat Enterprise Linux 的图形界面 303.1 Linux的桌面系统简介 303.1.1 X Window系统 303.1.2 KDE桌面环境 313.1.3 GNOME桌面环境 323.2 桌面系统的操作 323.2.1 菜单管理 333.2.2 设置输入法 333.2.3 设置日期和时间 343.2.4 配置网卡和有线 353.2.5 使用U盘、光盘和移动硬盘 363.2.6 注销和关机 373.3 小结 373.4 习题 38第4章 Red Hat Enterprise Linux 的命令行界面 394.1 认识Linux命令行模式 394.1.1 为什么要先学习Shell 404.1.2 如何进入命令行 414.2 bash Shell的使用 424.2.1 别名的使用 424.2.2 历史命令的使用 434.2.3 命令补齐 444.2.4 命令行编辑 444.2.5 通配符 454.3 管道与重定向 464.3.1 标准输入与输出 464.3.2 输入重定向 474.3.3 输出重定向 494.3.4 错误输出重定向 504.3.5 管道 514.4 Linux的目录结构 514.5 常用运维命令 534.5.1 过滤文本grep 534.5.2 文本操作awk和sed 584.5.3 打包或解包文件tar 594.5.4 压缩或解压缩文件和目录zipunzip 604.5.5 查看系统负载uptime 624.5.6 显示系统内存状态free 634.5.7 单次任务at 634.5.8 周期任务crond 644.5.9 使用poweroff 终止系统运行 664.5.10 使用init命令改变系统运行级别 664.6 文本编辑器vi的使用 674.6.1 进入与退出 vi 674.6.2 移动光标 674.6.3 输入文本 684.6.4 复制与粘贴 684.6.5 删除与修改 694.6.6 查找与替换 694.6.7 执行Shell命令 694.6.8 保存文档 704.7 范例用脚本备份重要文件和目录 704.8 小结 734.9 习题 73第5章 Linux文件管理与磁盘管理 755.1 认识Linux分区 755.2 Linux中的文件管理 765.2.1 文件的类型 765.2.2 文件的属性与权限 785.2.3 改变文件所有权 795.2.4 改变文件权限 805.3 Linux中的磁盘管理 825.3.1 查看磁盘空间占用情况 825.3.2 查看文件或目录所占用的空间 835.3.3 调整和查看文件系统参数 845.3.4 格式化文件系统 855.3.5 挂载卸载文件系统 865.3.6 基本磁盘管理 885.4 交换空间管理 925.5 磁盘冗余阵列RAID 935.6 范例监控硬盘空间 945.7 小结 955.8 习题 95第6章 Linux日志系统 976.1 Linux中常见的日志文件 976.2 Linux日志系统 1006.2.1 rsyslog日志系统简介 1016.2.2 rsyslog配置文件及语法 1016.3 使用日志轮转 1036.3.1 logrotate命令及配置文件参数说明 1036.3.2 利用logrotate轮转Nginx日志 1056.4 范例利用系统日志定位问题 1066.4.1 查看系统登录日志 1076.4.2 查看历史命令 1076.4.3 查看系统日志 1076.5 小结 1076.6 习题 108第7章 用户和组 1097.1 Linux的用户管理 1097.1.1 Linux用户登录过程 1097.1.2 Linux的用户类型 1107.2 Linux用户管理机制 1117.2.1 用户账号文件etcpasswd 1117.2.2 用户密码文件etcshadow 1127.2.3 用户组文件etcgroup 1137.3 Linux用户管理命令 1137.3.1 添加用户 1137.3.2 更改用户 1157.3.3 删除用户 1167.3.4 更改或设置用户密码 1167.3.5 su切换用户 1177.3.6 sudo普通用户获取超级权限 1197.4 用户组管理命令 1207.4.1 添加用户组 1207.4.2 删除用户组 1217.4.3 修改用户组 1217.4.4 查看用户所在的用户组 1227.5 范例批量添加用户并设置密码 1227.6 小结 1247.7 习题 124第8章 应用程序的管理 1268.1 软件包管理基础 1268.1.1 RPM 1278.1.2 DPKG 1278.2 RPM的使用 1278.2.1 安装软件包 1278.2.2 升级软件包 1308.2.3 查看已安装的软件包 1318.2.4 卸载软件包 1318.2.5 查看一个文件属于哪个RPM包 1328.2.6 获取RPM包的说明信息 1328.3 从源代码安装软件 1338.3.1 软件配置 1338.3.2 编译软件 1348.3.3 软件安装 1348.4 普通用户如何安装常用软件 1388.5 Linux函数库 1408.6 范例从源码安装Web服务软件Nginx 1418.7 小结 1468.8 习题 147第9章 系统启动控制与进程管理 1489.1 启动管理 1489.1.1 Linux系统的启动过程 1489.1.2 Linux运行级别 1499.1.3 服务单元控制 1509.2 Linux进程管理 1559.2.1 进程的概念 1559.2.2 进程管理工具与常用命令 1569.3 系统运维常见操作 1639.3.1 更改Linux的默认运行级别 1639.3.2 更改sshd默认端口22 1639.3.3 查看某一个用户的所有进程 1649.3.4 确定占用内存比较高的程序 1659.3.5 终止进程 1659.3.6 终止属于某一个用户的所有进程 1669.3.7 根据端口号查找对应进程 1669.4 范例进程监控 1669.5 小结 1689.6 习题 168第10章 Linux网络管理 16910.1 网络管理协议 16910.1.1 TCPIP协议简介 16910.1.2 UDP与ICMP协议简介 17110.2 网络管理命令 17210.2.1 检查网络是否通畅或网络连接速度ping 17210.2.2 配置网络或显示当前网络接口状态ifconfig 17410.2.3 显示添加或修改路由表route 17710.2.4 复制文件至其他系统scp 17710.2.5 复制文件至其他系统rsync 17910.2.6 显示网络连接、路由表或接口状态netstat 18110.2.7 探测至目的地址的路由信息traceroute 18310.2.8 测试、登录或控制远程主机telnet 18510.2.9 下载网络文件wget 18610.3 Linux网络配置 18710.3.1 Linux网络相关配置文件 18810.3.2 配置Linux系统的IP地址 18810.3.3 设置主机名 19010.3.4 设置默认网关 19110.3.5 设置DNS服务器 19110.4 动态主机配置协议DHCP 19210.4.1 DHCP的工作原理 19210.4.2 配置DHCP服务器 19310.4.3 配置DHCP客户端 19410.5 Linux域名服务DNS 19510.5.1 DNS简介 19610.5.2 DNS服务器配置 19610.5.3 DNS服务测试 20110.6 范例监控网卡流量 20110.7 小结 20410.8 习题 204第11章 网络文件共享NFS、Samba和FTP 20511.1 网络文件系统NFS 20511.1.1 网络文件系统NFS 简介 20511.1.2 配置 NFS 服务器 20611.1.3 配置NFS客户端 21011.2 文件服务器Samba 21111.2.1 Samba 服务简介 21111.2.2 Samba服务的安装与配置 21111.3 FTP服务器 21611.3.1 FTP 服务概述 21611.3.2 vsftp的安装与配置 21711.3.3 proftpd的安装与配置 22411.3.4 如何设置FTP才能实现文件上传 22911.4 小结 23011.5 习题 230第12章 搭建MySQL服务 23112.1 MariaDB简介 23112.2 MariaDB服务的安装与配置 23212.2.1 MariaDB概述 23212.2.2 MariaDB rpm包安装 23212.2.3 MariaDB源码安装 23512.2.4 MariaDB程序介绍 23712.2.5 MariaDB配置文件介绍 23712.2.6 MariaDB的启动与停止 23912.3 MariaDB基本管理 24612.3.1 使用本地socket方式登录MariaDB服务器 24612.3.2 使用TCP方式登录MariaDB服务器 24712.3.3 MariaDB存储引擎 24912.4 MariaDB日常维护 25212.4.1 MariaDB权限管理 25212.4.2 MariaDB日志管理 25712.4.3 MariaDB备份与恢复 26212.4.4 MariaDB复制 26912.4.5 MariaDB复制搭建过程 27112.5 小结 27612.6 习题 276第13章 安装和配置Oracle数据库管理系统 27813.1 Oracle数据库管理系统简介 27813.1.1 Oracle的版本命名机制 27813.1.2 Oracle的版本选择 28013.2 Oracle数据库体系结构 28113.2.1 认识Oracle数据库管理系统 28113.2.2 物理存储结构 28213.2.3 逻辑存储结构 28213.2.4 数据库实例 28313.3 安装Oracle数据库服务器 28313.3.1 检查软硬件环境 28413.3.2 下载Oracle安装包 28513.3.3 依赖软件包安装 28613.3.4 创建Oracle用户组和用户 29013.3.5 修改内核参数 29113.3.6 修改用户限制 29213.3.7 修改用户配置文件 29313.3.8 准备安装目录和安装文件 29313.3.9 安装软件 29413.4 创建数据库 30213.4.1 用DBCA创建数据库 30213.4.2 手工创建数据库 30513.4.3 打开数据库 30613.4.4 关闭数据库 30713.5 小结 30813.6 习题 308第14章 Apache服务和LAMP 30914.1 Apache HTTP服务的安装与配置 30914.1.1 HTTP 协议简介 30914.1.2 Apache服务的安装、配置与启动 31114.1.3 Apache基于IP的虚拟主机配置 32414.1.4 Apache基于端口的虚拟主机配置 32714.1.5 Apache基于域名的虚拟主机配置 32914.1.6 Apache安全控制与认证 33214.2 LAMP集成的安装、配置与测试实战 33714.3 习题 342第15章 Linux路由 34415.1 认识Linux路由 34415.1.1 路由的基本概念 34415.1.2 路由的原理 34515.1.3 路由表 34515.1.4 静态路由和动态路由 34615.2 配置Linux静态路由 34615.2.1 配置网络接口地址 34615.2.2 测试网卡接口IP配置状况 35015.2.3 route命令介绍 35115.2.4 普通客户机的路由设置 35215.2.5 Linux路由器配置实例 35215.3 Linux的策略路由 35315.3.1 策略路由的概念 35315.3.2 路由表的管理 35415.3.3 路由管理 35515.3.4 路由策略管理 35615.3.5 策略路由应用实例 35815.4 小结 36115.5 习题 361第16章 配置NAT上网 36216.1 认识NAT 36216.1.1 NAT的类型 36216.1.2 NAT的功能 36316.2 Linux下的NAT服务配置 36316.2.1 Firewalld简介 36416.2.2 在RHEL上配置NAT服务 36416.2.3 局域网通过配置NAT上网 36716.3 小结 36716.4 习题 367第17章 Linux性能检测与优化 36817.1 Linux性能评估与分析工具 36817.1.1 CPU相关 36917.1.2 内存相关 37017.1.3 硬盘IO相关 37217.1.4 网络性能评估 37317.2 Linux内核编译与优化 37417.2.1 编译并安装内核 37417.2.2 常用内核参数的优化 37517.3 小结 37717.4 习题 377第18章 集群负载均衡LVS 37918.1 集群技术简介 37918.2 LVS 集群介绍 38018.2.1 3种负载均衡技术 38018.2.2 负载均衡调度算法 38318.3 LVS 集群的体系结构 38418.4 LVS负载均衡配置实例 38418.4.1 基于NAT模式的LVS的安装与配置 38518.4.2 基于DR模式的LVS的安装与配置 38818.4.3 基于IP隧道模式的LVS的安装与配置 39118.5 小结 39318.6 习题 393第19章 集群技术与双机热备软件 39519.1 高可用性集群技术 39519.1.1 可用性和集群 39519.1.2 集群的分类 39619.2 双机热备开源软件Pacemaker 39619.2.1 Pacemaker概述 39719.2.2 Pacemaker的安装与配置 39719.2.3 Pacemaker测试 40519.3 双机热备软件keepalived 40819.3.1 认识keepalived 40819.3.2 keepalived的安装与配置 40919.3.3 keepalived的启动与测试 41119.4 小结 41319.5 习题 413第20章 Linux防火墙管理 41420.1 防火墙管理工具Firewalld 41420.1.1 Linux内核防火墙的工作原理 41420.1.2 Linux软件防火墙配置工具Firewalld 41720.1.3 Firewalld配置实例 41820.2 Linux高级网络配置工具 42220.2.1 高级网络管理工具iproute2 42220.2.2 网络数据采集与分析工具tcpdump 42520.3 小结 42820.4 习题 428第21章 KVM虚拟化 42921.1 KVM虚拟化技术概述 42921.1.1 基本概念 42921.1.2 硬件要求 43021.2 安装虚拟化软件包 43121.2.1 通过yum命令安装虚拟化软件包 43121.2.2 以软件包组的方式安装虚拟化软件包 43221.3 安装虚拟机 43321.3.1 安装Linux虚拟机 43321.3.2 安装Windows虚拟机 43521.4 管理虚拟机 43721.4.1 虚拟机管理器简介 43721.4.2 查询或者修改虚拟机硬件配置 43921.4.3 管理虚拟网络 44121.4.4 管理远程虚拟机 44421.4.5 使用命令行执行高级管理 44421.5 存储管理 44721.5.1 创建基于磁盘的存储池 44821.5.2 创建基于磁盘分区的存储池 44921.5.3 创建基于目录的存储池 44921.5.4 创建基于LVM的存储池 45021.5.5 创建基于NFS的存储池 45121.6 KVM安全管理 45221.6.1 SELinux 45221.6.2 防火墙 45221.7 小结 45321.8 习题 453第22章 在RHEL 7.2上安装OpenStack 45422.1 OpenStack概况 45422.2 OpenStack系统架构 45522.2.1 OpenStack体系架构 45522.2.2 OpenStack部署方式 45622.2.3 计算模块Nova 45822.2.4 分布式对象存储模块Swift 45822.2.5 虚拟机镜像管理模块Glance 45922.2.6 身份认证模块Keystone 45922.2.7 控制台Horizon 46022.3 Openstack的主要部署工具 46122.3.1 Fuel 46122.3.2 TripleO 46122.3.3 RDO 46222.3.4 DevStack 46222.4 通过RDO部署OpenStack 46222.4.1 部署前的准备 46222.4.2 配置安装源 46222.4.3 安装Packstack 46322.4.4 安装OpenStack 46322.5 管理OpenStack 46722.5.1 登录控制台 46822.5.2 用户设置 46922.5.3 管理用户 47022.5.4 管理镜像 47122.5.5 管理云主机类型 47422.5.6 管理网络 47622.5.7 管理实例 48322.6 小结 49122.7 习题 492第23章 配置Hadoop 49323.1 认识大数据和Hadoop 49323.1.1 大数据时代 49323.1.2 大数据时代的困境和思路 49423.1.3 Hadoop简介 49523.2 Hadoop架构 49523.2.1 分布式文件系统HDFS 49623.2.2 MapReduce计算框架 49723.2.3 Hadoop架构特点 49923.3 安装Hadoop 50023.3.1 环境配置 50023.3.2 安装JDK 50423.3.3 Hadoop配置 50723.3.4 启动Hadoop 51423.4 小结 51823.5 习题 518第24章 配置Spark 51924.1 Spark基础知识 51924.1.1 Spark概述 51924.1.2 Spark、MapReduce运行框架 52024.1.3 Spark的模式 52224.2 安装Spark 52324.2.1 环境准备 52324.2.2 安装JDK和Scala 52624.2.3 安装配置Hadoop 52824.2.4 安装Spark 53524.3 小结 53924.4 习题 540
內容試閱 :
学习Linux系统管理最好的方法,不是看懂一本书,而是学会一个操作。这个操作可以是一个命令、一个Shell程序、一个配置,甚至是一个集群的搭建。要学会一个操作,就要按照详细的步骤去动手演练。本书提供的就是这些详细的步骤,读者要学的就是阅读本书并亲自动手实践。目前市场上很多相关图书对于系统管理内容都是泛泛而谈,没有具体的技术点,没有详细的过程,而本书正弥补了这一不足。与之前的版本更新不同,Red Hat Enterprise Linux 7是一个全新的设计。红帽公司这次更换了新的构架,包括Sys V和iptables在内的核心部件被更换,以换取更好的性能、更简单的配置以及核心资源的优化设计。可以预见在不久的将来,Red Hat Enterprise Linux 7必将被广泛使用。本书特色? 知识体系涵盖Linux系统管理应掌握的各个方面,覆盖了系统管理员应具备的各方面知识和技能。? 注重实践和应用,从Linux入门、系统管理入门、网络管理入门到Linux系统的高级运维等重要方面都做了详尽的描述。? 写作过程中提供大量的系统管理技巧和示例,使读者在实际应用时能快速上手,并且在遇到问题时能够在本书中获得有益的参考。? 实例详尽、图文并茂、示例清晰,且所有案例均在实践环境中经过检验。? 既适合院校教学过程,也适合读者自学掌握。每节均配有相关习题,可帮助读者全面掌握相关知识点。内容安排本书共24章,目录体系涵盖Linux系统管理员需要掌握的各个方面,首先教会入门读者如何安装和使用Linux,然后介绍一些常用的Linux系统管理命令,最后教会读者如何在Linux上进行运维部署。本书的主要内容包括:? Linux基础? Red Hat Enterprise Linux的安装? Red Hat Enterprise Linux的图形界面? Red Hat Enterprise Linux的命令行界面? Linux文件管理与磁盘管理? Linux日志系统? 用户和组? 应用程序的管理? 系统启动控制与进程管理? Linux网络管理? 网络文件共享NFS、Samba和FTP? 搭建MySQL服务? 安装和配置Oracle数据库管理系统? Apache服务和LAMP? Linux路由? 配置NAT上网? Linux性能检测与优化? 集群负载均衡LVS? 集群技术与双机热备软件? Linux防火墙管理? KVM虚似化? 安装OpenStack? 配置Hadoop? Spark on Yarn平台安装本书内容安排由浅入深,内容精炼,技术体系全面详尽。面向读者? Linux开发人员? Linux爱好者? Linux系统管理员? 网络管理工程师? 专业Linux培训机构的学员? 需要一本系统管理查询手册的人员本书由平顶山学院网络管理中心的孙亚南和李勇主笔,其中第1~15章由孙亚南编写,第16~24章由李勇编写。参与本书创作的还有王立平、刘祥淼、彭霁、樊爱宛、张泽娜、曹卉、林江闽、沈超、李阳、李雷霆、韩广义、杨旺功、熊伟,在此表示感谢。由于编者水平有限,书中不足之外在所难免,欢迎广大读者批评指正。
编者2016年6月
第 16 章? 配置NAT上网 ?在20世纪90年代,随着互联网的飞速发展,连接到互联网的设备也急速增长,导致IP地址发生了完全枯竭的现象。为了应对这种情况,网络地址转换(Network Address Translation,NAT)作为一种解决方案逐渐流行起来。它在一定程度上缓解了IPv4地址不足的压力,另一方面也提高了内部网络的安全性。
本章主要涉及的知识点有:? 认识NAT? Linux下的NAT配置16.1 认识NATNAT是一种广域网接入技术,是一种将私有地址转化为合法IP地址的转换技术,它被广泛应用于各种类型的Internet接入方式和各种类型的网络中。原因很简单,NAT不仅完美地解决了IP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。本节将介绍NAT的基础知识。16.1.1 NAT的类型网络地址转换(Network Address Translation,NAT)是将IP数据包头中的IP地址转换为另外一个IP地址的过程。在实际应用中,NAT主要用来实现私有网络中的主机访问公共网络的功能。通过网络地址转换,可以使用少量的公有IP地址代表较多的私有IP地址,有助于减缓公有IP地址空间的枯竭。所谓私有IP地址,是指内部网络或者主机的IP地址,公有IP地址是指在国际互联网上全球唯一的IP地址。私有IP地址有以下3类。A类:10.0.0.0~10.255.255.255B类:172.16.0.0~172.31.255.255C类:192.168.0.0~192.168.255.255上述3个范围内的地址不会在因特网上被分配,因此可以不必向ISP或注册中心申请而在公司或企业内部自由使用。一般来说,NAT的实现方式主要有3种,分别为静态转换、动态转换和端口多路复用。所谓静态转换,是指将内部网络的私有IP地址转换为公有IP地址,在这种情况下,私有IP地址和公有IP地址是一一对应的,也就是说,某个私有IP地址只转换为某个公有IP地址。动态转换指将内部网络的私有IP地址转换为公用IP地址时,IP地址是不确定的,是随机的,也就是说,在进行动态转换时,系统会自动随机选择一个没有被使用的公有IP地址作为私有IP地址转换的对象。端口多路复用是指修改数据包的源端口并进行端口转换。在这种情况下,内部网络的多台主机可以共享一个合法公有IP地址,从而最大限度地节约IP地址资源。端口多路复用是目前应用最多的NAT类型。端口多路复用通常用来实现外部网络的主机访问私有网络内部的资源。当外部主机访问共享的公有IP的不同端口时,NAT服务器会根据不同的端口将请求转发到不同的内部主机,从而为外部主机提供服务。16.1.2 NAT的功能NAT的主要功能是在数据包通过路由器的时候,将私有IP地址转换成合法的IP地址。这样,一个局域网只需要少量的公有IP地址,就可以实现网内所有的主机与互联网通信的需求,如图16.1所示。从图16.1可以看出,NAT会自动修改IP报文的源IP地址和目的IP地址,IP地址校验在NAT处理过程中自动完成。但是,有些应用程序将源IP地址嵌入到IP报文的数据部分中,所以在这种情况下,还需要同时对报文的数据部分进行修改。NAT不仅可以实现内部网络内的主机访问外部网络资源,还可以实现外部网络的主机访问内部网络的主机。通过NAT可以隐藏内部网络的主机,提高内部网络主机的安全性。16.2 Linux下的NAT服务配置利用RHEL,可以非常方便地实现NAT服务,使得内部网络的主机能够与互联网上面的主机进行通信。本节将对NAT的配置方法进行系统的介绍。16.2.1 Firewalld简介在RHEL 7之前的版本中,防火墙管理工具使用的是iptables和ip6tables。但在最新的RHEL 7中防火墙管理工具变成了Firewalld,它是一个支持定义网络区域(zone)及接口安全等级的动态防火墙管理工具。利用Firewalld,用户可以实现许多强大的网络功能,例如防火墙、代理服务器以及网络地址转换。之前版本的system-config-firewall和lokkit防火墙模型是静态的,每次修改防火墙规则都需要完全重启,在此过程中包括提供防火墙功能的内核模块netfilter都需要卸载和重新加载。而卸载会破坏已经建立的连接和状态防火墙。与之前的静态模型不同,Firewalld将动态的管理防火墙,不需要重新启动防火墙,也不需要重新加载内核模块。但Firewalld服务要求所有关于防火墙的变更都要通过守护进程来完成,从而确保守护进程中的状态与内核防火墙之间的一致性。许多人都认为RHEL 7中的防火墙从iptables变成了Firewalld,其实不然,无论是iptables还是Firewalld都无法提供防火墙功能。他们都只是Linux系统中的一个防火墙管理工具,负责生成防火墙规则并与内核模块netfilter进行交流,真正实现防火墙功能的是内核模块netfilter。Firewalld提供了两种管理方式,其一是firewall-cmd命令行管理工具,其二是firewall-config图形化管理工具。在之前版本中的iptables将规则保存在文件etcsysconfigiptables中,现在Firewalld将配置文件存放在usrlibfirewalld和etcfirewalld目录下的XML文件中。虽然RHEL 7中默认的防火墙工具从iptables变成了Firewalld,但在RHEL 7中仍然可以继续使用iptables,红帽将这个选择权交给了用户。RHEL 7的防火墙堆栈如图16.2所示。图16.2 RHEL 7防火墙堆栈从图16.2中可以看出,无论使用的是Firewalld还是iptables,最终都是由iptables命令来为内核模块netfilter提交防火墙规则。另外,如果决定使用iptables,就应该将Firewalld禁用掉,以免出现混乱。16.2.2 在RHEL上配置NAT服务下面以一个具体的例子来说明如何在RHEL上配置NAT服务,使得内部网络的主机可以访问外部网络的资源。图16.3描述了一个简单的网络拓扑结构。RHEL主机有两个网络接口,其中eno50332216连接内部网络交换机,其IP地址为192.168.0.1,子网掩码为255.255.255.0;eno16777736连接外部网络,其IP地址为运营商提供的公有IP地址114.242.25.2,子网掩码为255.255.255.0,网关为114.242.25.1,DNS服务器为202.106.0.20。内部网络的IP地址段为192.168.0.024。图16.3 网络拓扑结构接下来的任务是配置RHEL主机,使其成为一台NAT服务器,供内部网络主机访问外部网络资源,步骤如下。 开启转发功能,命令如下:[root@localhost ~]# echo 1 procsysnetipv4ip_forward[root@localhost ~]# cat procsysnetipv4ip_forward1第1条命令将字符串1写入procsysnetipv4ip_forward文件,第2条命令验证是否写入成功。如果输出1,则表示修改成功。开启RHEL转发功能之后,内部网络的主机就可以ping通eno16777736的IP地址、网关以及DNS了。上面第1条命令中的为输出重定向符号。其功能是将echo命令的输出结果重定向到后面的磁盘文件中。 配置NAT规则。经过上面配置后,虽然可以ping通eno16777736的IP地址,但是此时内部网络中的计算机还是无法上网。问题在于内网主机的IP地址是无法在公网上路由的。因此,需要通过NAT将内网办公终端的IP转换成RHEL主机eno16777736接口的IP地址。为了实现这个功能,首先需要将接口eno16777736加入到外部网络区域中。在Firewalld中,外部网络补定义为一个直接与外部网络相连接的区域,来自此区域中的主机连接将不被信任,关于区域的更多信息可以查阅本书第20章了解详情,此处不再赘述。在开始配置之前,需要正确配置相关接口的IP地址等信息,接下来就可以使用命令的方法将接口eno16777736加入外部区域external:#查看接口eno16777736所属的区域[root@localhost ~]# firewall-cmd --get-zone-of-interface=eno16777736public#改变区域为external[root@localhost ~]# firewall-cmd --permanent --zone=external --change-interface=eno16777736success#查看外部区域的配置[root@localhost ~]# firewall-cmd --zone=external --list-allexternal active interfaces: eno16777736 sources: services: ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules:#由于需要使用NAT上网,因此还需要将外部区域的伪装打开[root@localhost ~]# firewall-cmd --permanent --zone=external --add-masqueradesuccess[root@localhost ~]# firewall-cmd --zone=external --list-allexternal active interfaces: eno16777736 sources: services: ssh ports: masquerade: yes forward-ports: icmp-blocks: rich rules:完成外部接口的配置后,接下来将配置内部接口eno50332216,具体做法是将内部接口加入到内部区域internal中:#查看内部接口所属的区域[root@localhost ~]# firewall-cmd --get-zone-of-interface=eno50332216no zone[root@localhost ~]# firewall-cmd --permanent --zone=internal --change-interface=eno50332216success到此为止,所有在RHEL主机上的配置都已经完成。接下来的任务是配置内部网络主机,使其可以访问外部网络。16.2.3 局域网通过配置NAT上网局域网内的主机配置比较简单,只要设置好网络参数即可。其中所有主机的网关都应该设置为REHL主机的网络接口eno50332216的IP地址,即192.168.0.1。内部网络的主机的DNS服务器设置为运营商提供的DNS服务器的地址,即202.106.0.20。通过以上设置,内部网络的主机就可以访问外部网络的资源了。本例中的设置仅仅使得内部网络的主机可以访问外部网络资源,但是外部网络的主机却无法访问内部网络的主机。如果想要外部网络的主机可以访问内部网络资源,则需要进行相应的端口映射。16.3 小结本章详细介绍了如何在RHEL系统中实现NAT功能,主要内容包括NAT的类型、NAT的功能等。最后以一个具体的例子说明如何通过Firewalld在RHEL上面配置NAT服务,以实现内部网络的多台主机访问外部网络的资源。本章的重点在于掌握好NAT的基本知识,以及学习如何使用Firewalld实现NAT服务。16.4 习题1.列举出私有IP地址范围。2.使用Firewalld实现NAT功能,并完成以下任务:(1)开启路由功能。(2)使用SNAT实现共享上网。