brctl – 以太网网桥管理

brctl命令用于设置、维护和检查linux内核中的以太网网桥配置。 以太网网桥是一种设备,通常用于将以太网的不同网络连接在一起,以便这些以太网对参与者显示为一个以太网。所连接的每个以太网对应于网桥中的一个物理接口。这些单独的以太网被聚集成一个更大的(“逻辑”)以太网,这个更大的以太网对应于网桥网络接口。

语法格式brctl [参数]
常用参数**

addbr 创建网桥
delbr 删除网桥
addif 将网卡接口接入网桥
delif 删除网桥接入的网卡接口
show 查询网桥信息
stp {on|off} 启用禁用 STP
showstp 查看网桥 STP 信息
setfd 设置网桥延迟
showmacs 查看 mac 信息

参考实例

  1. 使用addbr参数创建网桥:
  2. [root@linuxcool ~]# brctl addbr br10
  3. 使用delbr参数删除网桥:
  4. [root@linuxcool ~]# brctl delbr br10
  5. 使用show参数查询网桥信息:
  6. [root@linuxcool ~]# brctl show
  7. 启用网桥STP
  8. [root@linuxcool ~]# brctl stp br10 on
  9. 关闭网桥STP
  10. [root@linuxcool ~]# brctl stp br10 off

如未安装此命令需安装:

yum install -y bridge-utils

ip netns - 网络命名空间

命令介绍
  ip netns 命令是用来管理 网络命名空间 的,网络命名空间可以实现 网络隔离。每个网络命名空间都提供了一个完全独立的网络协议栈,包括网络设备接口、IPV4 和 IPV6 协议栈、IP路由表、防火墙规则、端口、sockets 等。像 docker 就是利用 Linux 的网络命名空间来实现容器网络的隔离。

用法 含义
ip netns list 列出网络命名空间。此命令显示的是 “/var/run/netns” 中的所有网络命名空间。
ip netns add NAME 添加网络命名空间
ip [-all] netns delete [NAME] 删除网络命名空间
ip [-all] netns exec [NAME] cmd … 在指定的网络命名空间中执行命令
ip netns set NAME NETNSID 给网络命名空间分配id
ip netns identify [PID] 查看进程的网络命名空间
ip netns monitor 监控对网络命名空间的操作
ip netns pids NAME 查找使用此网络命名空间并将其作为主要网络命名空间的进程。此命令会从 /proc 目录中遍历。

示例演示
添加并列出network space,随后删除所有的network space。

root@cp:~# ip netns add test1
root@cp:~# ip netns add test2
root@cp:~# ip netns ls
test2
test1
root@cp:~# ip -all netns del
root@cp:~# ip netns ls

创建的网络命名空间是可以在 /var/run/netns 路径下看到。

root@cp:~# cd /var/run/netns/
root@cp:/var/run/netns# ls
test1  test2

使用 exec 命令在网络命名空间中执行命令,查看 test1 的网卡信息

root@cp:~# ip netns exec test1 ip a
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

网络命名空间除了网络是虚拟的以外,文件系统完全和当前系统共享,也就是说所有本地可以使用的命令都可以在网络命名空间中使用。

root@cp:~# ip netns exec test1 ls
app  backup.tar  cp1  perf.data  registry_latest.tar  test  test_0.1.tar  test-bind  ubuntu-test.tar
root@cp:~# ip netns exec test1 pwd
/root

进入网络命名空间可以用 exec 执行 bash 即可。

root@cp:~# ip netns exec test1 bash
root@cp:~# ip a
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

–all 选项可以在所有网络命名空间中执行命令。

root@cp:~# ip -all netns exec ip a

netns: test2
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

netns: test1
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

使用 ip netns set NAME NETNSID 给网络命名空间分配ID。该ID仅在当前网络命名空间中有效,如果指定了关键字“ auto”,则将会自动选择一个可用的nsid。内核将在某些 netlink 消息中使用此ID,如果在内核需要时未分配ID,则它将由内核自动分配。注意 ID 分配后,将无法更改。

root@cp:~# ip netns add cp
root@cp:~# ip netns 
cp
root@cp:~# ip netns set cp 6
root@cp:~# ip netns 
cp (id: 6)

使用 ip netns monitor 监控网络命名空间的添加和删除事件,只能监控添加和删除。

root@cp:~# ip netns del cp
root@cp:~# ip netns add cp

另一个终端同步反馈的

root@cp:~# ip netns monitor
delete cp
add cp

