路由与网络配置

共 24 题
📑 题目列表 24 题
#
★★★

1. CLOSE_WAIT 长期不释放的常见原因与排查链路

CLOSE_WAIT 长期不释放的常见原因是什么?排查链路是怎样的?

  • CLOSE_WAIT 由对端 FIN 触发,需要应用调用 close 释放
  • 常见原因:应用未正确关闭连接、线程池/连接池泄漏、阻塞 IO
  • 排查链路:ss 定位连接 → 结合进程/文件描述符 → 应用代码排查

CLOSE_WAIT 是服务端收到对端 FIN 后进入的状态,此时对端已关闭,服务端应读取到 EOF 并调用 close 才会发送 FIN 进入 LAST_ACK。长期不释放的常见原因是应用没有正确关闭连接:未在 IO 异常/EOF 时 close、连接池未正确回收、线程阻塞导致无法处理 FIN、或应用代码 bug 导致连接始终挂着。排查链路:先用 ss -tan state close-wait 定位有多少 CLOSE_WAIT,再 ss -tanp 关联到进程 PID,用 lsof -p <pid> 看文件描述符,最终回到应用代码查连接管理逻辑。CLOSE_WAIT 堆积不像 TIME_WAIT 那样会自然消失,必须靠应用修复,是典型的应用层连接泄漏。

CLOSE_WAIT 是"服务端侧未主动关闭"的泄漏,只能靠应用 close 解决,内核参数无法根治。它常与连接池/线程池不释放、IO 异常未处理有关。

ss -tan state close-wait | wc -l
ss -tanp state close-wait | grep <pid>   # 关联进程
lsof -p <pid> | grep TCP                  # 看文件描述符
#
★★★

2. SYN_RECV 队列溢出导致连接失败的排查

SYN_RECV 队列(半连接队列)溢出导致连接失败如何排查?

  • SYN_RECV 是收到 SYN 后、三次握手完成前的状态
  • 半连接队列溢出常由 SYN flood 或 accept 处理慢引起
  • 内核参数:tcp_max_syn_backlog、tcp_synack_retries、syncookies

SYN_RECV 是服务端收到 SYN 但未完成握手的半连接状态,这些连接排在半连接队列(syn backlog)。队列溢出时新 SYN 被丢弃,客户端反复重传 SYN 或直接失败。原因:SYN flood 攻击、accept 处理慢导致全连接队列满进而反压、backlog 配置过小。排查:ss -tan state syn-recv | wc -l 看堆积量,netstat -sSYNs to LISTEN sockets dropped 计数,tcpdump 看 SYN 是否被 RST/丢弃。优化:调大 net.ipv4.tcp_max_syn_backlognet.ipv4.tcp_synack_retriesnet.ipv4.tcp_syn_retries,开启 net.ipv4.tcp_syncookies=1 应对 SYN flood,并让应用尽快 accept。注意全连接队列(accept 队列)慢也会间接导致半连接满。

SYN_RECV 溢出本质是"半连接队列满导致新 SYN 被丢"。syncookies 是应对 SYN flood 的关键,但高并发下也可能影响性能,需权衡。要区分半连接与全连接队列。

ss -tan state syn-recv | wc -l
netstat -s | grep -i "SYNs to LISTEN"
sysctl net.ipv4.tcp_max_syn_backlog=8192
sysctl net.ipv4.tcp_syncookies=1
#
★★

3. arping 如何实现二层连通性测试?

arping 如何实现二层连通性测试?

  • arping 发送 ARP 请求测试同一网段目标可达性
  • 不依赖 IP 路由,只测二层(MAC 层)
  • 常见用法:检测 IP 冲突、验证本机配置、测网关

arping 通过发送 ARP 请求报文并等待目标回 ARP 应答,测试同一网段内主机的二层连通性,不经过 IP 路由。arping -I eth0 10.0.0.1 指定接口探测,-c 指定次数,-D 用于检测 IP 地址冲突(重复地址检测)。它常用于:验证局域网内主机是否在线、检测 IP 冲突、确认网关 MAC、测试二层链路。与 ping 的区别:ping 是三层 ICMP,需要 IP 路由与配置;arping 是二层 ARP,只测同网段 MAC 可达性,即使目标防火墙禁 ping 也能用 ARP 探测。

