计算机网络相关

记录网络相关知识与 Linux 网络相关的命令。

命令

  1. route 某些 IP 段故障
  2. mtr 连通性测试
  3. Linux 常用网络指令
  4. iptables 奥哥篇
  5. iptables-NAT
  6. iperf 测试网速的工具
  7. 删除网卡 ip link delete [网卡名称]

iptables

1
2
3
4
5
6
7
8
9
10
iptables -t  nat  -nL   # 查看 nat 表
iptables -t 表名 -N 自定义链名 # 创建一个链
iptables -t 表名 -L default filter
iptables -t 表名 -L 链名
iptables -t 表名 -nL --line
iptables -t 表名 -D 链名 要删除的序号
iptables -t 表名 -P 链名 动作 修改默认规则
-A INPUT -m iprange --src-range 103.78.77.40-103.78.77.49 -p tcp --dport 11211 -j ACCEPT
类型匹配 -p tcp udp udplite icmp icmpv6 esp ah sctp mh
转发功能 cat /proc/sys/net/ipv4/ip_forward

小知识

Public IP

  • Class A: 0.x.x.x ~ 127.x.x.x
  • Class B: 128.x.x.x ~ 191.x.x.x
  • Class C: 192.x.x.x ~ 223.x.x.x
  • Class D: 224.x.x.x ~ 239.x.x.x #multicast
  • Class E: 240.x.x.x ~ 255.x.x.x #保留

Private IP

  • Class A: 10.0.0.0 ~ 10.255.255.255
  • Class B: 172.16.0.0 ~ 172.31.255.255
  • Class C: 192.168.0.0 ~ 192.168.255.255

  • 169.254.x.x 临时 IP DHCP is full. 就用这个 IP

    Loopback IP

  • Class A: 127.0.0.1/8

设置 NAT server

开启转发功能

1
2
3
4
5
vim /etc/sysctl.conf

net.ipv4.ip_forward=1 # 添加此行,开启转发功能

sysctl -p # 执行生效

还需要在 iptable 里设置转发规则

1
2
3
4
5
6
7
8
9
10
11
12
13
vim /etc/sysconfig/iptables

*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o em2 -j MASQUERADE
COMMIT

# em2 是公网网卡,当其他内网机器设置 NAT 机器的内网 IP 为网关时。
# 内网机器发包给 NAT 机器, NAT 机器根据路由规则,将会由 em2 公网网卡转发出去。
# 转发时,会将包的源 IP 替换为自己公网的 IP

tcpdump 抓包分析

  • 进入 INPUT 的流量不会被 iptable 影响
  • 出口 OUTPIT 流量会受到 iptable 影响

ICMP

  • ping 默认发 4、5 个包
  • traceroute 显示的是不同 AS 之间的跳数。其实一个 AS 内部可能有很多路由器,TTL 与实际跳数是不符合的。

TCP

  • 三次握手建立连接
  • 四次分手,等待 2 MSL
  • 只走一条路径

UDP

  • 更轻更快
  • 多条路径同时发送

踩过的坑

  1. docker container IP default is 172.17.0.0/16 检查 iptables 是否阻挡
  2. -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT 这一条 iptables 的规则也非常重要。Packets in a RELATED or ESTABLISHED state are those ones which belong to an already opened connection; you’ll generally want to accept them, otherwise connections will get established correctly but nothing will be able to flow after the initial handshake. 如果没有这一条,会遇到 DNS 解析失败, curl 失败。 凡是 iptables 没有允许的 IP, 都不能正常的工作。 例如 DNS 查询发包后,三次握手建立。回包收到了,却会被 iptables 阻挡,上层应用无法拿到解析的结果,导致 hang 住。
  3. 抓包分析时, 进入的包都可以抓到,不会受到 iptables, 发出的包会受到 iptables 影响,可能被 iptables 阻挡导致抓包失败。
  4. 在此衷心的感谢,皇族后裔,八旗子弟,爱新觉罗·高Li,提供的帮助!