以下两个示例以 docker 容器为例,在没做一些设置前,使用 ip netns 命令是无法管理分配给 docker 容器的网络命名空间,至于如何使用 ip netns 命令管理分配给容器的网络命名空间,下面扩展中有介绍到。在做下面示例时请先做好以下设置。

root@cp:~# docker run -itd --name test centos
7ec02643b32d1c53b39126f6d603b72a402597d938ddef35e7bdb4076763c68f
root@cp:~# ip netns list    # 查看为空
root@cp:~# 
root@cp:~# ln -s /proc/11421/ns/net /var/run/netns/test
root@cp:~# ip netns list
test (id: 0)

使用 ip netns identify 命令查看容器 test 的网络命名空间。使用 ip netns pids 命令查找使用该网络命名空间的进程。

root@cp:~# ip netns identify 11421
test
root@cp:~# ip netns pids test
11421

扩展
1、网络命名空间的连接
  创建一对 veth pair 虚拟网络设备接口,然后将其分别分配给两个网络命名空间,去连接两个网络命名空间。
  注:veth-pair 是一对的虚拟网络设备接口,它都是成对出现的,所以它常常充当着一个桥梁,我们可以用它实现 “网络命名空间之间的连接”、“Docker 容器之间的连接” 、“Docker 容器和网桥间的连接” 等等。

root@cp:~# ip link add name net1 type veth peer name net2
root@cp:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:a9:42:0e brd ff:ff:ff:ff:ff:ff
    inet 192.168.18.25/24 brd 192.168.18.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::c75c:21df:8db2:598e/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:2c:d7:37:17 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:2cff:fed7:3717/64 scope link 
       valid_lft forever preferred_lft forever
19: net2@net1: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether e2:3c:d5:80:93:3c brd ff:ff:ff:ff:ff:ff
20: net1@net2: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether f2:f1:b8:34:4a:9a brd ff:ff:ff:ff:ff:ff

将两个虚拟接口迁移到对应的网络命名空间里。

root@cp:~# ip link set net1 netns test1
root@cp:~# ip link set net2 netns test2
root@cp:~# ip -all netns exec ip a

netns: test2
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
19: net2@if20: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether e2:3c:d5:80:93:3c brd ff:ff:ff:ff:ff:ff link-netnsid 0

netns: test1
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
20: net1@if19: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether f2:f1:b8:34:4a:9a brd ff:ff:ff:ff:ff:ff link-netnsid 1

给两块网卡设置ip并启动

root@cp:~# ip netns exec test1 ip addr add local 192.168.100.1/24 dev net1
root@cp:~# ip netns exec test2 ip addr add local 192.168.100.2/24 dev net2
root@cp:~# ip netns exec test1 ifconfig net2 up
root@cp:~# ip netns exec test2 ifconfig net2 up
root@cp:~# ip -all netns exec ip a

netns: test2
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
19: net2@if20: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether e2:3c:d5:80:93:3c brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 192.168.100.2/24 scope global net2
       valid_lft forever preferred_lft forever
    inet6 fe80::e03c:d5ff:fe80:933c/64 scope link 
       valid_lft forever preferred_lft forever

netns: test1
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
20: net1@if19: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether f2:f1:b8:34:4a:9a brd ff:ff:ff:ff:ff:ff link-netnsid 1
    inet 192.168.100.1/24 scope global net1
       valid_lft forever preferred_lft forever
    inet6 fe80::f0f1:b8ff:fe34:4a9a/64 scope link 
       valid_lft forever preferred_lft forever

ping 测试通信

root@cp:~# ip netns exec test1 ping 192.168.100.2
PING 192.168.100.2 (192.168.100.2) 56(84) bytes of data.
64 bytes from 192.168.100.2: icmp_seq=1 ttl=64 time=0.275 ms
64 bytes from 192.168.100.2: icmp_seq=2 ttl=64 time=0.047 ms
64 bytes from 192.168.100.2: icmp_seq=3 ttl=64 time=0.043 ms
^C
--- 192.168.100.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2008ms
rtt min/avg/max/mdev = 0.043/0.121/0.275/0.109 ms

2、关于docker网络命名空间的问题

  当 docker 容器被创建出来后,你会发现使用 ip netns 命令无法看到容器对应的网络命名空间。这是因为 ip netns 命令是从 /var/run/netns 文件夹中读取内容的,而 docker 容器的网络命名空间不是在 /var/run/netns 下,而是位于 /proc/[pid]/ns/net。想要使用 ip netns 命令去管理 docker 容器的网络命名空间,就需要将它的网络命名空间显示在 /var/run/netns 目录下,那就要先找到容器的网络命名空间在哪里,然后做一个软链接即可。
