一次 ping 不通问题排查

线上一台服务器在重启后发现,有些机器无法 ping 通,有些机器可以。

机器情况如下:

host_a 192.168.1.111 192.168.11.1 x.x.x.x
host_b 192.168.1.112
host_c y.y.y.y 192.168.11.2
其中,host_a 和 host_b 在同一个局域网中 192.168.1.0/24,host_a 上运行着 openvpn server,host_c 运行着 openvpn client。

问题表现为在 c 机器上,ping b 的 ip,无法 ping 通,tcpdump 在 b 上抓包,有接收到 ping request 包,没有 ping reply 包。

正当我要按 stackoverflow 上的一个答案配置打开 log_martians 这个选项时,想到会不会是 b 的路由表配置问题,运行 ip route 查看路由发现果然。

ip route add 192.168.11.0/24 via 192.168.1.111

上述命令添加路由后问题解决。

 

参考:

  1. http://stackoverflow.com/questions/18536796/icmp-request-received-but-doesnt-reply
  2. https://www.cyberciti.biz/faq/linux-log-suspicious-martian-packets-un-routable-source-addresses/
  3. https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/s1-networkscripts-static-routes.html

【转】Mac OS/Linux命令查询网络端口占用情况

netstat命令

netstat -an | grep 3306

3306替换成需要grep的端口号

lsof命令

通过list open file命令可以查看到当前打开文件,在linux中所有事物都是以文件形式存在,包括网络连接及硬件设备。

lsof -i:80

-i参数表示网络链接,:80指明端口号,该命令会同时列出PID,方便kill

原文:http://www.cnblogs.com/kaiye/archive/2013/05/25/3099393.html

Ubuntu Server 静态IP简洁配置

1、配置静态IP地址:

vim /etc/network/interfaces

原内容有如下4行:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

以上表示默认使用DHCP分配IP,修改为如下:

auto lo
iface lo inet loopback

auto eth0
#iface eth0 inet dhcp
iface eth0 inet static
address 192.168.1.110
netmask 255.255.255.0
gateway 192.168.1.1

保存退出。
注意:只需要设置address(IP地址)、netmask(子网掩码)、gateway(网关)这三项就OK,network和broadcast这两项参数是可以不写的。

2、手动设置DNS服务器:

vim /etc/resolvconf/resolv.conf.d/base

添加如下内容(这点所有Linux发行版都通用):

nameserver 8.8.8.8
nameserver 8.8.4.4

3、重启网卡使其生效:

ifdown eth0 # 如果你的网卡名不是这个,请更改为对应的
ifup eth0
# service networking restart 这个命令是不会成功的

 

大部分来自:http://www.ha97.com/4895.html,本文有修改。

Linux 查看 glibc 支持的版本

strings /lib/x86_64-linux-gnu/libc.so.6|grep GLIBC

Ubuntu 14.04.1 LTS 的输出为:

GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_2.15
GLIBC_2.16
GLIBC_2.17
GLIBC_2.18
GLIBC_PRIVATE
GNU C Library (Ubuntu EGLIBC 2.19-0ubuntu6.3) stable release version 2.19, by Roland McGrath et al.

 

参考文章:http://blog.ithomer.net/2014/09/centos-lib64-libc-so-6version-glibc-2-14-not-found-system-to-glibc-version-is-too-low/

使用 Shell 花括号展开

我们先来简单看下,什么是 Shell 花括号展开,在终端输入如下内容回车:

$ echo {1..5}
1 2 3 4 5

可以看到 {1..5} 被 Shell 展开为 1 2 3 4 5,我们再来看几个例子:

$ echo person_{1..5}
person_1 person_2 person_3 person_4 person_5

$ echo hello_{1..5}_word
hello_1_word hello_2_word hello_3_word hello_4_word hello_5_word

接下来是一个带有多个 {} 的例子:

$ echo a{1..5}b{3..6}c
a1b3c a1b4c a1b5c a1b6c a2b3c a2b4c a2b5c a2b6c a3b3c a3b4c a3b5c a3b6c a4b3c a4b4c a4b5c a4b6c a5b3c a5b4c a5b5c a5b6c

Shell 会根据 {} 的个数产生其笛卡尔积个串。{} 里面不仅可以由 .. 来表示一个序列中任一个字符,也可以使用逗号表示其列表中任一个字符,看这个例子:

$ echo a{1,8,b}c
a1c a8c abc

OK, 这就是 Shell 花括号展开式的作用啦,下面我们来看一个实际应用场景。

有这样一个需求,我们需要在一张数据表里面构造一些数据,假设是一张成绩表(users),分别有语文(chinese),数学(math),英语(english),这三个字段。手动往数据库里面当然是可以做到的,但是太费时间,用 PHP 写个循环插多条记录也比较快,但是至少还是得需要十几行代码,需要连数据库啊,需要在循环体里面插记录啊。这种情况 Shell 的花括号展开就可以派上用场啦。我们先写插入一条记录的 SQL:

insert user (chinese,math,english) values (80, 90, 70);

然后这样:

$ echo "insert user (chinese,math,english) values ("{80..90}", "{70..98}", "{68,70}");"

就会输出多条插入语句,在 MySQL 里面运行一下就 OK 啦。

有空多学一下这些技巧,虽然前期需要花点时间学习,但是一旦学会使用后在以后的工作中可以节约大量时间。