arping 的价值在"二层视角",测试的是 ARP 可达性,适合排查"三层通但二层异常"或 IP 冲突等场景。它只能测同网段。

arping -I eth0 -c 4 10.0.0.1
arping -D -I eth0 10.0.0.1   # 检测 IP 冲突
#
★★

4. curl --http2 如何实现 HTTP/2 探测?

curl --http2 如何实现 HTTP/2 探测?

  • curl --http2 使用 ALPN 协商 HTTP/2
  • curl -v/-I 查看 HTTP/2 协商结果
  • 需要 curl 支持 nghttp2 编译

curl --http2 https://example.com 通过 ALPN(Application-Layer Protocol Negotiation)在 TLS 握手中协商 HTTP/2,只有服务器支持 HTTP/2 才会协商成功。curl -v 的输出中 ALPN: h2 表示协商成功,ALPN: http/1.1 表示回落为 HTTP/1.1。curl -I --http2 可查看响应头。注意 curl 需以 nghttp2 支持编译(curl --version 查看 Features: HTTP2)。若协商失败,应检查服务器是否启用 HTTP/2、ALPN 配置、TLS 版本是否支持。HTTP/2 多用于 HTTPS,明文 h2c 较少见。

HTTP/2 探测依赖 ALPN 协商,curl --http2 是快速验证服务器 HTTP/2 能力的方法。协商失败看 ALPN 与服务器配置。

curl --http2 -v https://example.com 2>&1 | grep ALPN
curl -I --http2 https://example.com
curl --version | grep -i http2
#
★★

5. ifconfig 与 ip 命令在现代发行版的取舍

ifconfig 与 ip 命令在现代发行版如何取舍?

  • ifconfig(net-tools)已弃用,ip(iproute2)是标准
  • ip 命令功能更全:route、link、addr、neigh
  • 兼容性脚本仍用 ifconfig

ifconfig 属于 net-tools,在现代发行版已被弃用(不再维护,且在新内核上功能不全),ip 命令属于 iproute2,是当前标准。ip 功能更全:ip addr(地址)、ip link(链路/MTU)、ip route(路由)、ip neigh(ARP/邻居)、ip rule(策略路由),并支持显示统计等。取舍上:新脚本与排障用 ip,老旧脚本与习惯性操作可能还用 ifconfig,但 ifconfig 在查看 VLAN、多地址、新特性时受限。运维建议逐步迁移到 ip 系列命令。

取舍核心是"ifconfig 已停止维护、功能缺失,ip 更全面且是官方推荐"。现代运维应使用 iproute2 工具集。

ip addr show eth0
ip link set eth0 up
ip route show
ip neigh show
#
★★

6. ip rule 如何配置策略路由并配合路由表使用?

ip rule 如何配置策略路由并配合路由表使用?

  • ip rule 管理策略路由规则(rule),按条件选择路由表
  • 优先级、匹配条件(from/to/tos/fwmark)
  • 与 ip route 的多张路由表配合

ip rule 管理策略路由规则,每条规则指定"匹配条件 + 使用的路由表"。内核按优先级从高到低匹配规则,命中后用对应路由表查找。ip rule add from 10.0.0.0/24 lookup 100 表示源地址 10.0.0.0/24 的流量走路由表 100。配合 ip route add default via 1.2.3.4 table 100 在表 100 里定义默认路由。典型应用:源地址路由(不同内网段走不同出口)、多运营商/多出口分流、VPN 分流。ip rule show 查看规则,ip rule del 删除。优先级数字越小越先匹配。

策略路由 = "规则(rule)决定用哪张表,表(route)决定下一跳"。它突破单默认路由限制,实现按源/目标/标记分流。

ip rule add from 10.0.0.0/24 lookup 100 pref 100
ip route add default via 10.1.1.1 dev eth1 table 100
ip rule show
#
★★

7. iptables -L -n -v 如何实现包计数?

iptables -L -n -v 如何查看包计数?

  • -L 列出规则、-n 不解析域名、-v 显示计数/字节
  • 每个规则显示 pkts 与 bytes 计数
  • 用于统计命中规则的数据包

