1.Centos7做DHCP服务器
DHCP工作原理
1.发现阶段:DHCP客户端寻找DHCP 服务器的阶段。客户端以广播方式发送 DISCOVER 报文。
2.提供阶段:DHCP服务器提供 IP 地址的阶段。DHCP 服务器接收到客户端的DISCOVER 报文后,根据 IP 地址分配的优先次序选出一个IP地址,与掩码,网关等其他参数一起通过OFFER报文发送给客户端。
3.请求阶段:如果有多台DHCP 服务器向该客户端发来OFFER报文 ,客户端只接受第一个收到的OFFER 报文,然后以广播方式发送 REQUEST 报文,该报文中包含DHCP 服务器在OFFER 报文中分配的 IP 地址。同时该报文中包含Option 54(服务器标识选项),即它选择的DHCP服务器的IP地址信息。
4.确认阶段:DHCP服务器确认IP 地址的阶段。DHCP 服务器收到DHCP 客户端发来的 REQUEST 报文后,只有DHCP 客户端选择的服务器会进行如下操作:如果确认地址分配给该客户端,则返回 ACK 报文;否则将返回NAK 报文,表明地址不能分配给该客户端。客户端收到服务器返回的ACK 确认报文后,会以广播的方式发送ARP 报文(目的地址是被分配到的地址)进行地址探测,如果在规定的时间内没有收到回应,客户端才使用此地址。
Centos7搭建DHCP服务器
[root@localhost ~]# yum -y install dhcp
#将配置文件模板复制到配置文件目录下使用(基于模板更改相关信息即可)
[root@localhost ~]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
[root@localhost ~]# vim /etc/dhcp/dhcpd.conf
option domain-name "ken.com"; #指定默认域名
option domain-name-servers 223.5.5.5; #指定 DNS 服务器地址
default-lease-time 21600; #默认租约为 6 小时,单位为秒
max-lease-time 43200; #最大租约为 12 小时,单位为秒
log-facility local7;
subnet 192.168.200.0 netmask 255.255.255.0 { #首先声明dhcp服务器网段以及子网掩码
}
subnet 192.168.200.0 netmask 255.255.255.0 { #其次声明网段以及子网(DHCP客户端获取的信息)
range 192.168.200.10 192.168.200.254; #地址池范围
option routers 192.168.200.1; #网关
}
#配置完上述启动服务即可
[root@localhost dhcp]# systemctl start dhcpd.service
如果启动失败可查看日志
[root@localhost dhcp]# cat /var/log/messages
此时已完成DHCP服务器配置,找一台主机和DHCP服务器同一广播域,接口开启DHCP自动获取测试,查看dhcp服务器日志已完成分派地址的4个阶段
[root@localhost dhcp]# cat /var/log/messages
Dec 5 19:35:08 localhost dhcpd: DHCPDISCOVER from 00:0c:29:e0:40:b7 via ens37
Dec 5 19:35:09 localhost dhcpd: DHCPOFFER on 192.168.200.10 to 00:0c:29:e0:40:b7 via ens37
Dec 5 19:35:09 localhost dhcpd: DHCPREQUEST for 192.168.200.10 (192.168.200.2) from 00:0c:29:e0:40:b7 via ens37
Dec 5 19:35:09 localhost dhcpd: DHCPACK on 192.168.200.10 to 00:0c:29:e0:40:b7 via ens37
2.使用Centos7实现DNS服务器主-从搭建
2.1DNS作用
域名系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用UDP端口53。
2.2 搭建主-从DNS服务器
实现目标:
只有一台主DNS服务器,存在单点失败的问题,建立主DNS服务器的备份服务器,即从服务器来实现DNS服务的容错机制。从服务器可以自动和主服务器进行单向的数据同步,从和主DNS服务器一样,也可以对外提供查询服务,但从服务器不提供数据更新服务。客户端使用从服务器做DNS,往主服务器中更改记录,客户端也能解析出最新的更改记录
主服务器配置:
安装,修改主配置文件
[root@localhost ~]# yum -y install bind bind-utils
options {
listen-on port 53 { 127.0.0.1;192.168.110.70; }; #本机哪些IP可提供dns服务
allow-query { 192.168.110.0/24; }; #允许哪些IP访问本机dns服务
创建DNS区域数据库文件
[root@localhost ~]# vim /var/named/ken.com.zone
$TTL 1D #全局继承TTL
@ IN SOA master admin.ken.com. (1 1D 1H 1W 3H); #1是序列号
IN NS master #NS=nameserver master对应下面的A记录
IN NS slave #从服务器
master IN A 127.0.0.1 #本机的A记录
slave IN A 192.168.110.249 #从服务器IP
www IN A 192.168.110.2
在named.rfc1912.zones文件内调用刚创建的数据库文件使生效
[root@localhost ~]# vim /etc/named.rfc1912.zones
zone "ken.com" IN {
type master;
file "ken.com.zone";
allow-update { none; };
};
从DNS服务器配置:
安装,修改主配置文件
[root@localhost ~]# yum -y install bind bind-utils
[root@localhost ~]# vim /etc/named.conf
options {
listen-on port 53 { 127.0.0.1;192.168.110.249; } #本机哪些IP可提供dns服务
allow-query { any; }; #允许所有IP访问本机DNS服务
在named.rfc1912.zones文件内新建zone
[root@localhost ~]# vim /etc/named.rfc1912.zones
zone "ken.com" IN { #zone“ken.com”必须和主服务器名字一样
type slave; #类型是slave(从)
masters { 192.168.110.70; }; #主服务器地址
file "slaves/ken.com.zone.slave"; #存放主服务备份过来的文件路径
};
主服务器和从服务器都重启dns服务
[root@localhost ~]# systemctl restart named
从服务器如果备份成功,会自动创建/var/named/slaves/ken.com.zone.slave文件
验证:windows上使用从服务器做dns进行解析
从dns能正常同步主dns的记录
C:\Users\Administrator>nslookup www.ken.com 192.168.110.249
服务器: UnKnown
Address: 192.168.110.249
名称: www.ken.com
Address: 192.168.110.2
更新主dns服务器的记录,验证从服务器是否自动同步
[root@localhost ~]# vim /var/named/ken.com.zone
$TTL 1D
@ IN SOA master admin.ken.com. (2 1D 1H 1W 3H); #2是序列号,每次更改配置后,序列号手动更改加大,即可自动推送配置给从服务器
IN NS master
IN NS slave
master IN A 127.0.0.1
slave IN A 192.168.110.249
www IN A 192.168.110.2
web IN A 192.168.110.110
#重启主服务器named
[root@localhost ~]# systemctl restart named
客户端使用从服务器IP解析新建添加的web.ken.com,看到已经自动同步成功
C:\Users\Administrator>nslookup web.ken.com 192.168.110.249
服务器: UnKnown
Address: 192.168.110.249
名称: web.ken.com
Address: 192.168.110.110
3.使用Centos7实搭建智能DNS
实验目的:
公司珠海和深圳使用同一台DNS服务器,两地分别有一台NAS服务器使用同一个域名“nas.ken.com”。通过智能DNS,区分广州和深圳的客户端,解析出不同的IP。
实现步骤:
1.针对珠海和深圳IP段分别建立两个ACL
2.创建两个区域数据库文件
3.分别建立2个区域配置文件
4.主配置文件新建view
5.针对不同acl调用不同的区域配置文件,达到针对不同的地区IP段解析不同的地址
主服务器准备2张网卡:
eth0:192.168.110.70/24 (珠海使用此网段)
eth1:192.168.121.130/24 (深圳使用此网段)
主服务器配置
1.在主配置文件最前面针对珠海深圳地址段建立两个ACL
[root@localhost ~]# vim /etc/named.conf
acl zhnet {
192.168.110.0/24;
};
acl sznet {
192.168.121.0/24;
};
2.创建两个区域数据库文件
珠海
[root@localhost ~]# vim /var/named/ken.com.zone.zh
$TTL 1D
@ IN SOA master admin.ken.com. (1 1D 1H 1W 3H);
IN NS master
master IN A 192.168.110.70
nas IN A 1.1.1.1 #珠海解析nas.ken.com对应的IP
深圳
[root@localhost ~]# vim /var/named/ken.com.zone.sz
$TTL 1D
@ IN SOA master admin.ken.com. (1 1D 1H 1W 3H);
IN NS master
master IN A 192.168.121.130
nas IN A 2.2.2.2 #深圳解析nas.ken.com对应的IP
3.分别建立两个个区域配置文件(调用对应的两个区域数据库文件)
珠海
[root@localhost ~]# cp -p /etc/named.rfc1912.zones /etc/named.rfc1912.zones.zh
[root@localhost ~]# vim /etc/named.rfc1912.zones.zh
zone "." IN {
type hint;
file "named.ca";
};
zone "ken.com" IN {
type master;
file "ken.com.zone.zh";
};
深圳
[root@localhost ~]# cp -p /etc/named.rfc1912.zones /etc/named.rfc1912.zones.sz
[root@localhost ~]# vim /etc/named.rfc1912.zones.sz
zone "." IN {
type hint;
file "named.ca";
};
zone "ken.com" IN {
type master;
file "ken.com.zone.sz";
};
4.在主配置文件创建view视图
将主配置文件的根域注释,放到区域配置文件中
#zone "." IN {
# type hint;
#file "named.ca";
#};
将包含rfc1912.zones文件注释
#include "/etc/named.rfc1912.zones";
创建视图
珠海
view zhview {
match-clients { zhnet; }; #对应珠海地区 acl段
include "/etc/named.rfc1912.zones.zh"; #对应珠海地区的区域配置文件
};
深圳
view szview {
match-clients { sznet; };
include "/etc/named.rfc1912.zones.sz";
};
5.完成以上操作,重启服务
[root@localhost ~]# systemctl restart named
6.验证
珠海客户端(解析nas.ken.com对应的是珠海的服务器IP)
C:\Users\Administrator>nslookup nas.ken.com 192.168.110.70
服务器: UnKnown
Address: 192.168.110.70
名称: nas.ken.com
Address: 1.1.1.1
深圳客户端(解析nas.ken.com对应的是深圳的服务器IP)
C:\Users\Administrator>nslookup nas.ken.com 192.168.121.130
服务器: UnKnown
Address: 192.168.121.130
名称: nas.ken.com
Address: 2.2.2.2
4. 使用iptables/firewalld/nftable实现端口访问控制
目的:只允许访问本机SSH,TELNET,FTP和WEB服务器,其他拒绝
iptables
[root@localhost ~]# iptables -A INPUT -s 0.0.0.0/0 -p tcp -m multiport --dports 22,23,21,80 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -j DROP
firewalld
#添加服务(--permanent是永久添加)
[root@localhost ~]# firewall-cmd --permanent --add-service=http
[root@localhost ~]# firewall-cmd --permanent --add-service=ftp
[root@localhost ~]# firewall-cmd --permanent --add-service=telnet
[root@localhost ~]# firewall-cmd --reload #重新加载firewall
5.SNAT和DNAT(端口映射)
SNAT:source NAT ,支持POSTROUTING, INPUT,让本地网络中的主机通过某一特定地址访问外部网络,实现地址伪装,请求报文:修改源IP。常用与内网访问互联网NAT成出口的公网IP使用
DNAT(端口映射):destination NAT 支持PREROUTING , OUTPUT,把
本地网络中的主机上的某服务开放给外部网络访问(发布服务和端口映射),但隐藏真实IP。常用于内部服务器对外提供服务,将访问公网IP的IP+指定端口,映射到内网服务器的IP+服务端口
5.1通过SNAT实现内部服务器NAT成路由器的出口IP进行上网
环境:
web server centos7
出口路由器 centos7
需求1:
web server需要通过出口路由器实现网络访问
需求2:
web servver的web服务器需要对外提供,需要通过端口映射将192.168.200.30:80映射到互联网
配置思路:
需求1:server将网关指向192.168.200.1,出口路由器默认路由指向192.168.10.1(条件有限,使用192.168.10.70模拟公网IP),路由器开启路由转发功能,使用iptables将源192.168.200.0/24NAT成192.168.10.70实现server通过路由器上网
需求2:在出口路由器做端口映射,将192.168.10.70:8080映射到webserver192.168.200.30:80
server配置
将网卡网关配置为192.168.200.1(会自动生成默认路由)
[root@localhost ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.200.1 0.0.0.0 UG 0 0 0 ens37
出口路由器配置
1.配置2块网卡
eth0(外网):192.168.10.70/24 gw:192.168.10.1
eth1(内网):192.168.200.1/24
2.开启路由转发功能
#临时开启
[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
3.配置SNAT
源地址192.168.200.0/24访问所有目的,nat成出口IP
[root@localhost ~]#iptables -t nat -A POSTROUTING -s 192.168.200.0/24 -d 0.0.0.0/0 -j MASQUERADE
4.配置DNAT
[root@localhost ~]# iptables -t nat -A PREROUTING -s 0/0 -d 192.168.10.70 -p tcp --dport 8080 -j DNAT --to-destination 192.168.200.30:80
5.永久保存iptables规则+开机自动启用规则
[root@localhost ~]# iptables-save > /etc/sysconfig/iptables #将iptables规则保存到文件
[root@localhost ~]# vim /etc/sysconfig/iptables-autostart.sh #新建一个脚本,将加载规则命令写进去
#!/bin/bash
iptables-restore < /etc/sysconfig/iptables #加载规则
[root@localhost ~]# vim /etc/rc.d/rc.local #将运行脚本命令写入该文件,开机自动启动
bash /etc/sysconfig/iptables-autostart.sh
[root@localhost ~]# chmod +x /etc/rc.d/rc.local #需要加执行权限
验证:
1.在server上测试已成功通过路由器进行网络访问
[root@localhost ~]# traceroute 114.114.114.114
traceroute to 114.114.114.114 (114.114.114.114), 30 hops max, 60 byte packets
1 gateway (192.168.200.1) 0.276 ms 0.243 ms 0.213 ms
2 * * *
3 192.168.1.1 (192.168.1.1) 5.775 ms 5.721 ms 5.669 ms
4 100.64.0.1 (100.64.0.1) 10.223 ms 10.229 ms 10.215 ms
5 14.148.19.33 (14.148.19.33) 7.653 ms 7.669 ms 7.602 ms
6 14.148.18.37 (14.148.18.37) 10.060 ms 14.148.18.41 (14.148.18.41)
2.测试端口映射
C:\Users\Administrator>tcping 192.168.10.70 8080
Probing 192.168.10.70:8080/tcp - Port is open - time=1.297ms
6.mysql8.0.30二进制安装一键脚本
#!/bin/bash
VERSION=8.0.30
PACKAGE=mysql-${VERSION}-linux-glibc2.12-x86_64.tar.xz
UNZIPKG=mysql-${VERSION}-linux-glibc2.12-x86_64
DATADIR=/data/mysql
#检查
rpm -q wget || yum -y install wget >/dev/null
if [ -d ${DATADIR} ];then
echo "${DATADIR}目录已存在"
else
mkdir -pv $DATADIR
fi
if id mysql &>/dev/null;then
echo "mysql用户已存在"
else
useradd -r -s /sbin/nologin mysql
fi
if [ -e /usr/local/mysql ];then
echo "mysql已安装,不需要重复安装"
exit
else
echo "继续安装"
fi
#安装
yum -y install install libaio numactl-libs >/dev/null
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/${PACKAGE} || { echo "下载异常";exit; }
tar -xf ${PACKAGE} -C /usr/local
ln -s /usr/local/${UNZIPKG} /usr/local/mysql
chown -R mysql:mysql /usr/local/mysql/
#编辑配置文件
cat > /etc/my.cnf <<EOF
[mysqld]
datadir=${DATADIR}
skip_name_resolve=1
socket=/data/mysql/mysql.sock
log-error=/data/mysql/mysql.log
pid-file=/data/mysql/mysql.pid
[client]
socket=/data/mysql/mysql.sock
EOF
#数据库初始化创建
mysqld --initialize --user=mysql --datadir=${DATADIR}
#准备服务器启动脚本
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
service mysqld start
#判断是否安装成功
if [ $(service mysqld status | awk -F! '{print $1}') = SUCCESS ];then
echo "mysql已安装完成,可以使用下面初始化密码登录"
echo "密码:`cat /data/mysql/mysql.log | awk -F"localhost:" '/password/{print $2}'`"
else
echo "mysql启动失败,请查明原因!"
fi
安装完成后可以配置环境将mysql命令路径添加进PATH变量,方便使用
echo "PATH=/usr/local/mysql/bin:${PATH}" > /etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh
执行脚本并测试登录
[root@localhost ~]# bash mysql.sh
....
mysql已安装完成,可以使用下面初始化密码登录
密码: swbHwrazq2&b
[root@localhost ~]# mysql -p
Enter password: #输入上面密码
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.30
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>