Please enable Javascript to view the contents

Linux网络-iptables实战

 ·  ☕ 6 分钟

ifconfig :查询、设置网卡的相关参数;
ifup/ifdown:这两个文件是script,启动、关闭网络接口;
route :查询、设定路由表 (route table)
ip:复合式的指令, 可以直接修改上述提到的功能;

网卡设置

Linux系统中,不同的Linux发行版的网络管理服务不同,常见的有systemd-networkd(Systemd发行版)NetworkManager(Gnome桌面环境)Netplan(Ubuntu17.10+)

ifconfig

命令修改只会临时生效,永久生效需要修改配置文件

  • 启动、关闭网卡

ifconfig {interface} {up|down}

下面命令是启动eth0网卡

1
ifconfig eth0 up
  • 设置IP地址

不加其他参数时,系統会按照IP所在的class范围,自动计算netmask,network,broadcast等参数

1
ifconfig eth0 192.168.100.100

或者

1
ifconfig etho 192.168.100.100 netmask 255.255.255.128 mtu 8000

route

-n 显示具体IP与PORT

路由表说明:

排序从上到下依次是:小网段 -> 大网段 -> 默认路由。路由规则越靠前,优先级越高。

Destination=0.0.0.0表示默认路由。即目标IP没有具体路由规则时,数据包走此路由进行转发。

Gateway=0.0.0.0表示路由直接由本地送达。即通过LAN的MAC直接通讯。如果是具体IP,则往往是具备三层路由能力的设备。

Flag标识说明

  • U: 路由是Up的
  • H: 目标是Host,而非一个网段
  • G: 通过外部设备路由数据包
  • R: 使用动态路由时,恢复路由信息的标识
  • D: 由服务或Port功能设置为动态路由
  • M: 路由被修改
  • !: 路由不被接受(拒绝不安全网段的数据包)

命令举例

增加

1
route add -net 192.168.100.0 netmask 255.255.255.0 dev eth0

删除

1
route del -net 169.254.0.0 netmask 255.255.0.0 dev eth0

ip

ip命令整合了ifonfig和route命令的功能。查看、操作Route、NetworkDevice、interface、tunnels。

命令格式: ip <-options> , 例如:ip -s -s -j link

参数说明

-d: 输出更详细信息。接口名称、状态、能力;MAC
-s: 输出更多信息,-s -s信息增多,增加的信息通常为统计数据、时间值。
-br: 以表格形式打印基本信息,以提高可读性。目前只有ip -br addrip -br link命令支持该选项。
-j: json格式输出。
-p: json优雅输出,仅当-j参数存在时,有效。

  • 查看所有网卡
    1
    
    ip link
    

对象-网络地址:addr / address

排错命令

ping

  • ping 探测主机192.168.1.254是否有回应。 探测仅等待一秒钟,也仅探测一次。
1
ping -c 2 -W 3 192.168.1.254

-c 执行ping的次数; -W 超时时间,单位秒

  • ping命令探测整个网络传输的查询最大MTU值

封包大小=MTU-28,因为IP头20字节,icmp包头8字节;-M do参数指定不允许路由器、交换机进行包重组。

1
ping -c 2 -s 1472 -M do 192.168.1.254

-s ICMP包的大小,默认56字节; -M 主要检查MTU值( do 不让重新拆包、打包 dont 允许拆包打包)

traceroute

主机之间节点分析,用来判断网络环境是内部问题还是外部问题。
原理:会针对目的IP的所有 中间node 进行 UDP 的超时等待

netstat

本地网络连接、路由表、接口统计信息、端口监听。(已过时)
推荐使用ss替换netstat;
ip route替换netstat -r;
ip -s link替换netstat -i;
ip maddr替换netstat -g;

参数说明

路由相关:-r列出路由表,等同route命令;
端口相关:-aall; -[t/u]TCP/UDP; -l: listen; -pPID; -n显示IP/Port而非主机名;

  • 查看主机所有连接状态