iptables -L -n -v-v(verbose)在每条规则后显示 pkts(命中包数)与 bytes(命中字节数),-n 不做 IP/端口反解析,避免慢与乱。-L 列出规则。通过计数可判断某条规则是否被流量命中、丢包/放行统计是否正确。对特定链用 iptables -L INPUT -n -v,用 -Z 清零计数后观察一段时间内的增量。注意计数器是累计的,重启或清空后重置。

包计数是 iptables 排障的基础,-v 给出命中数与字节数,配合 -Z 清零可观测增量,判断规则是否生效。

iptables -L INPUT -n -v
iptables -L OUTPUT -n -v
iptables -Z   # 清零计数
#
★★

8. iptables -m connlimit 如何实现并发限制?

iptables -m connlimit 如何实现并发连接限制?

  • connlimit 匹配每 IP/每源 IP 的连接数
  • --connlimit-above 限制超过阈值
  • --connlimit-mask 指定按网段聚合

iptables -m connlimit --connlimit-above 10 -j REJECT 表示当某个源 IP 的并发连接数超过 10 时匹配并拒绝。--connlimit-mask 24 按 /24 网段聚合统计,--connlimit-upto 表示不超过某值时匹配。常用于限制单 IP 的并发连接(防 CC 攻击、防连接耗尽)。放在 INPUT 链上用 -p tcp --syn 限制新建连接。注意 connlimit 基于 conntrack 跟踪,需开启 conntrack;拒绝策略用 REJECT 或 DROP 视需求。

connlimit 是"按 IP 的连接数限制",基于 conntrack 的连接表统计。配合 mask 可做网段聚合,是防 CC 与资源保护的手段。

iptables -A INPUT -p tcp --dport 80 --syn -m connlimit --connlimit-above 20 -j REJECT
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 --connlimit-mask 24 -j DROP
#
★★

9. iptables -m time 如何实现时间窗匹配?

iptables -m time 如何实现时间窗匹配?

  • time 模块按时间/日期/星期匹配
  • --timestart/--timestop 每日时间窗
  • --weekdays 指定星期、--datestart/--datestop 日期范围

iptables -m time 根据时间条件匹配数据包。--timestart 09:00 --timestop 18:00 匹配每日 09-18 点的流量,--weekdays Mon,Tue 指定星期几,--datestart/--datestop 指定日期范围。常用于:业务时段限制(如夜间停止同步)、定时放行端口、按时间窗口限速。注意时间模块依赖系统时钟,需保证准确;--kerneltz 可指定使用内核时区。

time 模块按"时间段"做匹配,是策略化的时间窗控制。核心是系统时钟准确,规则按时间窗口生效。

iptables -A INPUT -p tcp --dport 22 -m time --timestart 09:00 --timestop 18:00 --weekdays Mon,Fri -j ACCEPT
#
★★

10. iptables -t raw 如何实现 NOTRACK?

iptables -t raw 如何实现 NOTRACK?

  • raw 表在 conntrack 之前处理
  • NOTRACK 目标跳过连接跟踪
  • 应用:高性能绕过 conntrack、避免连接表满

iptables -t raw -A PREROUTING -p tcp --dport 80 -j NOTRACK 让该流量跳过 conntrack 连接跟踪。raw 表在 conntrack 之前执行,NOTRACK 使这些包不建立连接状态,从而减少 conntrack 表占用、提升高吞吐场景性能。常用于:不需要状态跟踪的高流量端口(如大量 UDP)、避免 conntrack 表满导致丢包。注意 NOTRACK 后这类包不再有连接状态,后续依赖状态匹配的规则(如 -m state --state ESTABLISHED)无法命中,需配合其他策略。

NOTRACK 是"自愿放弃 conntrack",换取性能与连接表空间,代价是失去状态跟踪能力。适合大流量、无状态需求场景。

iptables -t raw -A PREROUTING -p tcp --dport 80 -j NOTRACK
iptables -t raw -A PREROUTING -d 10.0.0.0/8 -j NOTRACK
#
★★

11. net.ipv4.tcp_tw_recycle 为何被内核移除,即 NAT 场景下时间戳错乱导致丢包、与 tcp_tw_reuse 的区别以及旧配置在现网内核中的实际效果与遗留排查

