linxu学习笔记-网络

发布时间 2023-07-13 17:15:58作者: 彦承

经典的网络拓扑图

![service life image][service_life]

ifconfig

说明:network interfaces configuring,用来显示和配置 linux 内核中网络接口的网络参数。

注:用 ifconfig 命令配置的网卡信息,在网卡重启后或者机器重启后,配置就不存在了。如果要想将上述的配置信息永远生效,就需要修改网卡的配置文件。

举例:

1、查看本机激活状态的网络信息

VRM01:/home/GalaX8800 # ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 51.32.17.131  netmask 255.255.224.0  broadcast 51.32.31.255
        inet6 fe80::2a6e:d4ff:fe88:d187  prefixlen 64  scopeid 0x20<link>
        ether 28:6e:d4:88:d1:87  txqueuelen 1000  (Ethernet)
        RX packets 290230387  bytes 55446559215 (51.6 GiB)
        RX errors 0  dropped 1965063  overruns 0  frame 0
        TX packets 91182488  bytes 255476399883 (237.9 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0:25: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 51.32.17.130  netmask 255.255.224.0  broadcast 51.32.31.255
        ether 28:6e:d4:88:d1:87  txqueuelen 1000  (Ethernet)

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 185353019  bytes 289259839319 (269.3 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 185353019  bytes 289259839319 (269.3 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

2、查看所有激活或者没激活的网络接口

VRM01:/home/GalaX8800 # ifconfig -a

3、显示xxx网卡的信息

VRM01:/home/GalaX8800 # ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 51.32.17.131  netmask 255.255.224.0  broadcast 51.32.31.255
        inet6 fe80::2a6e:d4ff:fe88:d187  prefixlen 64  scopeid 0x20<link>
        ether 28:6e:d4:88:d1:87  txqueuelen 1000  (Ethernet)
        RX packets 290407869  bytes 55475799504 (51.6 GiB)
        RX errors 0  dropped 1965751  overruns 0  frame 0
        TX packets 91226991  bytes 255495445042 (237.9 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

4、关闭/启动xxx网卡

VRM01:/home/GalaX8800 # ifconfig eth0 down
VRM01:/home/GalaX8800 # ifconfig eth0 up

5、修改网卡的mac地址

VRM01:/home/GalaX8800 # ifconfig eth0 hw ether 28:6e:d4:88:e9:a5

6、配置ip地址/子网掩码/广播地址

VRM01:/home/GalaX8800 # ifconfig eth0 51.32.17.132 netmask 255.255.224.0 broadcast 51.32.31.255

7、设置网卡能通过的最大数据包大小(byte)

VRM01:/home/GalaX8800 # ifconfig eth0 mtu 1500

8、开启/关闭arp功能

VRM01:/home/GalaX8800 # ifconfig eth0 arp  // 开启
VRM01:/home/GalaX8800 # ifconfig eth0 -arp // 关闭

网卡的配置文件

目录:/etc/sysconfig/network-scripts/

举例:如果是网卡eth0,那么对应的配置文件就是ifcfg-eth0

VRM01:/etc/sysconfig/network-scripts # cat ifcfg-eth0
DEVICE=eth0
BOOTPROTO='static'
IPADDR=51.32.17.131
NETMASK=255.255.224.0
STARTMODE='auto'
GATEWAY=51.32.0.1

说明:

IPADDR:ip地址

NETMASK:掩码

GATEWAY:网关

DNS1:域名服务器1,如:144.144.144.144

DNS2:域名服务器2

BOOTPROTO:dhcp,自动分配ip ;static,静态ip

ONBOOT=yes # 开启启动必须是yes

注意:

修改了上述配置文件之后,需要重启网络服务,命令: systemctl restart network

ifup & ifdown

说明:

ifup 网卡名称:启动/激活系统上指定的网卡。

ifdown 网卡名称:停止/停用系统上指定的网卡。

举例:

ifup eth0
ifdown eth0

注意:重启网络服务,命令: systemctl restart network,作用是重启所有的网卡,如果只想重启某个确定的网卡,可以使用ifdown和ifup来实现。

ip rule & ip route & iptables

ip rule:操作路由策略

VRM02:/home/GalaX8800 # ip rule
0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default

在 Linux 系统启动时,内核会为路由策略数据库配置三条缺省的规则:

0 匹配任何条件 查询路由表local(ID 255) 路由表local是一个特殊的路由表,包含对于本地和广播地址的高优先级控制路由。rule 0非常特殊,不能被删除或者覆盖。  
32766 匹配任何条件 查询路由表main(ID 254) 路由表main(ID 254)是一个通常的表,包含所有的无策略路由。系统管理员可以删除或者使用另外的规则覆盖这条规则。
32767 匹配任何条件 查询路由表default(ID 253) 路由表default(ID 253)是一个空表,它是为一些后续处理保留的。对于前面的缺省策略没有匹配到的数据包,系统使用这个策略进行处理。这个规则也可以删除。

linux 系统中,可以自定义从 1-252个路由表,其中,linux系统维护了4个路由表:

0#表: 系统保留表
253#表: default table 没特别指定的默认路由都放在该表
254#表: main table 没指明路由表的所有路由放在该表
255#表: locale table 保存本地接口地址,广播地址、NAT地址 由系统维护,用户不得更改

ip route:操作路由表

查看某个路由表信息:

ip route list table <table_number> 
ip route list table <table_name>

举例:
1、查看local表
[gandalf@VRM02 ~]$ ip route list table local
broadcast 51.32.0.0 dev eth0 proto kernel scope link src 51.32.17.132 
local 51.32.17.130 dev eth0 proto kernel scope host src 51.32.17.132 
local 51.32.17.132 dev eth0 proto kernel scope host src 51.32.17.132 
broadcast 51.32.31.255 dev eth0 proto kernel scope link src 51.32.17.132 
broadcast 127.0.0.0 dev lo proto kernel scope link src 127.0.0.1 
local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1 
local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1 
broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1

2、查看main表
[gandalf@VRM02 ~]$ ip route list table 254
default via 51.32.0.1 dev eth0 
51.32.0.0/19 dev eth0 proto kernel scope link src 51.32.17.132 
169.254.0.0/16 dev eth0 scope link metric 1002 

ip rule,ip route,iptables 三者之间的关系

以一例子来说明:公司内网要求192.168.0.100 以内的使用 10.0.0.1 网关上网 (电信),其他所有IP使用 20.0.0.1 (网通)上网。

1、首先要在网关服务器上添加一个默认路由,当然这个指向是绝大多数的IP的出口网关:ip route add default gw 20.0.0.1

2、之后通过 ip route 添加一个路由表:ip route add table 3 via 10.0.0.1 dev ethX 
(ethx 是 10.0.0.1 所在的网卡, 3 是路由表的编号)

3、之后添加 ip rule 规则:ip rule add fwmark 3 table 3 
(fwmark 3 是标记,table 3 是路由表3 上边。意思就是凡事标记了 3 的数据使用 table3 路由表)

4、之后使用 iptables 给相应的数据打上标记:iptables -A PREROUTING -t mangle -i eth0 -s 192.168.0.1 - 192.168.0.100 -j MARK --set-mark 3

因为 mangle 的处理是优先于 nat 和 fiter 表的,所以在数据包到达之后先打上标记,之后再通过 ip rule 规则,对应的数据包使用相应的路由表进行路由,最后读取路由表信息,将数据包送出网关。

这里可以看出 Netfilter 处理网络包的先后顺序:接收网络包,先 DNAT,然后查路由策略,查路由策略指定的路由表做路由,然后 SNAT,再发出网络包。

traceroute工具

说明:我们在 linux 机器上,使用 traceroute 来获知从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。

使用:

linux主机系统下:traceroute hostname

Windows系统下:tracert hostname

[root@localhost ~]# traceroute www.baidu.com
traceroute to www.baidu.com (61.135.169.125), 30 hops max, 40 byte packets
1 192.168.74.2 (192.168.74.2) 2.606 ms 2.771 ms 2.950 ms
2 211.151.56.57 (211.151.56.57) 0.596 ms 0.598 ms 0.591 ms
3 211.151.227.206 (211.151.227.206) 0.546 ms 0.544 ms 0.538 ms
4 210.77.139.145 (210.77.139.145) 0.710 ms 0.748 ms 0.801 ms
5 202.106.42.101 (202.106.42.101) 6.759 ms 6.945 ms 7.107 ms
6 61.148.154.97 (61.148.154.97) 718.908 ms * bt-228-025.bta.net.cn (202.106.228.25) 5.177 ms
7 124.65.58.213 (124.65.58.213) 4.343 ms 4.336 ms 4.367 ms
8 202.106.35.190 (202.106.35.190) 1.795 ms 61.148.156.138 (61.148.156.138) 1.899 ms 1.951 ms
9 * * *
30 * * *
说明:
    记录按序列号从1开始,每个纪录就是一跳 ,每跳表示一个网关,我们看到每行有三个时间,单位是 ms,其实就是 -q 的默认参数。
    探测数据包向每个网关发送三个数据包后,网关响应后返回的时间;如果您用 traceroute -q 4 www.58.com ,表示向每个网关发送4个数据包。
    有时我们 traceroute 一台主机时,会看到有一些行是以星号表示的。出现这样的情况,可能是防火墙封掉了ICMP 的返回信息,所以我们得不到什么相关的数据包返回数据。
    有时我们在某一网关处延时比较长,有可能是某台网关比较阻塞,也可能是物理设备本身的原因。当然如果某台 DNS 出现问题时,不能解析主机名、域名时,也会 有延时长的现象;您可以加-n 参数来避免DNS解析,以IP格式输出数据。
    如果在局域网中的不同网段之间,我们可以通过 traceroute 来排查问题所在,是主机的问题还是网关的问题。如果我们通过远程来访问某台服务器遇到问题时,我们用到traceroute 追踪数据包所经过的网关,提交IDC服务商,也有助于解决问题;但目前看来在国内解决这样的问题是比较困难的,就是我们发现问题所在,IDC服务商也不可能帮助我们解决。