w查看系统负载
html
date 查看当前系统的时间
mysql
w查看系统负载linux
第一行,从左面开始显示的信息依次为:时间,系统运行时间,登陆用户数,平均负载。ios
第二行,开始以及下面全部的行,告诉咱们的信息是,当前登陆的都有哪些用户,以及他们是从哪里登陆的等等。咱们最应该关注的应该是第一行中的 ‘load average:’ 后面的三个数值。nginx
第一个数值表示1分钟内系统的平均负载值;第二个数值表示5分钟内系统的平均负载值;第三个数值表示15分钟系统的平均负载值。web
这个值的意义是,单位时间段内CPU活动进程数。固然这个值越大就说明你的服务器压力越大。sql
通常状况下这个值只要不超过服务器的cpu数量就没有关系,若是服务器cpu数量为1,那么这个值若小于1,就说明当前服务器没有压力,不然就要关注一下了。
vim
查看逻辑cpu命令:cat /proc/cpuinfo 看第一行processor 若是是0就证实他有1个cpu 是2就证实他有3个cpu 逻辑cpu不是物理cpu
centos
vmstat命令缓存
vmstat:监控系统的状态
w查看的是系统总体上的负载,经过看那个数值能够知道当前系统有没有压力,可是具体是哪里(CPU, 内存,磁盘等)有压力就没法判断了。经过 vmstat 就能够知道具体是哪里有压力。
命令:vmstat 1 每1秒以动态的形式显示一次 按ctrl+c结束。也能够后边跟一个数字,表明只显示的次数,例如:vmstat 1 5 这个就是每一秒显示1次只让他显示5次,以下图:
每一列分别表示什么意思:重点关注:r、b、swpd、si、so、bi、bo、us、wa。
1.procs 显示进程相关信息
r :表示运行和等待cpu时间片的进程数,若是长期大于服务器cpu的个数,则说明cpu不够用了;
b :表示等待资源的进程数,好比等待I/O, 内存等,这列的值若是长时间大于1,则须要关注一下了;
2.memory 内存相关信息
swpd :表示切换到交换分区中的内存数量 ;若是他的数值一直在变化那证实他的内存不够了
free :当前空闲的内存数量;
buff :缓冲大小,(即将写入磁盘的);
cache :缓存大小,(从磁盘中读取的);
3.swap 内存交换状况
si :由交换区swap写入到内存的数据量;单位kb
so :由内存写入到交换区的数据量;从内存里出来的
4.io 磁盘使用状况
这两个频繁的变证实他们在频繁的读写
bi :从块设备读取数据的量(读磁盘);从磁盘里出来进入到内存里边去
bo: 从块设备写入数据的量(写磁盘);
5.system 显示采集间隔内发生的中断次数
in :表示在某一时间间隔中观测到的每秒设备中断数;
cs :表示每秒产生的上下文切换次数;
6.CPU 显示cpu的使用状态
us :显示了用户下所花费 cpu 时间的百分比;长时间大于50%说明资源不够了
sy :显示系统自己花费cpu时间百分比;
id :表示cpu处于空闲状态的时间百分比;
wa :表示I/O等待所占用cpu时间百分比;
st :表示被偷走的cpu所占百分比(通常都为0,不用关注);
us+sy+id=100%
top命令
显示进程所占系统资源 q退出来
top命令打印出了不少信息,包括系统负载(loadaverage)、进程数(Tasks)、cpu使用状况、内存使用状况以及交换分区使用状况。
top:这个命令用于动态监控进程所占系统资源,每隔3秒变一次。这个命令的特色是把占用系统资源(CPU,内存,磁盘IO等)最高的进程放到最前面。
第一行:跟w命令查看的同样表示:时间,系统运行时间,几个用户登陆,系统负载
第二行:进程状态。total进程总数,running进程运行数,sleeping休眠的进程,stopped中止的进程,zombie僵尸进程
第三行:cpu百分比。
第四行:物理内存。total总内存数值,free剩余内存,used使用大小,
第五行:交换分区。
你关注的也就是几项:%CPU, %MEM, COMMAND
%CPU:为CPU使用状况,默认状况下按cpu使用情排序
RES:物理内存大小(单位:KiB)
COMMAND:进程名字
%MEM:为使用内存百分比。在 top 状态下,按 “shift + m”, 能够按照内存使用大小排序。shift+p换回来。
按数字 ‘1’ 能够列出全部cpu的使用状态。%Cpu(s)证实是一颗cpu
命令:top -c 查看具体的命令全局路径以及使用状况
命令:top -bn1 静态的显示全局的系统资源使用状况。通常在写脚本的时候使用。
sar监控系统状态
安装sar命令: yum install -y sysstat
生成的历史文件所在的目录
ls /var/log/sa sar的特性是每10分钟他会把系统的状态过滤一遍保存在历史文件里,这个历史文件正好在/var/log/sa目录里,这个文件下的历史记录只能保持一个月 还有一个ls /var/log/sar 他们的区别是/var/log/sa是个二进制文件你不能用cat来查看它的内容,而/var/log/sar能查看内容,次日才会生成前一天的sar
命令:sar -n DEV 查看网卡流量
加上参数:sar -n DEV 1 3 每1秒钟显示一次,一共显示3次
IFACE这列表示设备名称
rxpck/s 表示每秒接收到的包的数量,几千是正常的,上万不正常
txpck/s 表示每秒发送出去的包的数量,
rxbyt/s 表示每秒收取的数据量(单位Byte),
txbyt/s表示每秒发送的数据量。
命令:-f 指定查看看指定某一天网卡流量历史。
例如:sar -n DEV -f /var/log/sa/sa07 查看7号的流量,后边sa07指的是那一天的,sar会以日期号为结尾保存,最多保存一个月的。
命令:sar -q 查看历史负载 sar -q -f /var/log/sa07查看指定某天的负载
命令:sar -b 查看磁盘的(读写)
[root@aaa-01 ~]# sar -b 1 3 Linux 3.10.0-693.el7.x86_64 (aaa-01) 2018年06月07日 _x86_64_ (1 CPU) 21时05分59秒 tps rtps wtps bread/s bwrtn/s 21时06分00秒 0.00 0.00 0.00 0.00 0.00 21时06分01秒 0.00 0.00 0.00 0.00 0.00 21时06分02秒 0.00 0.00 0.00 0.00 0.00 平均时间: 0.00 0.00 0.00 0.00 0.00
nload命令
nload动态的显示网卡的页面
先安装:两个包,yum install -y epel-release yum install -y nload
直接敲命令:nload
第一行,网卡的数量,按左右方向键能够切换网卡,按 q 退出。
第二行,一次是,当前值、平均值、最小值、最大值。
一般咱们买带宽都是买出去的带宽
监控io性能
命令:iostat -x 磁盘使用 主要查看%util 这个是显示你等待磁盘io的百分比
[root@aaa-01 ~]# iostat -x Linux 3.10.0-693.el7.x86_64 (aaa-01) 2018年06月08日 _x86_64_ (1 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.05 0.00 0.13 0.03 0.00 99.79 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.01 0.21 0.12 5.52 3.37 53.41 0.01 16.08 7.57 30.30 2.26 0.08 sdb 0.00 0.00 0.00 0.00 0.06 0.00 45.16 0.00 2.25 2.25 0.00 2.06 0.00 scd0 0.00 0.00 0.00 0.00 0.03 0.00 114.22 0.00 25.22 25.22 0.00 23.89 0.00
命令:iotop 动态排序显示进程使用io的状况,安装yum install -y iotop
free 查看内存使用状况
命令:free 直接回车,能够显示当前系统的总内存大小以及使用内存的状况
数据的流向不同,内存使用的角色也不同,由于磁盘与cpu互相传数据会很慢,因此先把数据放到内存里,而后再从内存里读取数据 cache:磁盘(000:数据)→内存(cache)→CPU buff:CPU(000数据)→内存(buffer)→磁盘
命令:free -m 指定它显示的单位为兆
[root@aaa-01 ~]# free -m total used free shared buff/cache available Mem: 984 126 528 6 329 674 Swap: 2047 0 2047
命令:free -h 在具体的数字后边加上单位
[root@aaa-01 ~]# free -h total used free shared buff/cache available Mem: 984M 126M 528M 6.8M 329M 674M Swap: 2.0G 0B 2.0G
公式:total=used+free+buff/cache 总用量=已用量+剩余+缓冲/缓存
avaliable包含free和buff/cache没用完剩余部分
ps 查看系统进程
命令:ps aux 把你系统里边全部的进程列出来
命令:ps aux |grep 检查系统中一个进程有没有运行。例如:ps aux |grep nginx、ps aux |grep mysql
命令:ps aux |grep -c 查看一个进程的数量。
命令:ps -elf 结果跟ps aux类似
PID :进程的id,这个id颇有用,在linux中内核管理进程就得靠pid来识别和管理某一个程,好比我想终止某一个进程,则用 ‘kill进程的pid 有时并不能杀掉,则须要加一个-9选项了 kill -9 进程pid
STAT :表示进程的状态,进程状态分为如下几种(不要求记住,但要了解)
D:不能中断的进程(一般为IO)
R:run正在运行中的进程
S:sleep已经中断的进程,一般状况下,系统中大部分进程都是这个状态
T:已经中止或者暂停的进程,若是咱们正在运行一个命令,好比说 sleep 10 若是咱们按一下ctrl -z 让他暂停,那么咱们用ps查看就会显示T这个状态
W:这个好像是说,从内核2.6xx 之后,表示为没有足够的内存页分配
X:已经死掉的进程(这个好像历来不会出现)
Z:僵尸进程,杀不掉,打不死的垃圾进程,占系统一小点资源,不过没有关系。若是太多,就有问题了。通常不会出现。
<:高优先级进程
N:低优先级进程
L:在内存中被锁了内存分页
s:主进程
l:多线程进程。有一个进程有多个线程。
+:表明在前台运行的进程
线程由一个大的进程组成的,一个进程里边有多个线程
netstat 监控系统状态
netstat:查看网络状态,查看tcpip的一个状态
命令:netstat -lnp 显示当前系统监听着哪些端口
[root@aaa-01 ~]# netstat -nlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 893/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 998/master tcp6 0 0 :::22 :::* LISTEN 893/sshd tcp6 0 0 ::1:25 :::* LISTEN 998/master udp 0 0 127.0.0.1:323 0.0.0.0:* 546/chronyd udp6 0 0 ::1:323 :::* 546/chronyd raw6 0 0 :::58 :::* 7 590/NetworkManager
命令:netstat -an 查看系统全部网络链接情况
命令:netstat -lntp 只看tcp的,不包含socket
[root@aaa-01 ~]# netstat -ltnp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 893/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 998/master tcp6 0 0 :::22 :::* LISTEN 893/sshd tcp6 0 0 ::1:25 :::* LISTEN 998/master
命令:netstat -lunp只查看udp的
[root@aaa-01 ~]# netstat -lunp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name udp 0 0 127.0.0.1:323 0.0.0.0:* 546/chronyd udp6 0 0 ::1:323 :::* 546/chronyd
命令:ss -an 跟netstat殊途同归,缺点是不能显示进程的名字。
状态:TIME_WAIT 客户端与服务端两台机器,相互通讯完以后,他们的连接还没断开,处于一种相互等待的状态,等待这两个机器再一次链接传输数据
命令:netstat -an |awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t",sta[key]}' 查看全部状态用数字列出来
若是ESTABLISHED很大,证实你的系统很忙,这个数据表示有多少个客户端在和服务端进行通讯
tcptump 抓包工具
安装:yum install -y tcpdump
在你判断你的服务器上有流量***时,使用抓包工具来抓一下包,就知道那些IP在***你了。
命令:tcpdump -nn 两个n表示IP地址和端口号,不加-nn的话它显示的是名字,你分不清是哪一个。
命令:tcpdump -nn -i ens33 加上网卡的名字
命令:tcpdump -nn port 指定端口,例如ens33网卡的22端口,tcpdump -nn -i ens33 port 22
命令:tcpdump -nn not port 不要某个端口,例如ens33网卡的22端口,tcpdump -nn -i ens33 not port 22
命令:tcpdump -nn -i ens33 not port 22 and host 192.168.0.100 不要某个端口而且只要一个指定IP的。
命令:tcpdump -nn -c 指定抓包的个数。好比只要100个:tcpdump -nn -i ens33 -c 100
命令:tcpdump -nn -w 把抓到的包存到一个文件里去(文件名字能够本身取)。例如:tcpdump -nn -i ens33 -c 10 -w /tmp/1.cap
[root@aaa-01 ~]# tcpdump -nn -i ens33 -c 10 -w /tmp/1.cap tcpdump: listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes 10 packets captured 10 packets received by filter 0 packets dropped by kernel
能够用file命令查看它的信息,可是不能查看内容:file /tmp/1.cap
[root@aaa-01 ~]# file /tmp/1.cap /tmp/1.cap: tcpdump capture file (little-endian) - version 2.4 (Ethernet, capture length 262144)
tcpdump -r /etc/1.cop,能够查看文件内容,由于他是一个数据包,因此它显示的只是一些数据的流向
[root@aaa-01 ~]# tcpdump -r /tmp/1.cap reading from file /tmp/1.cap, link-type EN10MB (Ethernet) 19:08:27.654122 IP aaa-01.ssh > 192.168.232.1.53070: Flags [P.], seq 2889311389:2889311537, ack 3110138182, win 274, length 148 19:08:27.654290 IP 192.168.232.1.53070 > aaa-01.ssh: Flags [.], ack 148, win 254, length 0 19:08:59.507789 IP 192.168.232.1.53070 > aaa-01.ssh: Flags [P.], seq 1:69, ack 148, win 254, length 68 19:08:59.508025 IP aaa-01.ssh > 192.168.232.1.53070: Flags [P.], seq 148:216, ack 69, win 274, length 68 19:08:59.553682 IP 192.168.232.1.53070 > aaa-01.ssh: Flags [P.], seq 69:169, ack 216, win 254, length 100 19:08:59.553749 IP 192.168.232.1.53070 > aaa-01.ssh: Flags [P.], seq 169:237, ack 216, win 254, length 68 19:08:59.553971 IP aaa-01.ssh > 192.168.232.1.53070: Flags [.], ack 237, win 274, length 0 19:08:59.563115 IP aaa-01.ssh > 192.168.232.1.53070: Flags [P.], seq 216:268, ack 237, win 274, length 52 19:08:59.570663 IP aaa-01.ssh > 192.168.232.1.53070: Flags [P.], seq 268:384, ack 237, win 274, length 116 19:08:59.570876 IP 192.168.232.1.53070 > aaa-01.ssh: Flags [.], ack 384, win 253, length 0 [root@aaa-01 ~]#
tshark抓包工具(须要记住)
安装:yum install -y wireshark
命令:tshark -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri" 能够查看指定网卡80端口web访问的状况。本身的实验虚拟机是抓不到的由于他没有80端口的服务
[root@aaa-01 ~]# tshark -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri" tshark: -R without -2 is deprecated. For single-pass filtering use -Y. Running as user "root" and group "root". This could be dangerous. Capturing on 'bluetooth0'
linux 网络相关
命令:ifconfig 查看默认网卡ip 须要安装包:(yum install net-tools)
命令:ifconfig -a 在你网卡被当(down)掉不显示时,或者没有ip时,它会显示出来。
命令:ifup ens33开启网卡
命令:ifdown ens33关闭网卡 在咱们编辑一个网卡而且不想让全部网卡都从新关闭开启,只须要指定一个网卡关闭重启时再用它
若是咱们远程登陆服务器,当使用ifdown eth0这个命令的时候,颇有可能后面的命令ifup eth0不会被运行,这样致使咱们断网而没法链接服务器,因此请尽可能使用 service network restart 这个命令来重启网卡。
命令:ifdown ens33 && ifup ens33 一次性关闭并重启网卡,为了安全起见能够这样结合使用
[root@aaa-01 ~]# ifdown ens33 && ifup ens33 成功断开设备 'ens33'。 链接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/6)
设定虚拟网卡
例如:设定虚拟网卡ens33:1
方法:
第一步,先到网卡所在的目录中去:cd /etc/sysconfig/network-scripts/
第二步,把ens33拷贝到ens33:1里:cp ifcfg-ens33 ifcfg-ens33\:1
第三步,编辑配置文件:vi ifcfg-ens33\:1
第四步,把里边带ens33的改为ens33:1,把ip改一下,网关跟DNS1均可以不要。
第五步,重启网卡:ifdown ens33 && ifup ens33
mii-tool ens33 查看网卡是否链接,显示link ok 证实链接。
[root@aaa-01 network-scripts]# mii-tool ens33 ens33: negotiated 1000baseT-FD flow-control, link ok
ethtool ens33 也能够查看网卡是否链接,最后一行显示yes证实链接。
查看主机名:hostname
更改主机名:hostnamectl set-hostname aminglinux
配置文件:cat /etc/hostname
DNS配置文件
/etc/resolv.conf
[root@aaa-01 ~]# cat /etc/resolv.conf # Generated by NetworkManager nameserver 119.29.29.29
特殊文件:/etc/hosts
[root@aaa-01 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
编辑它的配置文件能够给域名指定IP,vim /etc/hosts
格式:指定IP+域名 例如:192.168.232.140 www.qq.com 一个IP能够指定多个域名,仅仅在本机生效
更改前
更改后
一个IP能够设置多个域名
Linux 防火墙
centos六、五、4...使用netfilter防火墙
centos7开始使用firewalld防火墙
netfilter防火墙(centos6以及之前的版本使用的)
命令:getenforce 查看selinux防火墙是否开启
Enforcing表示打开,Permissive表示关闭,其实他只是遇到一些须要阻断是时候他不真正的去阻断,仅仅是有一个提醒,这个提醒咱们是看不到的,他本身会记录。
selinux临时关闭命令: setenforce 0
[root@aaa-01 ~]# setenforce 0 [root@aaa-01 ~]# getenforce Permissive
selinux永久关闭
变配置文件:vi /etc/selinux/config ##把enforcing改为disabled
在centos7上开起netfilter防火墙方法:
命令:getenforce 查看selinux防火墙是否开启
关闭firewalld开启netfilter方法
第一步,不让firewalled开机启动:systemctl disable firewalled
第二步,再把firewalled服务停掉:systemctl stop firewalld
第三步,而后开启netfilter防火墙,开启以前须要安装包:yum install -y iptables-services
第四步,安装完它会产生iptables服务,查看一下:systemctl enable iptables
第五步,开启iptables服务:systemctl start iptables
命令:iptables -nvL 查看它的默认规则
netfilter是防火墙的名字,而iptables只是它的一个工具
netfilter的5个表
filter表用于过滤包,最经常使用的表,包含三个内置的链,有INPUT、FORWARD、OUTPUT三个链
filter 这个表主要用于过滤包的,是系统预设的表,这个表也是用的最多的。内建三个链INPUT、 OUTPUT以及FORWARD。INPUT做用于进入本机的包(数据包进来的时候要通过的一个链,假如把80端口进来的数据包访问我80端口的数据包检查一下它的源IP是什么发现可疑的IP给他禁掉);OUTPUT做用于本机送出的包(对本机送出的包进行操做);FORWARD做用于那些跟 本机无关的包。
nat表用于网络地址转换,有PREROUTING、OUTPUT、POSTROUTING三个链
nat 主要用处是网络地址转换,还能够作端口映射,也有三个链。PREROUTING 链的做用是在包刚刚到达防火墙时改变它的 目的地址,若是须要的话。OUTPUT链改变本地产生的包的目的地址。POSTROUTING链在包就要离开防火墙以前改变其源地址。
managle表用于给数据包作标记,几乎用不到
raw表能够实现不追踪某些数据包。
security表在centos6中并无,用于强制访问控制(MAC)的网络规则
iptables传输数据包过程
参考文章:iptables详解
通过本机:PREROUTING > INPUT > 主机 > OUTPUT > POSTROUTING
不通过本机:PREROUTING > FORWARD > POSTROUTING
数据包流向与netfilter的5个链
PREROUTING:数据包进入路由表以前
INPUT:经过路由表后目的地为本机
FORWARD:经过路由表后,目的地不为本机
OUTPUT:由本机产生,向外发出
POSTROUTING:发送到网卡接口以前
iptables 基本语法
查看iptables默认规则:iptables -nvL
规则保存地址:cat /etc/sysconfig/iptables 配置文件的路径
iptables -F 清空规则。 service iptables restart 重启加载回来
service iptables save 保存规则(把当前的规则保存到配置文件去),由于刚才清空了规则没设置新的规则,因此如今保存他会是空规则
iptables -t 指定表。默认是filter表。iptables -t filter -nvL;iptables -t nat -nvL(nat表的规则是空的)
iptables -Z 能够把计数器清零,格式:iptables -Z; iptables -nvL
iptables -A 增长一条规则(默认增长到最后边)看下图
例如:iptables -A INPUT -s 192.168.188.1 -p tcp --sport 1234 -d 192.168.188.128 --dport 80 -j DROP
解释:-s:指定来源IP -p:指定协议(tcp、odp、icmp) --sport:目标端口 -b:目标IP -j:最后操做 DROP:把数据直接扔掉 REJECT:拒绝 这两个的最终结果都是让这个数据包过不来封掉了这个IP
iptables -I 插入规则。(插入到最前边)例如:iptables -I INPUT -p tcp --dport 80 -j DROP
iptables -D 删除规则。例如删除前两条规则:
[root@aaa-01 ~]# iptables -D INPUT -s 192.168.188.1 -p tcp --sport 1234 -d 192.168.188.128 --dport 80 -j DROP [root@aaa-01 ~]# iptables -D INPUT -p tcp --dport 80 -j DROP
若是你写的规则好久了记不得了能够用这条命令,它会把规则的序列号打印出来根据序列号删规则。
列出序列号:iptables -nvL --line-numbers 删除指定的规则:iptables -D INPUT 1
iptables -I/-A/-D INPUT -s 1.1.1.1 -j DROP
针对网卡设置规则:iptables -I INPUT -s 192.168.1.0/24 -i eth0 -j ACCEPT
iptables -P INPUT DROP 更改默认规则的。最好不用动!!假如说你更改了链接中断的工具会断开链接,你只能到终端上去把它更改回来:iptables -P INPUT ACCEPT
iptables小案例
定义解释器 定义变量名 清空全部规则 把INPUT链收到的数据包扔掉 接受发出去的全部包
先编辑vi /usr/local/sbin/iptables.sh 加入以下内容
#! /bin/bash
ipt="/usr/sbin/iptables" 尽可能写全局的绝对路径!
$ipt -F 把以前的规则清除掉
$ipt -P INPUT DROP
$ipt -P OUTPUT ACCEPT
$ipt -P FORWARD ACCEPT
$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$ipt -A INPUT -s 192.168.133.0/24 -p tcp --dport 22 -j ACCEPT
$ipt -A INPUT -p tcp --dport 80 -j ACCEPT
$ipt -A INPUT -p tcp --dport 21 -j ACCEPT
w查看一下。
执行一下:sh /usr/local/sbin/iptables.sh
icmp示例
命令:iptables -I INPUT -p icmp --icmp-type 8 -j DROP 加上这条规则以后,你能够ping外网,可是外网不能ping你,由于它把icmp的8种类型给DROP掉了
nat表应用
如今有两台机器,A机器有两块网卡一块网卡咱们把它比喻成是外网,另一块网卡是内网,ens33是外网,ens37是内网。
另一台B机器只有一块内网网卡(ens37),它默认是不能连外网的不能跟外网通讯。咱们的需求是让B机器能够连外网,说白了咱们就是要作一个小路由器,路由器能够上网咱们的电脑就能够上网
准备工做:
首先准备两台机器
第一步,给A机器添加一块网卡
选择LAN区段,就至关于咱们给网卡连到了一个内网的交换机上,这个交换机我们的Windows机器是连不上的,这样的话,咱们这台机器和另一台机器连上同一个内网交换机,它们二者之间通讯
给第二台机器添加一块网卡由于咱们已经设置了一块网卡,咱们把它先禁用掉,把启动时连接给断掉,重新增长一块。
这两台机器必须选择同一个LAN区段才能进行内网通讯
命令行给两台机器上的ens37设置IP,也能够设置配置文件,把ens33网卡配置文件复制一份给ens37
A机器:设置IP,ifconfig ens37 192.168.100.1/24(他只是一个临时的一重启就没有了)
B机器设置IP,为了保险能够把ens33网卡当掉ifdown ens33
只能在终端上设置IP:ifconfig ens37 192.168.100.100/24
两台机器互相ping一下内网IP看看能不能ping通
而Windows机器是ping不通的
准备工做作完,下面实验。
A机器两块网卡ens33(192.168.232.132)、ens37(192.168.100.1),ens33能够上外网,ens37仅仅是内部网络。
B机器只有ens37(192.168.100.100),和A机器ens37能够通讯互联。
需求1:可让B机器链接外网
查看路由转发:cat /proc/sys/net/ipv4/ip_forward 若是是0,咱们须要打开它A机器上打开路由端口转发 echo "1">/proc/sys/net/ipv4/ip_forward
[root@aaa-01 ~]# cat /proc/sys/net/ipv4/ip_forward 0 [root@aaa-01 ~]# echo "1">/proc/sys/net/ipv4/ip_forward [root@aaa-01 ~]# cat /proc/sys/net/ipv4/ip_forward 1
A上增长一条规则执行:iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
查看一下规则:iptables -t nat -nvL
B上设置网关为192.168.100.1 命令:route add default gw 192.168.100.1 查看网关:route -n
而如今pingA机器IP就通了,这证实他能够跟外网通讯了
B机器设置一下DNS:vi /etc/resolv.conf 进去了写:nameserver 119.29.29.29
ping一下119.29.29.29 在ping一下www.qq.com
需求2:C机器只能和A通讯,让C机器能够直接连通B机器的22端口,假如C机器就是咱们的电脑
第一步,A上打开路由端口转发(由于上边已经作了就能够省略)echo "1">/ proc/sys/net/ipv4/ip_forward
在A上删掉上一个实验的规则:iptables -t nat -D POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
A上执行iptables -t nat -A PREROUTING -d 192.168.133.130 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22(端口转发,进来的包怎么操做)
A上执行iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.133.130(回来的包)
B上设置网关为192.168.100.1(若是上边实验设置了这一步就能够省略)
iptables规则备份和恢复
默认保存命令:service iptables save //会把规则保存到/etc/sysconfig/iptables
指定保存命令:例如,把iptables规则备份到my.ipt文件中,命令:iptables-save > /tmp/my.ipt
恢复刚才备份的规则命令:iptables-restore < /tmp/my.ipt