首先查询容器的PID。

root@cp:~# docker inspect --format '{{.State.Pid}}' web
4775

然后创建软链接,建议指定在 /var/run/netns/ 中的名字,因为每个容器都是net。

root@cp:~# ln -s /proc/4775/ns/net /var/run/netns/web
root@cp:~# ip netns ls
web (id: 0)
test2 (id: 2)
test1 (id: 1)

此时就可以用 ip netns 命令去管理 docker 容器的网络命名空间了。

ip - 网络配置工具

ip命令 用来显示或操纵Linux主机的路由、网络设备、策略路由和隧道,是Linux下较新的功能强大的网络配置工具。

语法

ip(选项)(参数)
Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }
       ip [ -force ] -batch filename

选项

OBJECT := { link | address | addrlabel | route | rule | neigh | ntable |
       tunnel | tuntap | maddress | mroute | mrule | monitor | xfrm |
       netns | l2tp | macsec | tcp_metrics | token }

-V:显示指令版本信息;
-s:输出更详细的信息;
-f:强制使用指定的协议族;
-4:指定使用的网络层协议是IPv4协议;
-6:指定使用的网络层协议是IPv6协议;
-0:输出信息每条记录输出一行,即使内容较多也不换行显示;
-r:显示主机时,不使用IP地址,而使用主机的域名。

参数

OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |
        -h[uman-readable] | -iec |
        -f[amily] { inet | inet6 | ipx | dnet | bridge | link } |
        -4 | -6 | -I | -D | -B | -0 |
        -l[oops] { maximum-addr-flush-attempts } |
        -o[neline] | -t[imestamp] | -ts[hort] | -b[atch] [filename] |
        -rc[vbuf] [size] | -n[etns] name | -a[ll] }

网络对象:指定要管理的网络对象;
具体操作:对指定的网络对象完成具体操作;
help:显示网络对象支持的操作命令的帮助信息。

实例

ip link show                     # 显示网络接口信息
ip link set eth0 up             # 开启网卡
ip link set eth0 down            # 关闭网卡
ip link set eth0 promisc on      # 开启网卡的混合模式
ip link set eth0 promisc offi    # 关闭网卡的混个模式
ip link set eth0 txqueuelen 1200 # 设置网卡队列长度
ip link set eth0 mtu 1400        # 设置网卡最大传输单元
ip addr show     # 显示网卡IP信息
ip addr add 192.168.0.1/24 dev eth0 # 设置eth0网卡IP地址192.168.0.1
ip addr del 192.168.0.1/24 dev eth0 # 删除eth0网卡IP地址
ip route show # 显示系统路由
ip route add default via 192.168.1.254   # 设置系统默认路由
ip route list                 # 查看路由信息
ip route add 192.168.4.0/24  via  192.168.0.254 dev eth0 # 设置192.168.4.0网段的网关为192.168.0.254,数据走eth0接口
ip route add default via  192.168.0.254  dev eth0        # 设置默认网关为192.168.0.254
ip route del 192.168.4.0/24   # 删除192.168.4.0网段的网关
ip route del default          # 删除默认路由
ip route delete 192.168.1.0/24 dev eth0 # 删除路由

ip link help

[root@autotest /]# ip link help
Usage: ip link add [link DEV] [ name ] NAME
                   [ txqueuelen PACKETS ]
                   [ address LLADDR ]
                   [ broadcast LLADDR ]
                   [ mtu MTU ] [index IDX ]
                   [ numtxqueues QUEUE_COUNT ]
                   [ numrxqueues QUEUE_COUNT ]
                   type TYPE [ ARGS ]

       ip link delete { DEVICE | dev DEVICE | group DEVGROUP } type TYPE [ ARGS ]

       ip link set { DEVICE | dev DEVICE | group DEVGROUP }
                      [ { up | down } ]
                      [ type TYPE ARGS ]
                      [ arp { on | off } ]
                      [ dynamic { on | off } ]
                      [ multicast { on | off } ]
                      [ allmulticast { on | off } ]
                      [ promisc { on | off } ]
                      [ trailers { on | off } ]
                      [ carrier { on | off } ]
                      [ txqueuelen PACKETS ]
                      [ name NEWNAME ]
                      [ address LLADDR ]
                      [ broadcast LLADDR ]
                      [ mtu MTU ]
                      [ netns { PID | NAME } ]
                      [ link-netnsid ID ]
              [ alias NAME ]
                      [ vf NUM [ mac LLADDR ]
                   [ vlan VLANID [ qos VLAN-QOS ] [ proto VLAN-PROTO ] ]
                   [ rate TXRATE ]
                   [ max_tx_rate TXRATE ]
                   [ min_tx_rate TXRATE ]
                   [ spoofchk { on | off} ]
                   [ query_rss { on | off} ]
                   [ state { auto | enable | disable} ] ]
                   [ trust { on | off} ] ]
                   [ node_guid { eui64 } ]
                   [ port_guid { eui64 } ]
              [ xdp { off |
                  object FILE [ section NAME ] [ verbose ] |
                  pinned FILE } ]
              [ master DEVICE ][ vrf NAME ]
              [ nomaster ]
              [ addrgenmode { eui64 | none | stable_secret | random } ]
                      [ protodown { on | off } ]

       ip link show [ DEVICE | group GROUP ] [up] [master DEV] [vrf NAME] [type TYPE]

       ip link xstats type TYPE [ ARGS ]

       ip link afstats [ dev DEVICE ]

       ip link help [ TYPE ]

