Rocky Linux 9 从入门到精通003 — 网络配置(基础篇)

说明: 本文介绍了 Rocky Linux 9 网络配置的常用命令及方法。对于更深入的网络管理知识,请参阅:Rocky Linux 9 从入门到精通003 — 网络配置(进阶篇),内容涵盖:网卡重命名、网络唤醒(通过网卡唤醒计算机)、网卡聚合绑定(Bonding)等。

IPv4 与 IPv6

在进行 IP 配置之前,我们延伸了解一下 IPv4 与 IPv6 。 IPv4(Internet Protocol version 4)和 IPv6(Internet Protocol version 6)是互联网上用于数据包交换的两个版本的网络层协议。它们是互联网协议套件的核心部分,负责在网络设备之间路由和传递数据。

IPv4

IPv4 是第四版互联网协议,自 1981 年以来一直被广泛使用。IPv4 的特点包括:

  • 地址空间: IPv4 使用 32 位地址,这意味着它可以支持大约 42 亿个独特的 IP 地址。
  • 地址表示: IPv4 地址通常以点分十进制格式表示,例如 192.168.1.1。
  • 地址配置: IPv4 地址可以手动配置(静态)或通过动态主机配置协议(DHCP)自动分配。
  • 分片: IPv4 允许在传输过程中对数据包进行分片,这可以由发送端、接收端或中间路由器处理。

由于互联网的快速增长,IPv4 地址已经耗尽,这促使了对更广泛地址空间协议的需求。

在 IPv4 地址空间中,地址分为公网 IP、私有 IP 和 CGN(Carrier Grade NAT)地址。以下是详细区分:

公网 IP 地址

公网 IP 地址是全球唯一的,可以在整个互联网中进行通信的 IP 地址。它们不属于下列提到的私有 IP 和 CGN 地址的范围。所以,除了以下私有 IP、CGN 地址以及保留地址和特殊用途地址(如多播地址、环回地址等),其他的都属于公网 IP。

私有 IP 地址

私有 IP 地址用于局域网(LAN)内部通信,是不会在互联网中进行路由的。这些地址范围由 IANA(Internet Assigned Numbers Authority)分配:

  1. 10.0.0.0 到 10.255.255.255
  2. 172.16.0.0 到 172.31.255.255
  3. 192.168.0.0 到 192.168.255.255

CGN (Carrier Grade NAT) 地址

CGN 地址也称为共享地址空间,用于 ISP 提供的 NAT 方案,以减少 IPv4 地址的消耗。以下是该范围:

  1. 100.64.0.0 到 100.127.255.255

这些地址也不会在全球互联网中进行路由,用于解决多个用户共享一个公共 IP 地址的需求(Tailscale 用的这个地址段)。

其他特殊地址

还有一些保留和特殊用途的地址,例如:

  • 环回地址: 127.0.0.1
  • 广播地址: 255.255.255.255
  • 多播地址: 224.0.0.0 到 239.255.255.255

IPv6

IPv6 是互联网协议的最新版本,旨在解决 IPv4 地址耗尽的问题,并引入了一些新的特性和改进。IPv6 的特点包括:

  • 地址空间: IPv6 使用 128 位地址,极大地扩展了地址空间,可以支持近乎无限数量的独特 IP 地址。
  • 地址表示: IPv6 地址通常以冒号分隔的十六进制格式表示,例如 2001:0db8:85a3:0000:0000:8a 2 e:0370:7334。
  • 地址配置: IPv6 地址可以通过多种方式配置,包括静态配置、状态无关地址自动配置(SLAAC)和动态主机配置协议版本 6(DHCPv 6)。
  • 无分片: IPv6 设计时取消了路由器的分片功能,要求发送端执行路径最大传输单元(PMTU)发现,并发送适合路径上最小链路 MTU 的数据包。

在 IPv6 中,没有对应 IPv4 的私有 IP 和公网 IP 的概念,但有类似的机制来实现内网和公网的区别与应用。以下是一些重要的 IPv6 地址类型和其用途:

全球单播地址(Global Unicast Address)

全球单播地址就是 IPv6中用于在全球范围内进行通信的唯一地址,类似于 IPv4的公网 IP。其地址范围一般是以 2000::/3 开头。

唯一本地地址(Unique Local Address, ULA)

唯一本地地址在某种程度上类似于 IPv4的私有 IP 地址,用于局域网通信,不会在全球互联网中进行路由。其地址范围是 FC00::/7,也可以细分为以下两个范围:

  • 随机分配的 ULA: FD00::/8,通用情况下会使用这个范围,通过随机生成的方式保证在局部网络内的唯一性。
  • 原始分配的 ULA: FC00::/8,目前未正式广泛使用。

