1.抓包 tcpdump(分析网络问题)
2.路由, ip ,ifconfig,tracepath(配置网络与定位网络联通)
3.发起请求:curl , wget(内网centos无法使用postman,curl和wget必须熟练使用,方便定位问题)
4.Nginx 配置
5.grep , awk ,等(简单运维必备)
6.docker命令,docker的macvlan配置(docker的网络方案)
7.shell 脚本条件语句串写(简单运维,提高效率)
8.shell下执行mysql命令(简单运维,提高效率)
9.ansible工具使用配合ssh配置免密登录(简单运维,提高效率)
10.OpenSSL使用(简单运维,提高效率)
11.防火墙打开与关闭,端口放通 ,iptables(简单运维,提高效率,排错定位网络)
12.Linux网络配置一个网卡多IP,两个网卡不同网段再4层转发(简单运维,提高效率,排错定位网络)
13.netstat命令查看端口占用(定位程序是否起来监听啥端口)
14.telnel命令查看主机端口是否在监听(排错定位是否能访问某主机某端口)
1.tcpdump
-i 指定抓包的接口 tcpdump -i eth0
port 指定抓的包的端口号 tcpdump port 8080
host 执行数据包的Ip tcpdump host 10.220.0.17
协议 tcp udp icmp等。指定抓的协议包 如 tcpdump tcp
-w 将数据包写入文件 tcpdump -w mypackage.pcpb
组合使用: tcpdump -i eth0 tcp and port 8080 and host 10.220.0.17
2.路由, ip ,ifconfig,tracepath
首先在配置文件/etc/sysconfig/network-script/ifcfg-eth0下如果配置了网关,则会出现一条默认主机路由到网关,
比如有两个网络接口,10.60.116.25/10.220.16.25,如果第一个配了网关是10.60.127.254,第二个也配了网关是10.220.0.1那么就会出现两条默认路由。
当要访问另外的网段的时候,就会默认走第一条路由,如果此时10.60.116.25可以访问外网,10.220.16.25访问不了外网,那么就应该不配置10.220.16.25的网关
当ping某个ip ping不通的时候,可以首先看看本机和目标ip主机的路由主机路由是否配置OK,如果都没问题,但是不通,
就可以使用 tracepath 来看看Ping目标主机的时候经过了哪些路由,就可以判断是在哪个路由的时候出了问题。
3.发起请求:curl , wget
Get请求
curl命令模拟Get请求:
1、使用curl命令:
curl "http://www.baidu.com" 如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地
curl -i "http://www.baidu.com" 显示全部信息
curl -I "http://www.baidu.com" 只显示头部信息
curl -v "http://www.baidu.com" 显示get请求全过程解析
2、使用wget命令:
wget "http://www.baidu.com"
curl命令模拟Get请求携带参数(linux):
curl -v http://127.0.0.1:80/xcloud/test?version=1&client_version=1.1.0&seq=1001&host=aaa.com
上述命令在linux系统,get请求携带的参数只到version=1,”&”符号在linux系统中为后台运行的操作符,此处需要使用反斜杠”\”转义,即:
curl -v http://127.0.0.1:80/xcloud/test?version=1\&client_version=1.1.0\&seq=1001\&host=aaa.com
或者
curl -v "http://127.0.0.1:80/xcloud/test?version=1&client_version=1.1.0&seq=1001&host=aaa.com"
Post请求
1、使用curl命令,通过-d参数,把访问参数放在里面,如果没有参数,则不需要-d,
curl -d "username=user1&password=123" "www.test.com/login"
2、使用wget命令
wget –post-data 'username=user1&password=123' http://www.baidu.com
发送格式化json请求
curl -i -k -H "Content-type: application/json" -X POST -d '{"version":"6.6.0", "from":"mu", "product_version":"1.1.1.0"}' https://10.10.10.10:80/test
curl和wget区别
curl模拟的访问请求一般直接在控制台显示,而wget则把结果保存为一个文件。如果结果内容比较少,需要直接看到结果可以考虑使用curl进行模拟请求,如果返回结果比较多,则可考虑wget进行模拟请求。
get请求
curl -v -k -H "Cookie:scl_session=d0cb75c846d31fa0600c6543fc4da0d1" -H "XCentral-CSRFToken:9KQajIELZUNYCyIg" https://x.sangfor.com.cn/scl/v1/soc/threat_info/top_hackers?top_n=2
如果不知道怎么发请求,可以谷歌浏览器查看请求,copy,curl就能拷贝请求的完整curl命令
4.Nginx 配置
默认配置文件路径/etc/nginx/nginx.conf
配置分为
1、全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
2、events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
3、http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
3 stream块,和http并列,这用来做tcp协议层的反向代理和负载均衡。(注:需要开启主机的forward,不然不会转发。注2:试验过程中,这里似乎不能使用bind_proxy 绑定监听的端口,绑定了就不会转发,具体原因待查验。)
4、server块:配置虚拟主机的相关参数,一个http中可以有多个server。
5、location块:配置请求的路由,以及各种页面的处理情况。
5.grep , awk, sed Linux 三剑客
grep 用于查找字符串
awk用于切割
sed用于修改
grep "hello word" a.txt //默认区分大小写
grep -i "hello word" a.txt // -i不区分大小写查找
grep -i -n "hello word" a.txt // -n显示匹配的文本所在的行号
grep -i -n --color "hello word" a.txt // --color高亮匹配的字符串
grep -i -c "hello word" a.txt// -c统计返回匹配字符串的累计行数
grep -i -B1 "hello word" a.txt// -B显示匹配行的同时,还要显示匹配行的上一行
grep -i -A1 "hello word" a.txt// -A显示匹配行的同时,还要显示匹配行的下一行
grep -i -C1 "hello word" a.txt// -A显示匹配行的同时,还要显示匹配行的下一行和下一行
//默认是模糊匹配,如果要精确匹配
grep -i -w "hello word" a.txt// -w精确匹配字符串
grep -v "hello word" a.txt // -v 反向查找不匹配字符串的其他串
grep -e "hello word" -e "hello go" a.txt // -e 匹配多个目标, "hello word" 或者 "hello go"
grep "wor" -r -C1 tt // -r 递归查找目录,tt是一个目录
awk
语法:awk [option] 'Pattern{Action}' file1 file2...
以一行为单位,对分隔符进行切割操作,然后输出
$0 是未切割的,$1是切割后的第一列,$2是切割的第二列
-F 指定切割的分隔符,默认是空格。
awk '{print $0}'
awk -F# '{print $1}' t.txt
-F指定的是输入的分隔符,是#,并用其来切割,
输出分隔符是:
awk -v OFS="-----" '{print $1,%2}' t.txt
awk -va=linux ‘{print $1,$1a}’ test-awk.txt ---- 设置变量a为Linux
-v是指定变量,变量可在''中使用。OFS是默认变量
输出的时候就是用-----来进行分割$1 $2
Pattern先不了解,上面的足够了:http://www.zsythink.net/archives/1426
sed 替换
seq 生成连续的数字
seq 1 5
生成
1
2
3
4
5
6.docker命令,docker的macvlan配置
docker镜像源从哪里设置,docker网络如何配置?
7.shell 脚本条件语句串写
if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi
for var in item1 item2 ... itemN; do command1; command2… done;
8. shell下执行mysql命令 https://www.cnblogs.com/wangkangluo1/archive/2012/04/27/2472898.html 写shell脚本,需要操作mysql数据库的时候会用
9.ansible工具使用配合ssh配置免密登录
10.OpenSSL使用,(理解:只是一种https服务器的证书协议,可自己生成证书。需要填一些数据,然后hi生成....文件)
11.防火墙打开与关闭,端口放通 ,iptables
systemctl start firewalld
systemctl stop firefalld
systemctl enable firewalld
systemctl disable firewalld
iptables 和防火墙一样的功能,一般只使用两者中的一个。
iptables 需要了解的知识点:3表5链
3表:mangle, net, filter
5链: prerouting, input, output, postrouting, forward,
数据进入主机再出去进过的流程, prerouting, input, output, postrouting
数据流过主机主机仅转发的流程: prerouting, forward, postrouting
同一个链中,各表的优先匹配顺序 raw->mangle->net->filter
同一个链中同一个表的匹配数据: 从上到下,序列号小的先匹配。
iptables 按以上顺序进行匹配,一旦匹配到了就执行动作就不会往后匹配,所以规则一般严格的在前面。
iptables 规则的增删改查:
增:iptables -t filter -A INPUT -s 10.220.0.0/16 ACCEPT
删:
改:略
查:iptables -avL --lines
iptables -nvL
iptables -t nat -A POSTROUTING -p tcp --dport 10443 -j SNAT --to-source 172.29.50.12
iptables -t nat -A PREROUTING -p tcp --dport 10443 -j DNAT --to-destination 10.29.4.71
iptables -nvL
iptables -t nat -A PREROUTING -p tcp --dport 10334 -j DNAT --to-destination 10.29.4.71
iptables -t nat -A POSTROUTING -p tcp --dport 10332 -j SNAT --to-source 1.2.2.2
iptables的匹配条件:
12.Linux网络配置一个网卡多IP,两个网卡不同网段再4层转发
打开系统的IP转发功能
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
不用重启,立即生效
sysctl -p
不同网段4层转发:需要用iptables进行snet映射。
dnet和snet的区别:dnet主要用于外网主动访问内网的场景,比如外网想ssh上内网的一个Ip,就需要将内网的ssh 22端口dnet到路由器的公网Ip的某个端口上,然后,外网中就可以通过ssh 路由器的公网Ip的该端口,达到主动访问内网的目的。
snet主要是用于内网主动访问外网(内网上网)的场景:如家里路由器,主机接上路由器,仅获取路由器给他分配的一个内网地址,想要上网就需要路由器上将内网映射为路由器的外网Ip,然后才能实现对外网的访问。
网络配置一个网卡多IP很简单,只需要配网卡/etc/sysconfig/network-script/ifcfg-eth0文件,ipaddr0,network0,等。依次ipaddr1....该eth0网卡就能配上几个IP地址。
13netstat命令查看端口占用
netstat -nap | grep 8080即可
14.telnel命令查看主机端口是否在监听
telnet 10.220.16.1 8080,如果有监听,能telnet通,则可以输入数据,如果没有则会报错no host rout......等。
telnet不通,可以先Ping,如果ping不通,可能网络存在问题,可以查看经过的路由器,ip网段,两端主机的路由等。
如果ping通但是telnet不通,在目的主机检查程序已经起来之后,再检查防火墙是否有放开端口,如果未放开端口手动放开才能通:
firewall-cmd --add-port=3306/tcp 放通3306
firewall-cmd --remove-port=3306/tcp 删除允许3306放通
firewall-cmd --query-port=8080/tcp 查询8080端口tcp有没有放通,返回yes or No
firewall-cmd --help 查看帮助,