指定网络类型TYPE := { vlan | veth | vcan | dummy | ifb | macvlan | macvtap |
          bridge | bond | team | ipoib | ip6tnl | ipip | sit | vxlan |
          gre | gretap | ip6gre | ip6gretap | vti | nlmon | team_slave |
          bond_slave | ipvlan | geneve | bridge_slave | vrf | macsec }

用ip命令显示网络设备的运行状态

[root@localhost ~]# ip link list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:16:3e:00:1e:51 brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:16:3e:00:1e:52 brd ff:ff:ff:ff:ff:ff

显示更加详细的设备信息

[root@localhost ~]# ip -s link list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    RX: bytes  packets  errors  dropped overrun mcast   
    5082831    56145    0       0       0       0      
    TX: bytes  packets  errors  dropped carrier collsns
    5082831    56145    0       0       0       0      
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:16:3e:00:1e:51 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast   
    3641655380 62027099 0       0       0       0      
    TX: bytes  packets  errors  dropped carrier collsns
    6155236    89160    0       0       0       0      
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:16:3e:00:1e:52 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast   
    2562136822 488237847 0       0       0       0      
    TX: bytes  packets  errors  dropped carrier collsns
    3486617396 9691081  0       0       0       0

显示核心路由表

[root@localhost ~]# ip route list 
112.124.12.0/22 dev eth1  proto kernel  scope link  src 112.124.15.130
10.160.0.0/20 dev eth0  proto kernel  scope link  src 10.160.7.81
192.168.0.0/16 via 10.160.15.247 dev eth0
172.16.0.0/12 via 10.160.15.247 dev eth0
10.0.0.0/8 via 10.160.15.247 dev eth0
default via 112.124.15.247 dev eth1

显示邻居表

[root@localhost ~]# ip neigh list
112.124.15.247 dev eth1 lladdr 00:00:0c:9f:f3:88 REACHABLE
10.160.15.247 dev eth0 lladdr 00:00:0c:9f:f2:c0 STALE

获取主机所有网络接口

ip link | grep -E '^[0-9]' | awk -F: '{print $2}'
[root@linux ~]# ip link set dev eth0 up      #up/down 起动/关闭设备

[root@linux ~]# ip link set dev eth0 txqueuelen 100      #改变设备传输队列的长度

[root@linux ~]# ip link set dev eth0 mtu 1500      #改变网络设备MTU(最大传输单元)的值

[root@linux ~]# ip link set dev eth0 address 00:01:4f:00:15:f1      #修改网络设备的MAC地址

[root@linux ~]# ip -s -s link ls eth0      #查看eth0网卡信息 等同于ifconfig eth0

[root@linux ~]# ip addr add local 192.168.4.1/28 brd + label eth0:1 dev eth0      #为每个地址设置一个字符串作为标签

[root@linux ~]# ip addr add 192.168.4.2/24 brd + dev eth1 label eth1:1      #在以太网接口eth0上增加一个地址192.168.4.2,掩码长度为24位(155.155.155.0),标准广播地址,标签为eth0:Alias

[root@linux ~]# ip addr del 192.168.4.1/24 brd + dev eth0 label eth0:1      #ip address delete--删除一个协议地址. 缩写:delete、del、d

[root@linux ~]# ip addr ls eth0      #ip address show--显示协议地址. 缩写:show、list、lst、sh、ls、l

