网络管理if,ip.ss

这里主要是关于网络属性管理命令ifcfg家族和iproute家族的使用,还有如何通过配置文件来配置。

ifcfg已经存在很多年了,现在倒是有种功成身退的感觉。在CentOS7上面已经默认不安装了。iproute与内核密切相关,它的名称可能在不能的系统上也不相同。iproute、iproute2、iproute3。


目录:

一、ifcfg

二、iproute

三、配置文件


一、

ifcfg家族:

    ifconfig:配置IP,NETMASK
    route:路由
    netstat:状态及统计数据查看


ifconfig命令:接口及地址查看和管理

ifconfig  [INTERFACE]  显示指定接口信息。

ifconfig -a:显示所有接口,包括inactive非活动状态的接口;

wKioL1aCjlih3xJqAAB7Qw9taf0088.jpg

ifconfig interface [aftype] options | address ...

    options:[-]promisc 设置工作在混杂模式,-promisc表示取消。

ifconfig  IFACE  IP/MASK  [up|down]
ifconfig  IFACE  IP  netmask  NETMASK  

可以设置IP地址为0,以请除接口地址。

wKioL1aCklDhBW9wAAEvNsgHBfQ576.jpg

设置地址并工作在混杂模式。
wKiom1aCkWyiZWsHAAFrIuCIBtA080.jpg

wKioL1aCke2DtTwGAAFZuXBOmC4759.jpg


别名:这是后来加上的,IP地址跟上面有点不同。