最近在看《The Linux Comand Line》这本书,这是一本开源的讲 Linux 命令行的书。以前都是用到什么看下手册或者在网上搜下,没有系统的学习过,书里面的内容大部分比较清楚(本人命令还算用得比较熟练啦),这两天感觉最大的收获就是知道了 Shell 花括号展开这个神器。

tar 解压常用压缩文件格式命令大全

常用压缩文件格式就那么几种,解压命令总结在此:

tar xzf filename.tar.gz
tar xjf filename.tar.bz2
tar xzf filename.tgz
tar xf filename.tar
xz -d filename.tar.xz; tar xf filename.tar # 这里解压一个 tar.xz 格式文件分成了两步,xz -d 会解压得到 filename.tar 文件,然后 tar 命令进行解包
unrar filename.rar
unzip filename.zip
7z x filename.7z

对 tar 命令参数说明:

  1. x 是解压,对应的 c 是压缩
  2. f 表示要解压文件(解压一个文件时 xf 这两个参数必带)
  3. v 输出解压过程(这个参数可选,没有则不输出)
  4. z 解压被 gzip 压缩过的文件,也就是 tar.gz 或者 tgz 格式的文件
  5. j 解压被 bzip2 压缩过的文件,也就是 tar.bz2 格式的文件

注意,有很多人搞不清楚打包和压缩的区别,tar 本身是一个打包命令,一般来说,以 tar 格式结尾的文件是由 tar 打包生成的文件,tar.gz(tar.bz2) 是打包后用 gzip(bzip2) 算法压缩过,实际上解压一个 tar.gz(tar.bz2) 文件是分两步进行的,先用 gzip(bzip2) 解压缩,然后用 tar 解开包。

解决 CENTOS ssh 连接上后乱码问题

1、更改 /etc/sysconfig/i18n 里的 LANG 为 “en_US.UTF-8″;

2、更改 /etc/profile 里的 LANG 为 “en_US.UTF-8″;

3、更改 /home/YOUR_NAME/.bashrc 里的 LANG(如果有该项就更改,没有不用管) 为 “en_US.UTF-8″;

其实解决乱码问题很简单,只要保持各个地方编码方式一致(当然,上面你要改为 “zh_CN.GB18030” 也是可以的)就 OK 了,依次检查系统语言设置有关的配置文件,都更改为想要的编码方式(这里主要是为了防止用户个人设置被修改,其实只需要在 .bashrc 里面指定编码就OK了,因为个人设置会覆盖系统的默认设置),然后使用客户端 putty 或者 SecureCRT 更改编码方式和上面设置保持一致,就不会出问题了。

新置 vps

前两天将博客放在 SAE 上,速度实在是感觉太慢了。昨晚准备写文一篇时,后台编辑文章竟然都加载不出来,于是购买了一年的 vps,199 元每年,256M 内存,感觉速度还不错。

选择系统的时候安装的是 centos5.5,源里自带的 php mysql,我觉得版本太低,于是,下载源码编译安装,折腾了 2 个小时,最终还是没搞定。编译安装 nginx 倒是很简单。第一次编译 php 时,默认 ./configure 没带任何参数,成功编译安装完成,后想到,需要 enable-fpm 选项啊,于是重新编译。再一次编译的时候 enable 其它一些东西,就出现一些库和依赖,搞烦我了。而下载 mysql 也启动不起来。最终换了 ubuntu 12.04 系统。ubuntu 多爽,一条命令装好所有需要的东西:

sudo apt-get install mysql-server nginx php5 php5-fpm php5-cli php5-gd php5-mcrypt php5-curl

接下来就是配置 nginx 了。先将博客所有文件复制过来,数据库导入,为了方便,网站根目录我放在了 /root/vhosts/upiu.net 下,访问,提示没权限。将 upliu.net 文件夹所有者改为 www-data 问题依旧。再将 upliu.net 权限改为 777 ,还是提示没权限。G 上搜索了一会,后来终于找到问题所在,upliu.net 文件夹权限设置没有问题,但是 www-data 用户没有访问上一层文件夹的权限,/root 和 /root/vhosts 这两个文件夹所有者为 root,www-data 当然无法读取了。

您觉得新主机速度怎么样?

update:2013-11-08 15:27:24 >>>>>>>>>>>

发现如果多刷新几下博客,就会响应很慢很慢,甚至出现 504 gateway time out 错误,php5-fpm 占用内存过大,导致系统反应慢,就连 ssh 都几乎没有响应。将 php5-fpm service 重启一下就好了。暂时解决办法:加了个定时任务,每隔一小时重启一下 php5-fpm 服务。

Linux 网络相关的命令

ifconfig 查看网络接口信息

ifconfig -a #查看所有接口
ifoncifg eth0 #查看特定接口
ifup eth0 #启用网卡
ifdown eth0 #禁用网卡

ping 测试网络连通性

ping 192.168.1.1
ping www.qq.com

host 或 dig 测试DNS解析

host www.qq.com
dig www.qq.com

ip route 显示路由表

route 路由配置命令
使用方法请自行搜索或查看 Man Page

traceroute 追踪到达目的地址的网络路径

traceroute www.qq.com

mtr 网络质量测试(结合了 traceroute 和 ping)

mtr www.qq.com