[root@linux ~]# ip -s -s a f to 10/8      #删除属于私网10.0.0.0/8的所有地址

[root@linux ~]# ip -4 addr flush label "eth0"      #取消所有以太网卡的IP地址

[root@linux ~]# ip neigh add 10.0.0.3 lladdr 0:0:0:0:0:1 dev eth0 nud perm      #在设备eth0上,为地址10.0.0.3添加一个permanent ARP条目

[root@linux ~]# ip neigh chg 10.0.0.3 dev eth0 nud reachable      #把状态改为reachable

[root@linux ~]# ip neigh del 10.0.0.3 dev eth0      #删除设备eth0上的一个ARP条目10.0.0.3

[root@linux ~]# ip route add 192.168.10.0/24 dev eth1    #添加192.168.10.0/24网段转发到eth1

ifconfig -配置和显示Linux系统网卡的网络参数

fconfig命令 被用于配置和显示Linux内核中网络接口的网络参数。用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了。

参数

add<地址>:设置网络设备IPv6的ip地址;
del<地址>:删除网络设备IPv6的IP地址;
down:关闭指定的网络设备;
<hw<网络设备类型><硬件地址>:设置网络设备的类型与硬件地址;
io_addr<I/O地址>:设置网络设备的I/O地址;
irq<IRQ地址>:设置网络设备的IRQ;
media<网络媒介类型>:设置网络设备的媒介类型;
mem_start<内存地址>:设置网络设备在主内存所占用的起始地址;
metric<数目>:指定在计算数据包的转送次数时,所要加上的数目;
mtu<字节>:设置网络设备的MTU;
netmask<子网掩码>:设置网络设备的子网掩码;
tunnel<地址>:建立IPv4与IPv6之间的隧道通信地址;
up:启动指定的网络设备;
-broadcast<地址>:将要送往指定地址的数据包当成广播数据包来处理;
-pointopoint<地址>:与指定地址的网络设备建立直接连线,此模式具有保密功能;
-promisc:关闭或启动指定网络设备的promiscuous模式;
IP地址:指定网络设备的IP地址;
网络设备:指定网络设备的名称。

实例

显示网络设备信息(激活状态的):