tcp_tw_recycle 为何被内核移除?与 tcp_tw_reuse 有何区别?旧配置在现网内核中的效果如何?

  • tcp_tw_recycle 依赖时间戳,NAT 场景下时间戳错乱导致丢包
  • 已从内核移除,旧配置无效或报错
  • tcp_tw_reuse 只用于出站连接,安全

tcp_tw_recycle 曾用于快速回收 TIME_WAIT 连接,但它依赖 TCP 时间戳,且要求"同一源 IP 的最后一个包时间戳单调递增"。在 NAT 场景下,多个客户端共享同一公网 IP,若各客户端时间戳不同步,来自时间戳"倒退"客户端的连接会被误判为过期而丢弃,导致大量丢包,因此内核已将其移除(4.12 以后不再可用)。tcp_tw_reuse 只对"出站(主动发起)连接"复用 TIME_WAIT 端口,且会校验时间戳,安全得多,不作用于服务器监听场景。现网内核中若配置 /etc/sysctl.conf 残留 tcp_tw_recycle=1,内核会忽略或报错,实际无效果;排查时需确认该参数已无效,改用 tcp_tw_reuse 或减少短连接、调大端口范围来缓解 TIME_WAIT。

两者的区别在"是否安全":tcp_tw_recycle 破坏 NAT 场景被移除,tcp_tw_reuse 仅出站且校验时间戳仍可用。遗留配置在新内核无效,需清理并改合理方案。

sysctl net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.ip_local_port_range="1024 65535"
# 旧配置 tcp_tw_recycle 在新内核已无效
#
★★

12. nft 如何实现 conntrack 限制?

nft(nftables)如何实现 conntrack 限制?

  • nftables 的 conntrack 表达式(ct)匹配状态
  • ct count 限制连接数与链式限流
  • nft 语法与传统 iptables 的差异

nftables 用 ct 表达式匹配连接状态,如 ct state established,related accept。限制连接数用 ct count 配合 limit:nft add rule inet filter input tcp dport 80 ct count over 20 drop 限制并发连接数,ct count@ 按源 IP 地址族聚合。nft 的语法是链式、更接近脚本化,与 iptables 的命令式不同。做并发限制需在数据包链上对 ct count 计数,超限 drop。nft 还支持 ct 的多种状态字段(reply direction、mark 等)。

nftables 提供 ct 表达式做状态匹配与 ct count 做连接数限制,是 iptables connlimit 的 nft 化等价物,语法更统一。

table inet filter {
    chain input {
        type filter hook input priority 0;
        tcp dport 80 ct count over 100 drop
        ct state established,related accept
    }
}
#
★★

13. nftables 与 iptables 的对象模型差异与迁移路径中用户自定义 table/chain/rule、set 与 verdict map 的批量匹配、nft -f 原子规则替换以及 iptables-nft 兼容层在迁移期的行为差异?

nftables 与 iptables 的对象模型差异与迁移路径是什么?

  • iptables 固定表/链,nft 自定义 table/chain/rule
  • nft 的 set 与 verdict map 批量匹配
  • nft -f 原子规则替换

iptables 使用固定的表(filter/nat/mangle)与链(INPUT/OUTPUT/FORWARD),规则扁平;nftables 允许自定义 table、chain、rule,更灵活。nft 支持 set(集合,批量匹配 IP/端口)与 verdict map(vmap 映射到动作),一次匹配多个元素,性能高。nft 规则用 nft -f file.nft 整体加载,同一次事务原子替换,避免加载中途的不一致。iptables-nft 是兼容层,让旧的 iptables 命令在 nftables 内核上运行,但行为有差异:如匹配语义、错误提示、统计位置不同,且它不暴露 nft 的自定义能力。迁移路径:先验证 iptables-nft 兼容,再逐步重写为原生 nft 规则,用 set/map 优化。

核心差异是"对象模型":iptables 固定而 nft 可自定义,加上 set/map 批量匹配与原子加载。迁移要利用兼容层过渡,最终用原生 nft 发挥能力。

table inet myfilter {
    set allowed_ips { type ipv4_addr; }
    chain input {
        type filter hook input priority 0;
        ip saddr @allowed_ips accept
        tcp dport 80 drop
    }
}
# 原子加载
nft -f /etc/nftables.conf
#
★★

14. nsswitch.conf 如何实现解析顺序?