1
netstat -atunp
  • 查看所有监听状态连接
1
netstat -ltunp

ss

socket Statistics: 套接字统计数据

参数说明

路由相关:-r列出路由表,等同route命令;-n显示IP/Port而非主机名
端口相关:-aall; -[t/u]TCP/UDP; -l: listen; -pPID;

  • 所有TCP套接字
    1
    
    ss -t -a
    

Telnet

DNS域名解析

host

1
host www.baidu.com 8.8.8.8

第二个参数为dns-server地址,可省略(使用/etc/resolv.conf)。

nslookup

  1. 根据域名找主机 2. 根据主机找IP

dig

抓包工具

1
tcpdump [-AennqX] [-i 网络接口] [-w 存储文件名称] [-c 次数] [-r 文件] [抓包的格式]

抓包格式

网络问题排查

12345678
步骤网卡是否正常IP设置是否正确LAN网络是否正常路由信息是否正确查看DNS查看网络节点查看服务状态Selinux,防火墙
工具lspci、dmesgifconfigpingroute -ndig、hosttraceroutenetstatselinux,iptables
解决方案重装驱动/更换网卡修改配置,重启network服务交换机、防火墙设置修改配置,重启network服务修改配置等待恢复排查问题,重启服务

iptables

规则存在顺序。 依次检查,匹配即停(LOG策略除外),没有匹配走默认。

4表5链

filter: 本机进出
- INPUT: 入本机的数据包
- OUTPUT: 出本机的数据包
- FORWARD: 转发数据包
nat: 源IP:Port\目的IP:Port之间转换
- PREROUTING: 路由判断执行的规则(DNAT-目的NAT/REDIRECT-重定向)
- POSTROUTING: 路由判断执行的规则(SNAT-源NAT/MASQUERADE-广播)
- OUTPUT: 出本机的数据包
mangle: 与特殊的封包的路由标识有关
- PREROUTING、PREROUTING、OUTPUT、INPUT、FORWARD
raw: 确定是否对数据包进行状态追踪
- PREROUTING
- OUTPUT

由于 mangle 很少被使用,下图为去除mangle后的链表相关性
规则表之间顺序: raw > mangle > nat > filter
入站规则链顺序:PREROUTING > INPUT
出站规则链顺序:OUTPUT > POSTROUTING
转发规则链顺序:PREROUTING > FORWARD > POSTROUTING

iptables-simple.png

路径A: 数据包进入主机,路由判断是进入主机的数据包后,主要通过fileter[INPUT]链管控。
路径B: 数据包经主机转发给其他主机,主要经过的链是 filter[FORWARD]nat[POSTROUTING,PREROUTING]
路径C: 响应请求或者由主机主动发出的包。经路由判断后,通过filter[OUTPUT]nat[OUTPUT,POSTROUTING]发出。

iptables-all.png

命令举例

  • 查看规则
1
iptables -t nat -L -n

-t nat指定表,如果不传则为默认的filter表;-L列出目前的table规则;-n不进行IP与hostname的反查,速度快;-v显示详细信息

Ubuntu22.04,CentOS8之后,使用nf_tables作为新的内核网络过框架.具体命令参考

1
2
# 列出所有表
nft list tables

iptables-legacy: ==iptables,背后是iptables框架
nft: 背后是nf_tables框架
iptables-nft: 使用方法与iptables兼容,背后框架是nf_tables
iptables: 软连接,可在iptables-legacyiptables-nft之间切换

nftables

nftables是一个新式的数据包过滤框架,旨在替代现用的iptables、ip6tables、arptables和ebtables的新的包过滤框架。
nftables旨在解决现有{ip/ip6}tables工具存在的诸多限制。相对于旧的iptables,nftables最引人注目的功能包括:改进性能、支持查询表、事务型规则更新、所有规则自动应用等等

分享

Hex
作者
Hex
CloudNative Developer

目录