[root@localhost ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:16:3E:00:1E:51  
          inet addr:10.160.7.81  Bcast:10.160.15.255  Mask:255.255.240.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:61430830 errors:0 dropped:0 overruns:0 frame:0
          TX packets:88534 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:3607197869 (3.3 GiB)  TX bytes:6115042 (5.8 MiB)
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:56103 errors:0 dropped:0 overruns:0 frame:0
          TX packets:56103 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:5079451 (4.8 MiB)  TX bytes:5079451 (4.8 MiB)

说明
eth0 表示第一块网卡,其中HWaddr表示网卡的物理地址,可以看到目前这个网卡的物理地址(MAC地址)是00:16:3E:00:1E:51
inet addr 用来表示网卡的IP地址,此网卡的IP地址是10.160.7.81,广播地址Bcast:10.160.15.255,掩码地址Mask:255.255.240.0
lo 是表示主机的回坏地址,这个一般是用来测试一个网络程序,但又不想让局域网或外网的用户能够查看,只能在此台主机上运行和查看所用的网络接口。比如把 httpd服务器的指定到回坏地址,在浏览器输入127.0.0.1就能看到你所架WEB网站了。但只是您能看得到,局域网的其它主机或用户无从知道。

  • 第一行:连接类型:Ethernet(以太网)HWaddr(硬件mac地址)。
  • 第二行:网卡的IP地址、子网、掩码。
  • 第三行:UP(代表网卡开启状态)RUNNING(代表网卡的网线被接上)MULTICAST(支持组播)MTU:1500(最大传输单元):1500字节。
  • 第四、五行:接收、发送数据包情况统计。
  • 第七行:接收、发送数据字节数统计信息。

启动关闭指定网卡:

ifconfig eth0 up
ifconfig eth0 down

ifconfig eth0 up为启动网卡eth0,ifconfig eth0 down为关闭网卡eth0。ssh登陆linux服务器操作要小心,关闭了就不能开启了,除非你有多网卡。
为网卡配置和删除IPv6地址:

ifconfig eth0 add 33ffe:3240:800:1005::2/64    #为网卡eth0配置IPv6地址
ifconfig eth0 del 33ffe:3240:800:1005::2/64    #为网卡eth0删除IPv6地址

用ifconfig修改MAC地址:

ifconfig eth0 hw ether 00:AA:BB:CC:dd:EE

配置IP地址:

[root@localhost ~]# ifconfig eth0 192.168.2.10
[root@localhost ~]# ifconfig eth0 192.168.2.10 netmask 255.255.255.0
[root@localhost ~]# ifconfig eth0 192.168.2.10 netmask 255.255.255.0 broadcast 192.168.2.255

启用和关闭arp协议:

ifconfig eth0 arp    #开启网卡eth0 的arp协议
ifconfig eth0 -arp   #关闭网卡eth0 的arp协议

设置最大传输单元:

ifconfig eth0 mtu 1500    #设置能通过的最大数据包大小为 1500 bytes

其它实例

ifconfig   #处于激活状态的网络接口
ifconfig -a  #所有配置的网络接口,不论其是否激活
ifconfig eth0  #显示eth0的网卡信息

nslookup - 查询域名DNS信息的工具

nslookup命令 是常用域名查询工具,就是查DNS信息用的命令。
nslookup4有两种工作模式,即“交互模式”和“非交互模式”。在“交互模式”下,用户可以向域名服务器查询各类主机、域名的信息,或者输出域名中的主机列表。而在“非交互模式”下,用户可以针对一个主机或域名仅仅获取特定的名称或所需信息。
进入交互模式,直接输入nslookup命令,不加任何参数,则直接进入交互模式,此时nslookup会连接到默认的域名服务器(即/etc/resolv.conf的第一个dns地址)。或者输入nslookup -nameserver/ip。进入非交互模式,就直接输入nslookup 域名就可以了。

语法

nslookup(选项)(参数)

选项

-sil:不显示任何警告信息。

参数

域名:指定要查询域名。

实例

[root@localhost ~]# nslookup www.jsdig.com
Server:         202.96.104.15
Address:        202.96.104.15#53
Non-authoritative answer:
www.jsdig.com canonical name = host.1.jsdig.com.
Name:   host.1.jsdig.com
Address: 100.42.212.8
****最简单的方法

[root@rudder ~]# nslookup baidu.com
Server:         8.8.8.8
Address:        8.8.8.8#53

Non-authoritative answer:
Name:   baidu.com
Address: 123.125.114.144
Name:   baidu.com
Address: 220.181.111.85
Name:   baidu.com
Address: 220.181.111.86


****nslookup,交互方式,查看dns
[root@rudder ~]# nslookup 
> www.baidu.com
Server:        172.17.0.254
Address:    172.17.0.254#53

Non-authoritative answer:     #非权威答案,表明是在缓存中读取的
www.baidu.com    canonical name = www.a.shifen.com.
Name:    www.a.shifen.com
Address: 61.135.169.105       #返回第一个IP地址
Name:    www.a.shifen.com
Address: 61.135.169.125       #返回第二个IP地址
> server 8.8.8.8              #设置域名服务器为 8.8.8.8
Default server: 8.8.8.8
Address: 8.8.8.8#53
> www.baidu.com               #再次请求百度的IP地址
Server:        8.8.8.8
Address:    8.8.8.8#53

Non-authoritative answer:
www.baidu.com    canonical name = www.a.shifen.com.
Name:    www.a.shifen.com
Address: 220.181.111.147      #不同的DNS获取的IP地址是不同的。

ss命令 – 显示活动套接字信息

  1. 比 netstat 好用的socket统计信息,iproute2 包附带的另一个工具,允许你查询 socket 的有关统计信息
  2. ss命令 用来显示处于活动状态的套接字信息。ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。
  3. 当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。可能你不会有切身的感受,但请相信我,当服务器维持的连接达到上万个的时候,使用netstat等于浪费 生命,而用ss才是节省时间。
  4. 天下武功唯快不破。ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。当然,如果你的系统中没有tcp_diag,ss也可以正常运行,只是效率会变得稍慢。
    选项:
    -h, --help      帮助信息
    -V, --version   程序版本信息
    -n, --numeric   不解析服务名称
    -r, --resolve   解析主机名
    -a, --all       显示所有套接字(sockets)
    -l, --listening 显示监听状态的套接字(sockets)
    -o, --options   显示计时器信息
    -e, --extended  显示详细的套接字(sockets)信息
    -m, --memory    显示套接字(socket)的内存使用情况
    -p, --processes 显示使用套接字(socket)的进程
    -i, --info      显示 TCP内部信息
    -s, --summary   显示套接字(socket)使用概况
    -4, --ipv4      仅显示IPv4的套接字(sockets)
    -6, --ipv6      仅显示IPv6的套接字(sockets)
    -0, --packet    显示 PACKET 套接字(socket)
    -t, --tcp       仅显示 TCP套接字(sockets)
    -u, --udp       仅显示 UCP套接字(sockets)
    -d, --dccp      仅显示 DCCP套接字(sockets)
    -w, --raw       仅显示 RAW套接字(sockets)
    -x, --unix      仅显示 Unix套接字(sockets)
    -f, --family=FAMILY  显示 FAMILY类型的套接字(sockets),FAMILY可选,支持  unix, inet, inet6, link, netlink
    -A, --query=QUERY, --socket=QUERY
       QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]
    -D, --diag=FILE     将原始TCP套接字(sockets)信息转储到文件
    -F, --filter=FILE  从文件中都去过滤器信息
        FILTER := [ state TCP-STATE ] [ EXPRESSION ]
    
    实例:
    ss -t -a    # 显示TCP连接
    ss -s       # 显示 Sockets 摘要
    ss -l       # 列出所有打开的网络连接端口
    ss -pl      # 查看进程使用的socket
    ss -lp | grep 3306  # 找出打开套接字/端口应用程序
    ss -u -a    显示所有UDP Sockets
    ss -o state established '( dport = :smtp or sport = :smtp )' # 显示所有状态为established的SMTP连接
    ss -o state established '( dport = :http or sport = :http )' # 显示所有状态为Established的HTTP连接
    ss -o state fin-wait-1 '( sport = :http or sport = :https )' dst 193.233.7/24  # 列举出处于 FIN-WAIT-1状态的源端口为 80或者 443,目标网络为 193.233.7/24所有 tcp套接字
    # ss 和 netstat 效率对比
    time netstat -at
    time ss
    # 匹配远程地址和端口号
    # ss dst ADDRESS_PATTERN
    ss dst 192.168.1.5
    ss dst 192.168.119.113:http
    ss dst 192.168.119.113:smtp
    ss dst 192.168.119.113:443
    # 匹配本地地址和端口号
    # ss src ADDRESS_PATTERN
    ss src 192.168.119.103
    ss src 192.168.119.103:http
    ss src 192.168.119.103:80
    ss src 192.168.119.103:smtp
    ss src 192.168.119.103:25
    
    将本地或者远程端口和一个数比较
    # ss dport OP PORT 远程端口和一个数比较;
    # ss sport OP PORT 本地端口和一个数比较
    # OP 可以代表以下任意一个:
    # <= or le : 小于或等于端口号
    # >= or ge : 大于或等于端口号
    # == or eq : 等于端口号
    # != or ne : 不等于端口号
    # < or gt : 小于端口号
    # > or lt : 大于端口号
    ss  sport = :http
    ss  dport = :http
    ss  dport \> :1024
    ss  sport \> :1024
    ss sport \< :32000
    ss  sport eq :22
    ss  dport != :22
    ss  state connected sport = :http
    ss \( sport = :http or sport = :https \)
    ss -o state fin-wait-1 \( sport = :http or sport = :https \) dst 192.168.1/24
    
    用TCP 状态过滤Sockets
    ss -4 state closing
    # ss -4 state FILTER-NAME-HERE
    # ss -6 state FILTER-NAME-HERE
    # FILTER-NAME-HERE 可以代表以下任何一个:
    # established、 syn-sent、 syn-recv、 fin-wait-1、 fin-wait-2、 time-wait、 closed、 close-wait、 last-ack、 listen、 closing、
    # all : 所有以上状态
    # connected : 除了listen and closed的所有状态
    # synchronized :所有已连接的状态除了syn-sent
    # bucket : 显示状态为maintained as minisockets,如:time-wait和syn-recv.
    # big : 和bucket相反.
    
    显示ICP连接
    [root@localhost ~]# ss -t -a
    State       Recv-Q Send-Q                            Local Address:Port                                Peer Address:Port
    LISTEN      0      0                                             *:3306                                           *:*
    LISTEN      0      0                                             *:http                                           *:*
    LISTEN      0      0                                             *:ssh                                            *:*
    LISTEN      0      0                                     127.0.0.1:smtp                                           *:*
    ESTAB       0      0                                112.124.15.130:42071                              42.156.166.25:http
    ESTAB       0      0                                112.124.15.130:ssh                              121.229.196.235:33398
    
    显示 Sockets 摘要 ``` [root@localhost ~]# ss -s Total: 172 (kernel 189) TCP: 10 (estab 2, closed 4, orphaned 0, synrecv 0, timewait 0/0), ports 5 Transport Total ip IPv6
  • 189 - - RAW 0 0 0 UDP 5 5 0 TCP 6 6 0 INET 11 11 0 FRAG 0 0 0
    列出当前的established, closed, orphaned and waiting TCP sockets<br />**列出所有打开的网络连接端口**
    
    [root@localhost ~]# ss -l Recv-Q Send-Q Local Address:Port Peer Address:Port 0 0 :3306 : 0 0 :http : 0 0 :ssh : 0 0 127.0.0.1:smtp :*
    **查看进程使用的socket**
    
    [root@localhost ~]# ss -pl Recv-Q Send-Q Local Address:Port Peer Address:Port 0 0 :3306 : users:((“mysqld”,1718,10)) 0 0 :http : users:((“nginx”,13312,5),(“nginx”,13333,5)) 0 0 :ssh : users:((“sshd”,1379,3)) 0 0 127.0.0.1:smtp :* us
    **找出打开套接字/端口应用程序**
    
    [root@localhost ~]# ss -pl | grep 3306 0 0 :3306 :* users:((“mysqld”,1718,10))
    **显示所有UDP Sockets**
    
    [root@localhost ~]# ss -u -a State Recv-Q Send-Q Local Address:Port Peer Address:Port UNCONN 0 0 :syslog : UNCONN 0 0 112.124.15.130:ntp : UNCONN 0 0 10.160.7.81:ntp : UNCONN 0 0 127.0.0.1:ntp : UNCONN 0 0 :ntp :
    **出所有端口为 22(ssh)的连接**
    
    ss state all sport = :ssh Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port tcp LISTEN 0 128 :ssh : tcp ESTAB 0 0 192.168.0.136:ssh 192.168.0.102:46540 tcp LISTEN 0 128 :::ssh ::: ```