链路本地地址(Link-Local Address)

这些地址只能用于单个网络链路的节点之间,不能路由到其他链路。所有 IPv6 接口在启动时都会自动生成一个链路本地地址以支持邻居发现协议。其地址范围是 FE80::/10

不管是 Linux、macOS 还是 Windows 都会分配一个 Link-Local Address,以 inet6 FE80:: 开头。

# Linux
[root@localhost ~]# ifconfig
ens18: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.3  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::486a:e224:31e4:d1fc  prefixlen 64  scopeid 0x20<link>
        ether 52:ea:eb:77:3d:fe  txqueuelen 1000  (Ethernet)
        RX packets 112410841  bytes 40294807433 (37.5 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 64910  bytes 24656852 (23.5 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

# macOS
❯ ifconfig
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=400<CHANNEL_IO>
    ether f8:28:19:6a:2b:0f
    inet6 fe80::18cd:9189:ab4:ef40%en0 prefixlen 64 secured scopeid 0x6
    inet 192.168.1.2 netmask 0xffffff00 broadcast 192.168.1.255
    nd6 options=201<PERFORMNUD,DAD>
    media: autoselect
    status: active

# Windows
PS C:\Users\muzi> ipconfig
Windows IP 配置
以太网适配器 以太网:

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::530b:7d8a:998a:f3f5%16
   IPv4 地址 . . . . . . . . . . . . : 192.168.1.1
   子网掩码  . . . . . . . . . . . . : 255.255.255.0
   默认网关. . . . . . . . . . . . . : 192.168.1.254

其他类型地址

还有一些其他特殊用途的地址,比如:

  • 多播地址: FF00::/8,用于多播通信。
  • 组播地址: FF00::/8,用于组播通信。

IPv4 与 IPv6 之间的主要区别

  • 地址长度: IPv4 是 32 位,IPv6 是 128 位。
  • 地址表示法: IPv4 使用点分十进制,而 IPv6 使用冒号分隔的十六进制。
  • 地址空间: IPv6 提供了比 IPv4 更广阔的地址空间。
  • NAT 转换: 消除 NAT 以将地址空间从 32 位扩展到 128 位。
  • IPSec 支持: 在 IPv6 中,IPSec 是核心特性的一部分,但同样也需要进行配置,比如采用 strongswan 等。
  • 数据包处理: IPv6 简化了数据包头部,以提高路由效率,并取消了路由器分片功能。
  • 自动配置: IPv6 支持更高级的自动配置能力。
  • 多播和广播: IPv6 支持多播,但不支持 IPv4 那样的网络广播。取而代之,IPv6 使用多播和邻居发现协议来实现网络上的设备发现和配置。

IPv4 与 IPv6 这些区别反映了互联网协议在安全性、效率、可扩展性方面的进步,同时也提出了新的挑战,例如迁移和兼容性问题。随着 IPv6 逐渐被广泛采用,这些挑战将得到解决。

以下两图为 IPv4 与 IPv6 报文头对比:

网络配置

系统安装完成后,首先需要配置对应 IP 地址,确保我们可以通过 SSH 连接,这样进行命令行操作会更方便。如果您无法查看到对应网络接口,可能的原因:

  • 网卡驱动没有正确加载: 可能是系统没有自动加载网卡的驱动程序。可以使用 lspcilsusb 命令查看硬件信息,确认网卡设备是否被系统检测到。如果检测到网卡但无法使用,可能需要手动查找并安装适当的 Linux 驱动程序。
  • 网卡被禁用: 有时网卡可能在 BIOS/UEFI 中被禁用,或者在系统中被网络管理器配置为禁用状态。
  • 网络服务未运行: 如果网络服务(例如 NetworkManager 或 network 服务)没有运行,那么网卡可能不会被正确配置和激活,目前 Rocky Linux 9.3 默认采用 NetworkManager 服务进行网络管理。
  • 网卡硬件故障: 这种概率很低,但也不是没有。

正常情况如下:

[root@localhost ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 12:f7:e7:b9:9e:13 brd ff:ff:ff:ff:ff:ff
    altname enp0s18
    inet 192.168.11.172/24 brd 192.168.11.255 scope global noprefixroute ens18
       valid_lft forever preferred_lft forever
    inet6 fe80::10f7:e7ff:feb9:9e13/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

[root@localhost ~]# nmcli device
DEVICE  TYPE      STATE                   CONNECTION 
ens18   ethernet  connected               ens18      
lo      loopback  connected (externally)  lo         

[root@localhost ~]# nmcli conn show
NAME   UUID                                  TYPE      DEVICE 
ens18  62ad7899-3c31-325a-86c3-43db8ddc2aec  ethernet  ens18  
lo     c4e401b0-6f1f-48b5-b1e7-8022a4f40979  loopback  lo     

网络配置命令 nmcli

对于 IPv4 与 IPv6 有了基础的认识后,下面我们再来说一下网络配置命令 nmcli,这对于我们设置网络非常重要。

在 Rocky Linux 中使用 nmcli 命令来配置网络连接时,下面是详细配置说明:

  1. autodhcp:自动配置,使用 DHCP 客户端从 DHCP 服务器获取 IP 地址、子网掩码、默认网关和 DNS 服务器等配置信息。

    nmcli connection modify <连接名称> ipv4.method auto  
    # 或
    nmcli connection modify <连接名称> ipv4.method dhcp  

    这两个选项都会让网络接口使用动态主机配置协议(DHCP)来自动获取网络配置。

  2. manual:手动配置,需要手动指定静态的 IP 地址、子网掩码、默认网关和 DNS 服务器等配置信息。

    nmcli connection modify <连接名称> ipv4.method manual ipv4.addresses <IP地址/子网掩码> ipv4.gateway <网关地址> ipv4.dns <DNS地址>

    在这种方式下,您需要指定所有必要的网络配置,包括 IP 地址、子网掩码、网关和 DNS 服务器信息。

  3. link-local:使用 IPv4 链路本地地址(169.254.0.0/16 范围内的地址),通常不需要进一步的配置。

    nmcli connection modify <连接名称> ipv4.method link-local  

    这种方法允许设备在没有 DHCP 服务器的局域网内进行通信。

  4. shared:共享模式,网络接口将共享其连接到的网络,并充当其他设备的网关和 DHCP 服务器。

    nmcli connection modify <连接名称> ipv4.method shared  

    当您希望该设备为连接到它的其他设备提供网络接入时,可以使用这种方式。

  5. disabled:禁用 IPv4 配置。

    nmcli connection modify <连接名称> ipv4.method disabled  

    这个选项会关闭 IPv4 网络功能,通常用于仅需要 IPv6 或者不需要任何 IP 层网络配置的场合。

请注意,<连接名称> 应该替换为您想要配置的网络连接名称,您可以通过 nmcli connection show 命令查看所有可用的网络连接名称。另外,当您更改了连接配置之后,需要重新启动网络连接使配置生效:

nmcli connection down <连接名称>  
nmcli connection up <连接名称>  

配置 IPv4

通过前面的一系列铺垫,我们终于来到了 IPv4 的配置,在登录 Rocky Linux 9.3 后,您可用会发现以前传统的通过 /etc/sysconfig/network-scripts 目录配置网卡信息,Rocky Linux 9.3 下已经不存在了,通过 cat /etc/sysconfig/network-scripts/readme-ifcfg-rh.txt 可以看到对应说明,配置已经迁移至 /etc/NetworkManager/system-connections/,我们可以通过 nmcli 命令进行配置,下面我们一条一条命令拆解执行。

# 查看设备信息
[root@localhost ~]# nmcli device
DEVICE  TYPE      STATE                                  CONNECTION 
ens18   ethernet  connecting (getting IP configuration)  ens18      
lo      loopback  unmanaged                              --        

# 配置 IPv4 地址
[root@localhost ~]# nmcli connection modify ens18 ipv4.addresses 192.168.11.172/24

# 配置 IPv4网关
[root@localhost ~]# nmcli connection modify ens18 ipv4.gateway 192.168.11.254

# 配置 IPv4 DNS,多个 DNS IP 之间使用双引号 + 空格
[root@localhost ~]# nmcli connection modify ens18 ipv4.dns "114.114.114.114 223.6.6.6"

# 设置 DNS 基础搜索,多个域名之间使用双引号 + 空格
[root@localhost ~]# nmcli connection modify ens18 ipv4.dns-search "rockylinux.cn rockylinux.org"

# 配置 DHCP 为手动模式,不然会出现网络连接一会正常,一会中断的情况。
[root@localhost ~]# nmcli connection modify ens18 ipv4.method manual

# 重新加载网络配置
[root@localhost ~]# nmcli connection down ens18; nmcli connection up ens18

# 查看接口配置信息
[root@localhost ~]# nmcli device show ens18
GENERAL.DEVICE:                         ens18
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         AA:6C:33:A3:47:FE
GENERAL.MTU:                            1500
GENERAL.STATE:                          70 (connecting (getting IP configuration))
GENERAL.CONNECTION:                     ens18
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/15
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         192.168.11.172/24
IP4.GATEWAY:                            192.168.11.254
IP4.ROUTE[1]:                           dst = 192.168.11.0/24, nh = 0.0.0.0, mt = 100
IP4.ROUTE[2]:                           dst = 0.0.0.0/0, nh = 192.168.11.254, mt = 100
IP4.DNS[1]:                             114.114.114.114
IP6.ADDRESS[1]:                         fe80::a86c:33ff:fea3:47fe/64
IP6.GATEWAY:                            --
IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 1024

# 查看 IP 地址
[root@localhost ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether aa:6c:33:a3:47:fe brd ff:ff:ff:ff:ff:ff
    Altname enp 0 s 18
    inet 192.168.11.172/24 brd 192.168.11.255 scope global noprefixroute ens18
       Valid_lft forever preferred_lft forever
    inet6 fe80::a86c:33ff:fea3:47fe/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

# 查看配置文件,如果需要配置多IP,可以修改此配置文件。
[root@localhost ~]# cat /etc/NetworkManager/system-connections/ens18.nmconnection
[connection]
id=ens18
uuid=7f49fd62-02d9-323e-8f35-0c8249647a74
type=ethernet
autoconnect-priority=-999
interface-name=ens18
timestamp=1669365850

[ethernet]

[ipv4]
address1=192.168.11.172/24,192.168.11.254
# address2=192.168.11.145/24,192.168.11.254 # 多 IP 配置
dns=114.114.114.114;223.6.6.6;
dns-search=rockylinux.cn;rockylinux.org;
method=manual

[ipv6]
addr-gen-mode=eui64
method=disabled

[proxy]

# 查看网络连接
[root@localhost ~]# nmcli connection
NAME   UUID                                  TYPE      DEVICE 
ens18  7f49fd62-02d9-323e-8f35-0c8249647a74  ethernet  ens18  

# 重启网络
[root@localhost ~]# systemctl restart NetworkManager
[root@localhost ~]# systemctl status NetworkManager
● NetworkManager.service - Network Manager
     Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2022-11-25 03:52:19 EST; 5s ago
       Docs: man:NetworkManager(8)
   Main PID: 2002 (NetworkManager)
      Tasks: 4 (limit: 48930)
     Memory: 2.9M
        CPU: 105ms
     CGroup: /system. slice/NetworkManager. service
             └─2002 /usr/sbin/NetworkManager --no-daemon

配置 IPv6

在 Rocky Linux 中配置 IPv6 可以通过多种方式进行,包括使用网络配置文件、nmcli(NetworkManager 的命令行界面)或者图形用户界面。以下是使用 nmcli 来配置 IPv6 的基本步骤。

# 查看网络连接
nmcli con show  

# 配置静态 IPv6 地址  
nmcli con mod ens18 ipv6.method manual ipv6.addresses 2001:db8::2/64 ipv6.gateway 2001:db8::1  

# 启用自动配置(例如通过 SLAAC)  
nmcli con mod ens18 ipv6.method auto  

# 启用 DHCPv6  
nmcli con mod ens18 ipv6.method dhcp  

# 重新启动网络连接以应用更改
nmcli con down ens18;nmcli con up ens18  

禁用 IPv6

IPv6 可以在运营商网络或大型互联网企业中会使用到,在中小企业用到的概率不是很大,这时候我们可以彻底禁用 IPv6 。

# 内核层禁用 IPv6
[root@localhost ~]# grubby --update-kernel ALL --args ipv6.disable=1

# 此命令禁用,不会变更 /boot/grub2/grub.cfg 配置文件
[root@localhost ~]# cat /boot/grub2/grub.cfg | grep kernelopts | tail -n 1
  set kernelopts="root=/dev/mapper/rl-root ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=/dev/mapper/rl-swap rd.lvm.lv=rl/root rd.lvm.lv=rl/swap "

# 回滚内核层禁用 IPv6 操作
[root@localhost ~]# grubby --update-kernel ALL --remove-args ipv6.disable

# 验证内核参数是否禁用 IPv6,以下命令实际查看的是 /etc/default/grub 文件。
[root@localhost ~]# grubby --info DEFAULT
index=0
kernel="/boot/vmlinuz-5.14.0-362.8.1.el9_3.x86_64"
args="ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=/dev/mapper/rl-swap rd.lvm.lv=rl/root rd.lvm.lv=rl/swap ipv6.disable=1"
root="/dev/mapper/rl-root"
initrd="/boot/initramfs-5.14.0-362.8.1.el9_3.x86_64.img"
title="Rocky Linux (5.14.0-362.8.1.el9_3.x86_64) 9.3 (Blue Onyx)"
id="263d8af4bb1d454fbf67662961401825-5.14.0-362.8.1.el9_3.x86_64"

# 禁用 IPv6 后,这时候查看对应的 NetworkManager 日志,会出现以下错误。
[root@localhost ~]# journalctl -f -u NetworkManager
Jan 07 11:02:27 k8s-master-002 NetworkManager[770]: <warn>  [1673060547.7163] platform-linux: do-add-ip6-address[2: fe80::f438:916e:4a6d:e55]: failure 95 (Operation not supported)
Jan 07 11:02:29 k8s-master-002 NetworkManager[770]: <warn>  [1673060549.7175] platform-linux: do-add-ip6-address[2: fe80::29ee:3c45:cf9d: e3b8]: failure 95 (Operation not supported)
Jan 07 11:02:31 k8s-master-002 NetworkManager[770]: <warn>  [1673060551.7191] platform-linux: do-add-ip6-address[2: fe80::6bbb:18d2:20a9:3b3a]: failure 95 (Operation not supported)
Jan 07 11:02:33 k8s-master-002 NetworkManager[770]: <warn>  [1673060553.7199] platform-linux: do-add-ip6-address[2: fe80::6ad4:df3f:4258:c7d3]: failure 95 (Operation not supported)

# 这时候还需要通过 nmcli 禁用对应 IPv6,就不会再出现以上错误了。
[root@localhost ~]# nmcli connection show
NAME   UUID                                  TYPE      DEVICE 
ens18  e04856f6-0cfe-3b52-a4a0-c1d4e3ef66cc  ethernet  ens18  
[root@localhost ~]# nmcli connection modify ens18 ipv6.method disabled
[root@localhost ~]# systemctl restart NetworkManager
[root@localhost ~]# nmcli connection up ens18
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)

# 重启,生效配置
[root@localhost ~]# reboot

# 验证是否生效
[root@localhost ~]# cat /proc/cmdline
BOOT_IMAGE=(hd0,msdos1)/vmlinuz-5.14.0-362.8.1.el9_3.x86_64 root=/dev/mapper/rl-root ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=/dev/mapper/rl-swap rd.lvm.lv=rl/root rd.lvm.lv=rl/swap ipv6.disable=1

常见问题

网卡无法自动启动

当设置 systemctl enable NetworkManager 后,网卡无法自动启动,每次都需要执行 nmcli con up enp6s0f0 来启动网卡,这是因为网卡 [connection] 项未设置 autoconnect=true

[root@localhost ~]# cat /etc/NetworkManager/system-connections/enp6s0f0.nmconnection 
[connection]
id=enp6s0f0
uuid=6cd8f827-4er5-4fc4-9da1-fe746dac0f45
type=ethernet
autoconnect=true # 设置为 true
interface-name=enp6s0f0

[ethernet]

[ipv4]
method=manual
address1=192.168.11.172/24,192.168.11.254
dns=192.168.11.254
may-fail=false

[ipv6]
addr-gen-mode=eui64
method=auto

[proxy]

或者命令行配置

[root@localhost ~]# nmcli connection modify enps6s0f0 connection.autoconnect yes  

参考文献

[1] IPv4
[2] IPv6

变更记录

  • 2024-06-30
    • 新增【常见问题】
  • 2024-10-21
    • 新增 IPv4 & IPv6 各类地址说明
Avatar photo

关于 木子

Founder of the Rocky Linux Chinese community, MVP、VMware vExpert、TVP, advocate for cloud native technologies, with over ten years of experience in site reliability engineering (SRE) and the DevOps field. Passionate about Cloud Computing、Microservices、CI&CD、DevOps、Kubernetes, currently dedicated to promoting and implementing Rocky Linux in Chinese-speaking regions.
用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。

评论

  1. someone
    9月前
    2024-2-22 15:08:49

    Nice,NetworkManager之前的网络的管理还是差别比较大的!

  2. hc5568892
    6月前
    2024-5-16 11:56:19

    和7、8两个版本的管理确实有很大的区别,感谢分享了这么好的说明和教程

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