nsswitch.conf 如何实现解析顺序?

  • nsswitch.conf 控制名称解析顺序(hosts、passwd 等)
  • hosts 行决定 files/dns 的先后
  • 影响 /etc/hosts 与 DNS 的优先级

/etc/nsswitch.conf 控制名称服务解析顺序。hosts: 行指定主机名解析的来源与顺序,如 hosts: files dns 表示先查 /etc/hosts(files)再查 DNS(dns),反之 hosts: dns files 则先 DNS。也支持其他服务(如 mdns)。修改后即时生效。用 getent hosts example.com 验证解析结果与顺序。这在运维中用于"让某些域名优先走 hosts 而不走 DNS"(如本地测试、规避 DNS 故障)。

nsswitch.conf 是"解析来源的优先级清单",hosts: 行决定 files 与 dns 的先后,进而影响 hosts 与 DNS 的权重。

grep ^hosts /etc/nsswitch.conf
# hosts: files dns
getent hosts example.com
#
★★

15. ping -M do 如何通过禁止分片探测路径 MTU?

ping -M do 如何通过禁止分片探测路径 MTU?

  • ping -M do 设置 DF 标志,禁止分片
  • 逐级增大包大小,找到最大可通包
  • 超时/不可达则说明超过路径 MTU

ping -M do -s <size> target 设置 DF(Don't Fragment)标志,发送指定大小的包且禁止分片。若包大小超过路径 MTU,中间设备会丢弃并(若 PMTUD 正常)回 ICMP "fragmentation needed",ping 显示 Frag needed 或超时。通过从大到小调整 -s(payload 大小,加上 28 字节 IP+ICMP 头即总大小),找到能通过的最大包,即为路径 MTU。例如 ping -M do -s 1472 总大小 1500,若不通则试 1400。这是定位 ICMP 黑洞与 MTU 问题的基础方法。

-M do 是"强制 DF 探测路径 MTU"的核心。找到"最大可通 payload"即得路径 MTU,配合 ICMP 不可达判断丢包点。

ping -M do -s 1472 10.0.0.1   # 总大小 1500
ping -M do -s 1400 10.0.0.1   # 减小查找
#
★★

16. route 与 ip route 在维护命令的取舍

route 与 ip route 在维护命令上如何取舍?

  • route 是 net-tools 的旧命令,ip route 是 iproute2
  • ip route 功能更全(多表、策略、metric)
  • 现代脚本与排障用 ip route

route 属于 net-tools,已弃用;ip route 属于 iproute2,是现代标准。ip route 功能更全:支持多路由表(table)、策略路由、metric、scope、协议等,且能显示缓存与统计。route 只能维护默认路由表,功能受限。取舍上:新脚本与排障用 ip route,旧脚本兼容仍可用 route,但建议迁移。ip route add/del/replace/show 覆盖 route 的所有功能并扩展。

取舍核心是"ip route 更全面、可维护多表,route 是旧工具"。现代运维应统一使用 iproute2。

ip route add 10.0.0.0/8 via 192.168.1.1 dev eth0
ip route del default
ip route replace default via 1.2.3.4
ip route show table 100
#
★★

17. tc filter 如何实现流量分类?

tc filter 如何实现流量分类?

  • tc filter 按匹配条件把流量分到不同 class
  • 匹配字段:u32、fwmark、ip/端口
  • 与 HTB 等 qdisc 配合实现分级限速

tc filter 用于流量分类,把符合条件的数据包匹配到指定的 class。常见匹配器:u32(按 IP/端口/协议偏移匹配)、fw(按 fwmark 标记)、flower。语法 tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip dport 80 0xffff flowid 1:10 把目标 80 端口流量导到 class 1:10。分类后配合 HTB 等 qdisc,各 class 拥有独立带宽,实现分级限速或 QoS。filter 也可以通过 handle 关联 fwmark,实现与 iptables 标记联动。

tc filter 是"流量分类器",把包按规则分到 class,配合 qdisc 的 class 实现带宽控制。u32 是低层匹配,fwmark 可联动 iptables。

tc qdisc add dev eth0 root handle 1: htb
tc class add dev eth0 parent 1: classid 1:10 htb rate 100mbit
tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip dport 80 0xffff flowid 1:10
#
★★

18. tc 中 HTB 的 class 如何划分带宽并实现层级限速?

tc 中 HTB 的 class 如何划分带宽并实现层级限速?

  • HTB 是层次令牌桶,class 树形划分带宽
  • rate 保证带宽、ceil 上限带宽
  • 父 class 分给子 class,优先级

HTB(Hierarchical Token Bucket)是层次令牌桶,qdisc 下的 class 构成树形结构划分带宽。每个 class 有 rate(保证带宽)与 ceil(上限带宽),子 class 的 rate 之和不超过父 class。根 class 限总带宽,prio 控制优先级。叶子 class 通过 tc filter 匹配流量,实现某类流量获得指定带宽。典型场景:按 IP 段/端口限速,根限总带宽,子类按业务分配。HTB 的 burst/cburst 控制突发。

HTB 的核心是"树形 + rate/ceil"。rate 保证下限,ceil 限制上限,父类分给子类,层级限速即由此实现。叶子 class 匹配具体流量。

tc qdisc add dev eth0 root handle 1: htb default 30
tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit ceil 100mbit
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 50mbit ceil 100mbit
tc class add dev eth0 parent 1:1 classid 1:20 htb rate 30mbit ceil 60mbit
#
★★

19. traceroute -I 如何利用 ICMP 报文探测网络路径?

traceroute -I 如何利用 ICMP 报文探测网络路径?

  • traceroute -I 用 ICMP echo 请求(ping)作为探测
  • -I 用 ICMP 而非默认 UDP,常被防火墙放行
  • 与默认 UDP 探测的差异

traceroute -I 使用 ICMP echo request(即 ping 包)作为探测报文,通过递增 TTL 触发每跳返回 ICMP Time Exceeded,从而逐跳显示路径。相比默认的 UDP 探测(高端口,常被防火墙丢弃导致 *),ICMP 探测更常被放行,路径结果更完整。-T 用 TCP SYN 探测(常用于穿透防火墙探测 443 等端口)。选型:-I echo 探测通用性好,-T 适合对特定端口建模,默认 UDP 在部分网络被丢弃。

-I 的差别在"探测报文类型为 ICMP"。ICMP 通常被防火墙放行,故路径探测更完整,是绕过 UDP 黑洞的常用手段。

traceroute -I -n 10.0.0.1
traceroute -T -n -p 443 example.com
#
★★

20. 半连接队列与全连接队列在 /proc/net/tcp 的读取

半连接队列与全连接队列如何在 /proc/net/tcp 读取?

  • /proc/net/tcp 记录 TCP 连接状态
  • 半连接队列大小由 tcp_max_syn_backlog 决定
  • 全连接队列(accept 队列)由 listen backlog 决定

/proc/net/tcp 列出所有 TCP 连接,含状态(0A 为 LISTEN、06 为 SYN_RECV 等)、地址、inode。半连接队列(SYN 队列)由 net.ipv4.tcp_max_syn_backlog 决定,全连接队列(accept 队列)由 listen(backlog) 决定,实际值为 min(backlog, somaxconn)。直接读 /proc/net/tcp 可数 SYN_RECV 数量判断半连接队列占用;更好用 ss -lntSend-Q(全连接队列当前长度)与 Recv-Q(半连接队列长度),netstat -sSYNs to LISTEN sockets dropped 判断溢出。队列满会导致连接失败或丢包。

队列诊断的关键是区分半连接(SYN 队列)与全连接(accept 队列)。ss -lnt 的 Recv-Q/Send-Q 直接反映两者长度,netstat 的 dropped 计数反映溢出。

ss -lnt
cat /proc/net/tcp | head
netstat -s | grep -i "SYNs to LISTEN"
sysctl net.ipv4.tcp_max_syn_backlog
#

21. ip maddr 如何查看与管理多播组地址?

ip maddr 如何查看与管理多播组地址?

  • ip maddr 显示接口上的多播组地址
  • ip maddr add/del 添加/删除多播组
  • 查看 IPv4 与 IPv6 多播地址

ip maddr show 显示各接口加入的多播组地址(IPv4 224.x 与 IPv6 ff...),ip maddr add 224.0.0.1 dev eth0 添加、ip maddr del 删除。它用于管理接口的多播组成员关系,排查多播服务(如多播 DNS、路由协议、VXLAN 组播)是否正常加入组。也可用 ip -6 maddr 查看 IPv6 多播。对比 ip addr 查看单播地址,ip maddr 专门看多播。

ip maddr 是"多播组管理",用于查看接口加入的多播组与增删。它反映主机是否加入某多播组,是排查多播通信的基础。

ip maddr show
ip maddr add 224.0.0.1 dev eth0
ip maddr del 224.0.0.1 dev eth0
#

22. iptables -m geoip 如何按地理位置匹配并限制访问?

iptables -m geoip 如何按地理位置匹配并限制访问?

  • geoip 模块按来源 IP 的地理位置匹配
  • 需要 Xtables-addons 且加载 GeoIP 数据库
  • --country 指定国家码、--src-cc

iptables 的 geoip 模块(来自 Xtables-addons)按数据包源 IP 的地理位置匹配,-m geoip --src-cc CN 匹配来源国家为中国,--dst-cc 匹配目标。使用前需安装 Xtables-addons 并下载/更新 GeoIP 数据库(xtables-geoip)。常用于:限制仅允许国内访问、封禁境外 IP、按地域放行。注意 geoip 数据库需定期更新,精确度取决于数据库,且只基于 IP 归属,无法应对代理/隧道。

geoip 是"按 IP 归属地匹配"的扩展模块,落地需数据库与内核模块。它提供地域维度控制,但精度有限、需更新。

iptables -A INPUT -m geoip --src-cc US,GB -j DROP
iptables -A INPUT -s 0.0.0.0/0 -m geoip ! --src-cc CN -j DROP
#

23. nmap 的端口扫描与版本探测中 -sS/-sT/-sU 扫描原理、-sV 服务指纹识别以及扫描结果如何用于暴露面梳理与漏洞评估

nmap 的端口扫描与版本探测原理是什么?扫描结果如何用于暴露面梳理?

  • -sS TCP SYN 半开扫描、-sT TCP 全连接、-sU UDP 扫描
  • -sV 服务版本指纹识别
  • 扫描结果用于暴露面梳理与漏洞评估

nmap 的 -sS 是 SYN 半开扫描,发送 SYN 后看是否回 SYN-ACK(开放)或 RST(关闭),不建立完整连接,速度快且隐蔽;-sT 是 TCP 全连接扫描,建立完整握手,准确但慢;-sU 是 UDP 扫描,通过 ICMP 端口不可达判断。-sV 通过 banner 抓取与指纹匹配识别服务与版本,用于漏洞评估。nmap -sS -sV -p 1-10000 target 输出端口状态、服务与版本。扫描结果梳理暴露面:找出开放端口、识别服务与版本、对照漏洞库定位风险,从而收敛攻击面。扫描需授权,避免误伤。

nmap 的价值在"暴露面梳理"。状态(open/closed/filtered)看端口,-sV 识别服务版本,两者结合定位暴露面与漏洞。

nmap -sS -sV -p 1-10000 10.0.0.1
nmap -sU -p 53,161 10.0.0.1
nmap -sV --version-light -T4 -p 80,443 example.com
#

24. wireshark 如何抓取并分析网络协议报文?

wireshark 如何抓取并分析网络协议报文?

  • wireshark 的抓包接口选择与过滤
  • 协议分析:TCP 流、HTTP、TLS 解密
  • 分析工具:follow stream、统计、过滤器

wireshark 通过 GUI 选择接口抓包,用显示过滤器(如 tcp.port==80httpip.addr==x)过滤报文。核心分析:Follow TCP Stream 查看完整 TCP 流内容,Statistics 看协议分层、端点、conversation,Analyze 做专家分析。TLS 加密流可配置 SSLKEYLOGFILE、导入私钥解密。命令行可配合 dumpcap 抓 pcap 再导入。分析网络问题时先看 TCP 握手/重传,再看 HTTP 请求响应,结合过滤器定位。

wireshark 是"交互式协议分析",核心是过滤 + 流重组 + 统计。相比 tcpdump 的文本,它提供可视化与协议解码,适合深挖。

# dumpcap 抓包
dumpcap -i eth0 -f "tcp port 443" -w out.pcap
# 或 tcpdump 抓包后在 wireshark 打开
tcpdump -i any -w out.pcap