netstat-查看网络系统状态信息

netstat命令 用来打印Linux中网络系统的状态信息,可让你得知整个Linux系统的网络情况。

选项:

-a或--all:显示所有连线中的Socket;
-A<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址;
-c或--continuous:持续列出网络状态;
-C或--cache:显示路由器配置的快取信息;
-e或--extend:显示网络其他相关信息;
-F或--fib:显示FIB;
-g或--groups:显示多重广播功能群组组员名单;
-h或--help:在线帮助;
-i或--interfaces:显示网络界面信息表单;
-l或--listening:显示监控中的服务器的Socket;
-M或--masquerade:显示伪装的网络连线;
-n或--numeric:直接使用ip地址,而不通过域名服务器;
-N或--netlink或--symbolic:显示网络硬件外围设备的符号连接名称;
-o或--timers:显示计时器;
-p或--programs:显示正在使用Socket的程序识别码和程序名称;
-r或--route:显示Routing Table;
-s或--statistice:显示网络工作信息统计表;
-t或--tcp:显示TCP传输协议的连线状况;
-u或--udp:显示UDP传输协议的连线状况;
-v或--verbose:显示指令执行过程;
-V或--version:显示版本信息;
-w或--raw:显示RAW传输协议的连线状况;
-x或--unix:此参数的效果和指定"-A unix"参数相同;
--ip或--inet:此参数的效果和指定"-A inet"参数相同。