[root@localhost ~]# ifconfig eno16777736:0 172.16.40.100/16
[root@localhost ~]# ifconfig
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 800
        inet 172.16.40.1  netmask 255.255.0.0  broadcast 0.0.0.0
        ether 00:0c:29:91:34:92  txqueuelen 1000  (Ethernet)
        RX packets 10251  bytes 953348 (931.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 204  bytes 16582 (16.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eno16777736:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 800
        inet 172.16.40.100  netmask 255.255.0.0  broadcast 172.16.255.255
        ether 00:0c:29:91:34:92  txqueuelen 1000  (Ethernet)




route命令:路由查看及管理
路由条目类型:
主机路由:目标地址为单个IP;
网络路由:目标地址为IP网络;
默认路由:目标为任意网络,0.0.0.0/0.0.0.0
                
查看: -n为以数字方式显示(不会反解名称)
# route  -n

wKiom1aClDOwJR4pAABlYrHj0b8882.jpg

上面红线部分为默认路由,也就是默认网关。 下面两个为两个接口的直连路由。


删除
route  del  [-net|-host] target  [gw Gw]  [netmask Nm]  [[dev] If]

删除172.16.0.0的直连路由。

wKioL1aCljPxKVYYAADgklaMPiQ123.jpg

wKiom1aClimwUrboAACjlq7Z5vI954.jpg

用route del default 也一样。

现在不能上网和访问172.16.0.0网段的主机喽。

wKioL1aDJDTBofyyAAAcq_sLYBI037.jpg

主机路由

对单主机的,我们这里因为是局域网内,所以不用设置gw(gateway),直接网卡出去。

wKiom1aDJBiyOtx3AAA655PBnpM399.jpg

现在呢,有去往172.16.40.1的主机路由。但不能访问其它同网段的主机。


路由表

做这些实验一定要注意arp表

wKiom1aDJBjwcN_-AAAcJgr5XZ8789.jpg

因为没有路线可以到达172.16.0.1,所以默认路由添加失败。

wKioL1aDKQiQx27lAAEJNJ3QlVk145.jpg


默认路由就是网卡,其实就是去往任何地址的数据都从eno16777736这个接口出去,所以就可以局域网通信了。就算不是同一个网段,只要物理链路可以到达,数据就可以到达(一般情况),只不过人家回复的数据去了网关,而没有到我们这里而已。

当然了在这里设置成这样没有任何的价值,只是为了更容易理解路由表。


默认路由

wKioL1aDLSijCfIXAAChLyM-Rl8114.jpg

这样就可以到外网了,我们发往局域网的数据也会到网关那里,只不过网关发现目地是本地,就会丢弃了。而且要有到达172.16.0.1的


wKioL1aDLhWSj3G4AADaZlBsSY0072.jpg

恢复正常完工。



netstat命令:

Print network connections, routing tables, interface statistics, masquerade connections, and multicast  memberships

显示路由表:netstat  -rn
-r:显示内核路由表
-n:数字格式

跟route -n 的结果基本一样。


显示网络连接:
netstat  [--tcp|-t]  [--udp|-u]  [--udplite|-U]  [--sctp|-S]  [--raw|-w]  [--listening|-l]  [--all|-a]  [--numeric|-n]   [--extend|-e[--extend|-e]]  [--program|-p]
-t:TCP协议的相关连接,连接均有其状态;FSM(Finate State Machine);
-u:UDP相关的连接
-w:raw socket相关的连接
-l:处于监听状态的连接
-a:所有状态
-n:以数字格式显示IP和Port;
-e:扩展格式
-p:显示相关的进程及PID;
                    
常用组合:
-tan,  -uan,  -tnl,  -unl,  -tunlp
                               
显示接口的统计数据:
netstat    {--interfaces|-I|-i}    [iface]   [--all|-a]   [--extend|-e]   [--verbose|-v]   [--program|-p]  [--numeric|-n]
所有接口:netstat  -i
指定接口:netstat  -I<IFace>

指定接口这里,-I与接口之间一定不能有空格
wKioL1aDMUjx7fZ0AAA2aun-ijA447.jpg



ifup/ifdown命令:只用于启用或关闭接口,ifconfig也有这个功能。
            注意:通过配置文件/etc/sysconfig/network-scripts/ifcfg-IFACE来识别接口并完成配置;



二、iproute

iproute2家族:
    ip OBJECT:
        addr:地址和掩码;
        link:接口
        route:路由
    ss:状态及统计数据查看


ip命令有许多的OBJECT所组成,好像在CentOS7上面的很多命令都是这样,如: systemctl,localectl。

OBJECT :

{ link | addr | addrlabel | route | rule | neigh | ntable | tunnel | tuntap | maddr | mroute | mrule | monitor | xfrm | netns | l2tp | tcp_metrics }


ip link     网络设备配置命令,如启用禁用,改变MTU和MAC地址。
ip addr     主要是用来管理IP地址的, IP或IPV6。
ip route    管理路由。
ip rule     管理路由策略,用来控制路由的选择策略,从而控制数据不同的走向。
ip neigh/neighbour    ARP表的管理。  
ip tunnel   隧道配置。
ip maddr    多播地址管理。
ip mroute   多播路由管理。
ip monitor  状态监控,如:IP或路由的状态的持续监控。
ip xfrm     设备xfrm,  转换数据报的格式,数据包进行加密。

ip netns    管理网络名称空间
看起来好强大,但我们这里只介结下前三个,其它的说实话,不会j_0005.gif


其实ip这个命令虽然很复杂,但每一步都有help。看起来非常清楚。

wKioL1aDNyWzUEGjAADFY7kx8TA975.jpg


wKiom1aDN2zSB2JOAAFgRiXOncU963.jpg


show / manipulate routing, devices, policy routing and tunnels

ip [ OPTIONS ] OBJECT { COMMAND | help }
                OBJECT := { link | addr | route | netns  }
            
注意: OBJECT可简写,各OBJECT的子命令也可简写;

   
ip link: network device configuration
        ip  link  set - change device attributes
            dev NAME (default):指明要管理的设备,dev关键字可省略;
            up和down:
            multicast on或multicast off:启用或禁用多播功能;
            name NAME:重命名接口
            mtu NUMBER:设置MTU的大小,默认为1500;
            netns PID:ns为namespace,用于将接口移动到指定的网络名称空间;

wKiom1aDOQKhfFDWAABrsn1puxE162.jpg        ip 

mtu 800 , qdisc排队规则 pfifo_fast 前进前出,state状态up。默认mode.  可排队列长度1000。

link  show  - display device attributes
ip  link  help -  显示简要使用帮助;
       


ip netns:  - manage network namespaces. 简单介绍。
        ip  netns  list:列出所有的netns
        ip  netns  add  NAME:创建指定的netns
        ip  netns  del  NAME:删除指定的netns
        ip  netns   exec  NAME  COMMAND:在指定的netns中运行命令
wKioL1aDPm6CTDcIAADjjuJFW04746.jpg


wKiom1aDPnuxDnumAABFP0thR98412.jpg



ip address - protocol address management.

        
        ip address add - add new protocol address
            ip  addr  add  IFADDR  dev  IFACE
                [label NAME]:为额外添加的地址指明接口别名;
                [broadcast ADDRESS]:广播地址;会根据IP和NETMASK自动计算得到;
                [scope SCOPE_VALUE]:作用域
                    global:全局可用; 默认
                    link:接口可用;
                    host:仅本机可用;                                                

wKiom1aDR7_T_5XvAAES2FoxCl8777.jpg

[root@localhost ~]# ip addr add 172.16.40.1/16 dev eno16777736
[root@localhost ~]# ip addr show eno16777736
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 800 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:91:34:92 brd ff:ff:ff:ff:ff:ff
    inet 172.16.40.1/16 scope global eno16777736
       valid_lft forever preferred_lft forever
[root@localhost ~]# ip addr add 172.16.40.2/16 dev eno16777736
[root@localhost ~]# ip addr show eno16777736
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 800 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:91:34:92 brd ff:ff:ff:ff:ff:ff
    inet 172.16.40.1/16 scope global eno16777736
       valid_lft forever preferred_lft forever
    inet 172.16.40.2/16 scope global secondary eno16777736
       valid_lft forever preferred_lft forever
[root@localhost ~]# ifconfig eno16777736
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 800
        inet 172.16.40.1  netmask 255.255.0.0  broadcast 0.0.0.0
        ether 00:0c:29:91:34:92  txqueuelen 1000  (Ethernet)
        RX packets 10102  bytes 937624 (915.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 172  bytes 14634 (14.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

用ifconfig只能查看到主地址和别名的地址,同一个接口名称的多个地址不会显示出来。

添加别名:

[root@localhost ~]# ip addr add 172.16.40.12/16 label eno16777736:0 dev eno16777736


ip address delete - delete protocol address
ip addr  delete  IFADDR  dev  IFACE

[root@localhost ~]# ip addr del 172.16.40.2 dev eno16777736
Warning: Executing wildcard deletion to stay compatible with old scripts.
         Explicitly specify the prefix length (172.16.40.2/32) to avoid this warning.
         This special behaviour is likely to disappear in further releases,
         fix your scripts!

这个也删除,就是提示我们要把地址写全,加上掩码长度


ip address show - look at protocol addresses
ip addr list  [IFACE]:显示接口的地址;


ip addr flush
ip address flush - flush protocol addresses
ip  addr  flush  dev  IFACE

ip addr flush [ dev STRING ] [ to PREFIX ] [ label PATTERN ]

flush也是用来清除地址的,不过用擦除更好,一擦一大片。

         ip addr flush eth0                              清除所有地址
         ip addr flush eth0 label eth0:0                 清除别名
         ip addr flush eth0 to 172.16.0.0/16       清除以172.16开头的

[root@localhost ~]# ip addr flush dev eno16777736
[root@localhost ~]# ip addr show dev eno16777736
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 800 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:91:34:92 brd ff:ff:ff:ff:ff:ff
[root@localhost ~]# ip addr add 172.16.40.100 dev eno16777736
[root@localhost ~]# ip addr add 172.16.40.101 dev eno16777736
[root@localhost ~]# ip addr add 172.16.40.102 dev eno16777736
[root@localhost ~]# ip addr add 192.168.10.10/24 dev eno16777736
[root@localhost ~]# ip addr add 192.168.10.12/24 dev eno16777736
[root@localhost ~]# ip addr show eno16777736
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 800 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:91:34:92 brd ff:ff:ff:ff:ff:ff
    inet 172.16.40.100/32 scope global eno16777736
       valid_lft forever preferred_lft forever
    inet 172.16.40.101/32 scope global eno16777736
       valid_lft forever preferred_lft forever
    inet 172.16.40.102/32 scope global eno16777736
       valid_lft forever preferred_lft forever
    inet 192.168.10.10/24 scope global eno16777736
       valid_lft forever preferred_lft forever
    inet 192.168.10.12/24 scope global secondary eno16777736
       valid_lft forever preferred_lft forever

我们发现在添加地址的时候,如果不写掩码,默认就是32了。现在我们清除所有172开头的地址。

[root@localhost ~]# ip addr flush dev eno16777736 to 172/8
[root@localhost ~]# ip addr show eno16777736
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 800 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:91:34:92 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.10/24 scope global eno16777736
       valid_lft forever preferred_lft forever
    inet 192.168.10.12/24 scope global secondary eno16777736
       valid_lft forever preferred_lft forever
[root@localhost ~]# 
[root@localhost ~]# ip addr flush dev eno16777736        #清空吧。


ip route - routing table management

ip route add - add new route
ip route change - change route
ip route replace - change or add new one
ip  route   add  TYPE PREFIX  via GW  [dev  IFACE]  [src SOURCE_IP]
ip route delete - delete route
ip  route  del  TYPE PRIFIX
ip route show - list routes
ip route flush - flush routing tables
ip route get - get a single route
ip  route  get  TYPE PRIFIX


ip  route   add  TYPE PREFIX  via GW  [dev  IFACE]  [src SOURCE_IP]

# ip route add 10.0.0.0/8 via 172.16.0.1 dev eno16777736 src 172.16.40.1

# ip  route  add default  via  GW

via就等于route命令的gw,src主要用于同一个接口有多个地址的情况。

[root@localhost ~]# ip route add 10.0.0.0/8 via 172.16.0.1
[root@localhost ~]# ip route show
default via 172.16.0.1 dev eno16777736  proto static  metric 100 
10.0.0.0/8 via 172.16.0.1 dev eno16777736 
172.16.0.0/16 dev eno16777736  proto kernel  scope link  src 172.16.40.1 
192.168.189.0/24 dev eno33554984  proto kernel  scope link  src 192.168.189.190  metric 100

有多个网卡,想指定网卡为出口,就可以用dev来指定。


ip route delete - delete route
ip  route  del  TYPE PRIFIX

[root@localhost ~]# ip route del 10.0.0.0/8    #删除
[root@localhost ~]# ip route del default


ip route show - list routes


ip route change

[root@localhost ~]# ip route show
default via 172.16.0.1 dev eno16777736  proto static  metric 100 
10.0.0.0/8 via 172.16.0.1 dev eno16777736  src 172.16.40.1
[root@localhost ~]# ip route change 10.0.0.0/8 via 172.16.0.10
[root@localhost ~]# ip route show
default via 172.16.0.1 dev eno16777736  proto static  metric 100 
10.0.0.0/8 via 172.16.0.10 dev eno16777736



ip route flush - flush routing tables

[root@localhost ~]# ip route flush 10.0.0.0/8

        
ip route get - get a single route
ip  route  get  TYPE PRIFIX
用来获取单个路由条目

[root@localhost ~]# ip route get 192
192.0.0.0 via 172.16.0.1 dev eno16777736  src 172.16.40.1 
    cache 
[root@localhost ~]#


ss命令:
ss  [options]  [ FILTER ]
                选项:
                    -t:TCP协议的相关连接
                    -u:UDP相关的连接
                    -w:raw socket相关的连接
                    -l:监听状态的连接
                    -a:所有状态的连接
                    -n:数字格式
                    -p:相关的程序及其PID
                    -e:扩展格式信息
                    -m:内存用量
                    -o:计时器信息
                    
FILTER := [ state TCP-STATE ]  [ EXPRESSION ]
                
                    TCP的常见状态:
                        TCP FSM:
                            LISTEN:监听
                            ESTABLISEHD:建立的连接
                            FIN_WAIT_1:
                            FIN_WAIT_2:
                            SYN_SENT:
                            SYN_RECV:
                            CLOSED:
                        
EXPRESSION:
                        dport =
                        sport =
                        示例:'( dport = :22 or sport = :22)'
                         ~]# ss   -tan    '(  dport = :22 or sport = :22  )'
                         ~]# ss  -tan  state  ESTABLISHED


状态:

ESTABLISHED、LISTENING、CLOSED、FIN-WAIT-1、FIN-WAIT-1、SYN-SENT、SYN-RECV


查看tcp的所有已建立的连接

[root@localhost ~]# ss -tan state ESTABLISHED
Recv-Q Send-Q                    Local Address:Port                      Peer Address:Port 
0      0                       192.168.189.190:22                       192.168.189.1:50994 
0      52                      192.168.189.190:22                       192.168.189.1:49923

已连立连接,源端口为22的,也就是本机22端口的。

[root@localhost ~]# ss -tan state ESTABLISHED '( sport = :22 )'
Recv-Q Send-Q                    Local Address:Port                      Peer Address:Port 
0      0                       192.168.189.190:22                       192.168.189.1:50994 
0      0                       192.168.189.190:22                       192.168.189.1:49923 
[root@localhost ~]#

只查看某个端口:

[root@localhost ~]# ss -tuan '( sport = :22 )'
Netid State      Recv-Q Send-Q             Local Address:Port               Peer Address:Port 
tcp   LISTEN     0      128                            *:22                            *:*     
tcp   ESTAB      0      0                192.168.189.190:22                192.168.189.1:50994 
tcp   ESTAB      0      0                192.168.189.190:22                192.168.189.1:49923 
tcp   LISTEN     0      128                           :::22                           :::*     
[root@localhost ~]#


三、配置文件:

上面的各种配置命令都是在当前运行内核中生效,而重启系统或重启服务配置就丢了。我们要把配置保存起来就要编辑配置文件了。系统上也有命令可以直接在配置文件中生效而不在内核中生效的,还有可以同时生效的。



IP配置文件
IP/NETMASK/GW/DNS等属性的配置文件:/etc/sysconfig/network-scripts/ifcfg-IFACE
路由的相关配置文件:/etc/sysconfig/network-scripts/route-IFACE

配置文件/etc/sysconfig/network-scripts/ifcfg-IFACE通过大量参数来定义接口的属性;可通过vim等文本编辑器直接修改,也可以使用专用的命令的进行修改(CentOS 6:system-config-network (setup),CentOS 7: nmtui)

ifcfg-IFACE配置文件参数:
    DEVICE:此配置文件对应的设备的名称;
    ONBOOT:在系统引导过程中,是否激活此接口;
    UUID:此设备的惟一标识;
    IPV6INIT:是否初始化IPv6;
    BOOTPROTO:激活此接口时使用什么协议来配置接口属性,常用的有dhcp、bootp、static、none;
    TYPE:接口类型,常见的有Ethernet, Bridge;
    DNS1:第一DNS服务器指向;
    DNS2:备用DNS服务器指向;
    DOMAIN:DNS搜索域;
    IPADDR: IP地址;
    NETMASK:子网掩码;CentOS 7支持使用PREFIX以长度方式指明子网掩码;
    GATEWAY:默认网关;
    USERCTL:是否允许普通用户控制此设备;
    PEERDNS:如果BOOTPROTO的值为“dhcp”,是否允许dhcp server分配的dns服务器指向覆盖本地手动指定的DNS服务器指向;默认为允许;
    HWADDR:设备的MAC地址;

    NM_CONTROLLED:是否使用NetworkManager服务来控制接口;         

如:

[root@localhost network-scripts]# cat ifcfg-eno16777736 
# Generated by dracut initrd
NAME="eno16777736"
DEVICE="eno16777736"
ONBOOT=yes
NETBOOT=yes
UUID="e6fb36d2-c42d-47fc-a4df-29dec9cf3111"
IPV6INIT=yes
BOOTPROTO=static
IPADDR=172.16.40.10
NETAMSK=255.255.0.0
GATEWAY=172.16.0.1
DNS1=172.16.0.1
TYPE=Ethernet
[root@localhost network-scripts]#


在CentOS7里面有点不一样,可以用prefix来表示掩码长度,同一个设备可以用多个IP地址。如:

TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=enp0s3
UUID=065a8851-f7ba-4d50-8cbb-ec71cb4a24d3
DEVICE=enp0s3
ONBOOT=yes
IPADDR=172.16.40.12
PREFIX=16
IPADDR1=172.16.40.31                #注意看这里,第二个IP地址。
PREFIX1=16                                    #使用方式在IPADDR后面加数字就可以。 这里的掩码长度也一样。

结果就是这种:

2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:fd:00:4e brd ff:ff:ff:ff:ff:ff
    inet 172.16.40.12/16 brd 172.16.255.255 scope global enp0s3
       valid_lft forever preferred_lft forever
    inet 172.16.40.31/16 brd 172.16.255.255 scope global secondary enp0s3
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fefd:4e/64 scope link 
       valid_lft forever preferred_lft forever

但是在配置文件中设置网卡别名,却一直没有成功。  以后再说啦。


网络服务:在我们的CentOS上面有两个管理网络的服务。
        network
        NetworkManager

管理网络服务:控制程序
        CentOS 6:  service  SERVICE  {start|stop|restart|status}
        CentOS 7:systemctl  {start|stop|restart|status}  SERVICE[.service]
            
配置文件修改之后,如果要生效,需要重启网络服务;
        CentOS 6:# service  network  restart
        CentOS 7:# systemctl  restart  network.service
            
路由:/etc/sysconfig/network-scripts/route-IFACE
    支持两种配置方式,但不可混用;
        (1) 每行一个路由条目:
            TARGET  via  GW

[root@localhost network-scripts]# cat route-eno16777736 
0.0.0.0/0       via    172.16.0.1  
10.0.0.1    via    172.16.0.1
192.168.0.0/24    via    192.168.189.1
223.108.1.8    via    10.0.0.1
[root@localhost network-scripts]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.16.0.1      0.0.0.0         UG    0      0        0 eno16777736
10.0.0.1        172.16.0.1      255.255.255.255 UGH   0      0        0 eno16777736
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eno16777736
172.16.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eno16777736
192.168.0.0     192.168.189.1   255.255.255.0   UG    0      0        0 eno33554984
192.168.189.0   0.0.0.0         255.255.255.0   U     100    0        0 eno33554984
[root@localhost network-scripts]#

因为在IP配置里面已经设置网关了,这里其实也不用再加上默认路由了。还有就是下一条需要是本机可达的。


  (2) 每三行一个路由条目:
            ADDRESS#=TARGET
            NETMASK#=MASK
            GATEWAY#=NEXTHOP


例子:
            ADDRESS0=192.168.0.0
            NETMASK0=255.255.255.0
            GATEWAY0=172.16.100.177

            ADDRESS1=192.168.1.10
            NETMASK1=255.255.255.255
            GATEWAY1=172.16.100.77



谢谢浏览,如有问题,还请指出。谢谢j_0022.gif



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章