ip

ip命令位于iproute2包中

Linux ip 命令与 ifconfig 命令类似,但比 ifconfig 命令更加强大,主要功能是用于显示或设置网络设备。ip 命令是 Linux 加强版的的网络配置工具,用于代替 ifconfig 命令。

语法

ip [OPTIONS] OBJECT { COMMAND | help }

OBJECT为常用对象,值如下:

OBJECT={ link | addr | addrlabel | route | rule | neigh | ntable | tunnel | maddr | mroute | mrule | monitor | xfrm | token }
  • link:网络设备配置

  • address:设备上的协议(IP或IPv6)地址

  • addrlabel:协议地址选择的标签配置

  • route:路由表条目

  • rule:路由策略数据库中的规则

OPTIONS为常用选项,值可以是以下几种:

OPTIONS={ -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] | -h[uman-readable] | -iec | -f[amily] { inet | inet6 | ipx | dnet | link } | -o[neline] | -t[imestamp] | -b[atch] [filename] | -rc[vbuf] [size] }

常用选项的取值含义如下:

  • -V:显示命令的版本信息

  • -s:输出更详细的信息

  • -f:强制使用指定的协议族

  • -4:指定使用的网络协议是IPv4协议

  • -6:指定使用的网络协议是IPv6协议

  • -0:输出信息每条记录一行,即使内容较多也不做换行显示

  • -r:显示主机时候,不显示IP地址,而是使用主机的域名

ip addr show

显示网卡IP信息

ip addr show

配置网卡IP

ip addr add 192.168.0.1/24 dev eth0
ip addr del 192.168.0.1/24 dev eth0

ip route

显示系统路由

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

设置默认网关

ip route add default via 192.168.0.254 dev eth0

删除网段的网关

ip route del 192.168.4.0/24

删除默认路由

ip route del default

删除路由

ip route delete 192.168.1.0/24 dev eth0

ip rule

某些情况下,不只需要通过数据包的目的地址决定路由,可能还需要通过其它一些域:源地址、IP协议、传输层端口甚至数据包负载。这就叫做:策略路由(Policy Routing)

策略路由比传统路由在功能上更强大,使用更灵活。

路由策略会根据一些条件,将路由请求转向不同的路由表。

一条路由策略包含三个信息:

  • rule 的优先级;数字越小表示优先级越高,默认内核为路由策略数据库配置三条缺省的规则,即:rule 0,rule 32766, rule 32767(数字是rule的优先级)

  • rule 条件

  • rule 路由表

用法

ip rule [list | add | del] SELECTOR ACTION

SELECTOR := [from PREFIX 数据包源地址]
            [to PREFIX 数据包目的地址] 
            [tos TOS 服务类型]
            [dev STRING 物理接口]

            [pref NUMBER 优先级] [fwmark MARK iptables 标签]

ACTION := [table TABLE_ID 指定所使用的路由表] 
            [nat ADDRESS 网络地址转换]
            [prohibit 丢弃该表 | reject 拒绝该包 | unreachable 丢弃该包]
            [flowid CLASSID]

TABLE_ID := [local | main | default | NUMBER]

SELECTOR 具体参数如下:

  • From —— 源地址

  • To —— 目的地址(这里是选择规则时候使用,查找路由表时候也使用)

  • Tos —— IP包头的 TOS(type of service)域

  • Dev —— 物理接口

  • Fwmark —— 防火墙参数

ACTION 动作:

  • Table 指明所使用的表

  • Nat 透明网关

  • prohibit 丢弃该包,并发送 COMM.ADM.PROHIITED的ICMP信息

  • Reject 但存丢弃该包

  • Unreachable 丢弃该包,并发送 NET UNREACHABLE 的 ICMP 信息

添加策略

# 添加规则,所有数据包选用表1路由,优先级是 32800
ip rule add from 0/0 table 1 pref 32800 

# 添加规则,IP为 192.168.3.112, tos 等于 0x10 的包,使用路由表2,优先级是32801,动作是丢弃
ip rule add from 192.168.3.112/32 ros 0x10 table 2 pref 3281 prohibit

# 添加策略不指定 pref 优先级,系统会在 main 的前面1位创建
ip rule add from 171.43.122.52 tab 200

iptables 的 set-mark

使用 Netfilter 的 managle 机制针对特定的数据包设置 MARK 值,在此将 3389 端口的数据包的 MARK 值设置为1,然后将fwmark 1 的规则应用到 ip rule 上即可。这样就可实现特定程序的流量走不同的路线

ip tables -t managle -A OUTPUT -p tcp --dport 8080 -j MARK --set-mark --set-mark 1
ip rule add fwmark 1 table 20 pref 20
ip route add default via 171.43.122.52 table 20

其它

其它网络设备相关配置

ip link add ...
ip link delete ...
ip link set ...
ip link show ...
ip link xstats ...
ip link afstats ...
ip link property ...