示例:
查看详细的网络状况:
[root@linuxcool ~]# netstat -a
显示当前户籍UDP连接状况:
[root@linuxcool ~]# netstat -nu
显示UDP端口号的使用情况:
[root@linuxcool ~]# netstat -apu

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address  Foreign Address  State  PID/Program name    
udp        0      0 0.0.0.0:bootpc          0.0.0.0:*      4000/dhclient       
udp        0      0 localhost:323           0.0.0.0:*      3725/chronyd        
udp6       0      0 localhost:323           [::]:*         3725/chronyd

显示网卡列表:
[root@linuxcool ~]# netstat -i

Kernel Interface table 
Iface MTU Met  RX-OK  RX-ERR  RX-DRP RX-OVR  TX-OK TX-ERR TX-DRP TX-OVR Flg 
eth0 1500   0  181864   0      0       0     141278   0     0     0    BMRU 
lo   16436  0   3362    0      0       0     3362     0     0     0    LRU

显示组播组的关系:
[root@linuxcool ~]# netstat -g

IPv6/IPv4 Group Memberships Interface    
RefCnt Group 
--------------- ------ --------------------- 
lo        1   ALL-SYSTEMS.MCAST.NET 
eth0      1   ALL-SYSTEMS.MCAST.NET lo       1   ff02::1 
eth0      1   ff02::1:ff0a:b0c eth0          1   ff02::1