CentOS7搭建网关、DHCP服务
网络拓扑
我们要搭建网关的网络拓扑如下,将centos服务器搭建成网关
图1
说明:
eth1是内网网卡接口,ip是:192.168.1.1/24
eth0是外网网卡接口,ip是:10.10.90.107/24
使用工具
如果系统有自带防火墙 firewalld,需要关闭,并禁止开机自启动
systemctl stop firewalld # 停止 firewalld 服务 systemctl disable firewalld # 禁止开机自启动服务
安装 iptables 防火墙和 dhcp 服务
yum -y install iptables-services # 安装 iptables yum -y install dhcp # 安装 dhcp
iptables介绍
iptalbes的构架如图
图2
一共有五个环节 PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING,两条路线。
发给本主机的数据包:入口==》PREROUTING ==》INPUT ==》主机 ==》OUTPUT ==》POSTROUTING ==》出口
需要经过服务器转发的数据包: 入口 ==》PREROUTING ==》FORWARD ==》POSTROUTING ==》出口
每个关节都可以实现如上图所示的功能,一共有四个:
raw :高级功能,如网址装换,一般不用
mangle:高级功能,数据包的修改,一般不用
nat:地址转换,对源地址或者目的地址进行修改
filter:过滤器,过滤不符合要求的包
iptables的简单指令
-t<表>:指定要操纵的表;
-A:向规则链中添加条目;
-D:从规则链中删除条目;
-I:向规则链中插入条目;
-R:替换规则链中的条目;
-L:显示规则链中已有的条目;
-F:清楚规则链中已有的条目;
-Z:清空规则链中的数据包计算器和字节计数器;
-N:创建新的用户自定义规则链;
-P:定义规则链中的默认目标;
-h:显示帮助信息;
-p:指定要匹配的数据包协议类型;
-s:指定要匹配的数据包源ip地址;
-j<目标>:指定要跳转的目标;
-i<网络接口>:指定数据包进入本机的网络接口;
-o<网络接口>:指定数据包要离开本机所使用的网络接口。
我们来介绍一下怎么添加 iptables 的规则:
首先看看我的设置的规则表以及注释:
[[email protected] ~]# cat /etc/sysconfig/iptables # Generated by iptables-save v1.4.21 on Sat Apr 21 17:49:38 2018 *nat # nat 表,即转发表 :PREROUTING ACCEPT [94:4332] # 在 PREROUTING 环节中默认是通过所有包 :INPUT ACCEPT [3:400] # 在 INPUT 环节中默认是通过所有包 :OUTPUT ACCEPT [0:0] # 在 OUTPUT 环节中默认是通过所有包 :POSTROUTING ACCEPT [0:0] # 在 POSTROUTING 环节中默认是通过所有包 -A PREROUTING -d 10.10.90.107/32 -i eth0 -p tcp -m tcp --dport 21 -j DNAT --to-destination 192.168.1.254 # 在 PREROUTING 环节中,将目的地址是 10.10.90.107(也就是图1中的eth0)、目的端口是21的采用 tcp 链接的数据包的目的地址转换成目的地址是 192.168.1.254。其中 -m tcp --dport 21 是连用的,意思是匹配 tcp 连接的21号端口。 -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 10.10.90.107 # 在 POSTROUTING 环节中,将原地址是 192.168.1.0/24 网络中的地址装换成 10.10.90.107 并通过网卡 eth0 传送出去 COMMIT # Completed on Sat Apr 21 17:49:38 2018 # Generated by iptables-save v1.4.21 on Sat Apr 21 17:49:38 2018 *filter # filter 表,即过滤表 :INPUT DROP [0:0] # 在 INPUT 环节,默认拒绝所有输入数据包(除下面规则允许的数据包外) :FORWARD DROP [0:0] # 在 FORWARD 环节,默认拒绝所有输入数据包(除下面规则允许的数据包外) :OUTPUT ACCEPT [0:0] # 在 OUTPUT 环节,默认允许所有输入数据包 -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # 这个很重要,意思是在 INPUT 环节允许已经建立连接的网络连接的数据包通过,就是说如果内网的 192.168.1.10 和 外网的 10.10.90.108 如果已经通信了,那么在 INPUT 环节直接放行 -A INPUT -i eth1 -p udp -m udp --dport 67:68 -j ACCEPT # 在 INPUT 环节,从端口 eth1 进入的 udp 连接的端口号为 67 到 68 的数据包放行。 -A INPUT -i eth1 -p tcp -m tcp --dport 22 -j ACCEPT # 在 INPUT 环节,从端口 eth1 进入的 tcp 连接的端口号为 22 的数据包放行。 -A INPUT -i eth0 -j ACCEPT # 在 INPUT 环节,从端口 eth0 进入的数据包放行。 -A INPUT -s 192.168.1.0/24 -i eth1 -j ACCEPT # 在 INPUT 环节,从端口 eth1 进入的源地址是 192.168.1.0/24 网络的数据包放行。 -A INPUT -s 10.10.90.107/32 -d 192.168.1.1/32 -j ACCEPT # 在 INPUT 环节,源地址是 10.10.90.107,目的地址是 192.168.1.1 的数据包放行,就是说允许从 eth0 到 eth1的传送。 -A FORWARD -s 192.168.1.0/24 -j ACCEPT # 在 FORWARD 环节,源地址是 192.168.1.0/24 网络的数据包放行。 -A FORWARD -d 192.168.1.254/32 -p tcp -m tcp --dport 21 -j ACCEPT # 在 FORWARD 环节,源地址是 192.168.1.254 的主机,采用 tcp 连接,并且端口是 21 的数据包放行。 -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT # 这个很重要,意思是在 FORWARD 环节允许已经建立连接的网络连接的数据包通过,和 INPUT 的意思一样 COMMIT # Completed on Sat Apr 21 17:49:38 2018
规则上面说的很清楚了,那么我们来试试怎么创建规则:
# 基本语法
iptables -t 表名 【选项名】{-A|D|I|..} 【环节】{INPUT|FORWARD|..} 【需要的操作】
# 例如
iptables -t nat -A INPUT .....
# 在 nat 表中加入一条在 INPUT 环节的规则,其中 filter 没有表名,直接省略 '-t 表名' 的输入,如
iptables -A FORWARD ...
# 在 filter 表中加入一条 FORWORD 环节的规则。
规则加好了后需要如下操作
# 打开系统的ip转发功能,并不用重启,立即生效 echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf sysctl -p # 保存你添加的规则,并重启 iptables 服务,当然,每次你修改规则后都要保存和重启服务 iptables-save > /etc/sysconfig/iptables # 保存修改规则 systemctl start iptables # 启动服务,适合你第一次运行 iptables systemctl enable iptables # 允许开机自启动 systemctl restart iptables # 重启服务
规则的查看和删除
iptables -t 表名(省略时为 filter 表)-L -n --line-numbers
iptables -t 表名(省略时为 filter 表)-D 环节 规则id
DHCP服务搭建
当规则建立成功后我们来看看 dhcp 的搭建,dhcp 服务很简单,只要配置指定文件就行
[[email protected] ~]# cat /etc/dhcp/dhcpd.conf # DHCP Server Configuration file. # see /usr/share/doc/dhcp*/dhcpd.conf.example # see dhcpd.conf(5) man page # 网络和子网掩码 subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.2 192.168.1.253; # 分配地址范围 option broadcast-address 192.168.1.255; # 网络广播地址 option routers 192.168.1.1; # 网关,这里是本主机ip,因为网关和dhcp服务都在本主机 option domain-name-servers 159.226.39.1; # dns 服务器ip,可以写多个,但不要写 8.8.8.8 option netbios-name-servers 192.168.1.1; # win 服务器ip option domain-name lan; # 搜索域 default-lease-time 86400; # 默认租用期,单位为s max-lease-time 86400; # 最长租用期 } # 下面是指定特定的主机为特定ip,如ftp host ftp_server { hardware ethernet 52:54:00:6f:f9:63; # 指定主机 mac 地址 fixed-address 192.168.1.254; # 为指定主机分配的ip }
搭建完成后
# 重启 dhcp 服务就行了 systemctl enable dhcpd # 启动 systemctl start dhcpd # 允许开机自启动 systemctl restart dhcpd # 重启