NetworkManager nmcli ipv4 静态ip 笔记221025

2023-05-16

nmcli connection modify 可以修改现有连接

  • con 可以写成 cconnection 之间的字段
  • mod 可以写成 mmodify 之间的字段
    nmcli connection modify
    nmcli connec modify
    nmcli conne modif
    nmcii conn modi
    nmcli con mod
    nmcli co mo
    nmcli c m
    nmcli c modify
    nmcli connection m
    
  • ipv4. 可以接 [method, dns, dns-search, dns-options, dns-priority, addresses, gateway, routes, route-metric, route-table, routing-rules, ignore-auto-routes, ignore-auto-dns, dhcp-client-id, dhcp-iaid, dhcp-timeout, dhcp-send-hostname, dhcp-hostname, dhcp-fqdn, dhcp-hostname-flags, never-default, may-fail, required-timeout, dad-timeout, dhcp-vendor-class-identifier, dhcp-reject-servers] 。
    • ipv4.method的可选]值有 [auto, link-local, manual, shared, disabled] , ipv4.method最简可写成ipv.me
    • ipv4.addresses 设置IP地址, 最简可写成 ipv4.a, 可设置多个地址,以逗号分隔, 也可多次用 +ipv4.a
      ipv4.a(ipv4.addresses)可以设置多个(,逗号分隔,可以有空格),但只能出现一次, +ipv4.a(+ipv4.addresses)可以设置多个(,逗号分隔)可以出现多次
    • 网关ipv4.g(ipv4.gateway)只能有一个, (在图形界面也只能设置一个), 如果没设置网关就不能上网,但只要有ip地址,就能让网段内其它主机访问,比如ssh连接,没有网关就是能进不能出
    • ipv4.dns不能简写,可一次设置多个, +ipv4.dns可多次设置多个
    • ipv4.dns-search可简写为ipv4.dns-s , 搜索域
    • ipv4.ignore-auto-dns 取值 true|fasle 是否跳过自动域名 , 最简只能写成ipv4.ignore-auto-d

对应图形界面ipv4.ignore-auto-dns在这里插入图片描述

  • ipv4.x前面可以加(加号或减号±), ipv4.x表示设置 +ipv4.x表示新增, -ipv4.x表示移除
    一句中只能出现一次ipv4.x,后面的ipv4.x会覆盖前面的ipv4.x
    一句中可以出现多次 +ipv4.x-ipv4.x
sudo nmcli c m "netplan-ens33" ipv4.method manual ipv4.addr 192.168.168.224/24 ipv4.gateway 192.168.168.2 ipv4.dns 192.168.168.2

最好加上单引号或双引号

sudo nmcli connection modify "有线连接 1" ipv4.method 'manual' ipv4.addr "192.168.168.225/24" ipv4.gateway "192.168.168.2" ipv4.dns '192.168.168.2'

也可以分成多句

sudo nmcli c m "有线连接 1" ipv4.addr "192.168.168.224/24"
sudo nmcli connection modify "有线连接 1" ipv4.gateway "192.168.168.2"
sudo nmcli co mo "有线连接 1" ipv4.method 'manual'

自动获取ip

sudo nmcli co mo "有线连接 1" ipv4.method 'auto'

手动指定ip地址和网关,静态IP

sudo nmcli co mo "有线连接 1" ipv4.method 'manual' ipv4.addresses "192.168.168.224/24" ipv4.gateway "192.168.168.2"

手动指定的dns, 跳过自动获取dns

sudo nmcli co mo "有线连接 1" ipv4.ignore-auto-d 'true'

设置dns , 相同的dns不会重复

sudo nmcli co mo "有线连接 1" ipv4.dns "192.168.168.2 , 8.8.4.4 , 223.6.6.6 , 180.76.76.76"
sudo nmcli co mo "有线连接 1" +ipv4.dns "123.125.81.6 ,1.1.1.1,8.8.8.8,114.114.114.114"
sudo nmcli co mo "有线连接 1" +ipv4.dns "192.168.168.2 , 6.6.6.6" # 不会重复
sudo nmcli co mo "有线连接 1" -ipv4.dns "6.6.6.6"

设置搜索域

sudo nmcli co mo "有线连接 1" ipv4.dns-search 'baidu.com , google.cn , qq.com'



一句设置 method , addresses , gateway , dns , 跳过自动DNS , search
sudo nmcli c m "有线连接 1" ipv4.method 'manual' ipv4.addresses "192.168.168.224/24" ipv4.gateway "192.168.168.2" ipv4.dns "192.168.168.2 , 8.8.4.4 , 223.6.6.6 , 180.76.76.76, 123.125.81.6, 1.1.1.1,8.8.8.8,114.114.114.114" ipv4.ignore-auto-dns 'true' ipv4.dns-search 'baidu.com' ; sudo systemctl restart NetworkManager

method可写成me , addresses可写成a , gateway可写成g , dns不能简写 , dns-serarch可写成dns-s

sudo nmcli c m "有线连接 1" ipv4.me manual ipv4.a "192.168.168.224/24" ipv4.g "192.168.168.1" ipv4.dns "192.168.168.2 , 223.6.6.6 , 180.76.76.76, 123.125.81.6, 1.1.1.1,8.8.8.8,114.114.114.114,8.8.4.4" ipv4.ignore-auto-d 'true' ipv4.dns-s 'baidu.com' ; sudo systemctl restart NetworkManager

没有空格等一些特殊字符的话, 也可以不加引号, 点号不影响

sudo nmcli c m "有线连接 1" ipv4.me manual ipv4.a 192.168.168.224/24 ipv4.g 192.168.168.2 ipv4.dns 192.168.168.2,223.6.6.6,180.76.76.76,123.125.81.6,1.1.1.1,8.8.8.8,114.114.114.114,8.8.4.4 ipv4.ignore-auto-d true ipv4.dns-s baidu.com ; sudo systemctl restart NetworkManager

对于使用 NetworkManager的系统, 一般用GNOME桌面图形界面的系统都默认用NetworkManager, 如 CentOS7,8,9 , Fedora36 等 都可以使用nmclinmtui 命令来配置网络
可以用 nmcli help , nmcli c helpnmcli c m help 查看对应的帮助

$ nmcli help
用法:nmcli [选项] 对象 { 命令 | help }

选项
  -a, --ask                                询问缺少的参数
  -c, --colors auto|yes|no                 是否在输出中使用颜色
  -e, --escape yes|no                      转义值中的列分隔符
  -f, --fields <字段,...>|all|common       指定要输出的字段
  -g, --get-values <字段,...>|all|common   -m tabular -t -f 的快捷方式
  -h, --help                               打印此帮助
  -m, --mode tabular|multiline             输出模式
  -o, --overview                           概览模式
  -p, --pretty                             美化输出
  -s, --show-secrets                       允许显示密码
  -t, --terse                              简介输出
  -v, --version                            显示程序版本
  -w, --wait <秒数>                        设定操作完成的等待超时

对象
  g[eneral]       NetworkManager 的常规状态和操作
  n[etworking]    整体网络控制
  r[adio]         NetworkManager 无线电开关
  c[onnection]    NetworkManager 的连接
  d[evice]        NetworkManager 管理的设备
  a[gent]         NetworkManager 机密(secret)或 polkit 代理
  m[onitor]       监视 NetworkManager 更改

$ nmcli connection help
用法:nmcli connection { 命令 | help }

命令 := { show | up | down | add | modify | clone | edit | delete | monitor | reload | load | import | export }

  show [--active] [--order <排序规则>]
  show [--active] [id | uuid | path | apath] <ID> ...

  up [[id | uuid | path] <ID>] [ifname <接口名称>] [ap <BSSID>] [passwd-file <密码文件>]

  down [id | uuid | path | apath] <ID> ...

  add 常用选项 类型特定选项 从选项 IP_选项 [-- ([+|-]<设置>.<属性> <>)+]

  modify [--temporary] [id | uuid | path] <ID> ([+|-]<设置>.<属性> <>)+

  clone [--temporary] [id | uuid | path ] <ID> <新名称>

  edit [id | uuid | path] <ID>
  edit [type <新连接类型>] [con-name <新连接名称>]

  delete [id | uuid | path] <ID>

  monitor [id | uuid | path] <ID> ...

  reload

  load <文件名> [ <文件名>... ]

  import [--temporary] type <类型> file <要导入的文件>

$ nmcli connection modify help
用法:nmcli connection modify { 参数 | help }

参数 := [id | uuid | path] <ID> ([+|-]<设置>.<属性> <>)+

修改连接配置集的一个或多个属性。
配置集由它的名称、UUID 或 D-Bus 路径代表。对于有多个值
的属性,可以使用 "+""-" 为属性名加前缀。
"+" 代表附加项而不是覆盖整个值。
"-"代表删除选项的项而不是整个值。

参数 := remove <设置>

从连接配置集中删除一个设置。

示例:
nmcli con mod home-wifi wifi.ssid rakosnicek
nmcli con mod em1-1 ipv4.method manual ipv4.addr "192.168.1.2/24, 10.10.1.5/8"
nmcli con mod em1-1 +ipv4.dns 8.8.4.4
nmcli con mod em1-1 -ipv4.dns 1
nmcli con mod em1-1 -ipv6.addr "abbe::cafe/56"
nmcli con mod bond0 +bond.options mii=500
nmcli con mod bond0 -bond.options downdelay
nmcli con mod em1-1 remove sriov

NetworkManager官网
NetworkManager官网—man pages

Archlinux的nmcli用例—nmcli-examples - usage examples of nmcli
Archlinux的NMCLI(1)—nmcli - command-line tool for controlling NetworkManager

nmcli connection add 可以创建新连接

ARGUMENTS := COMMON_OPTIONS TYPE_SPECIFIC_OPTIONS SLAVE_OPTIONS IP_OPTIONS [-- ([+|-]<setting>.<property> <value>)+]

  COMMON_OPTIONS:
                  type <type>
                  ifname <interface name> | "*"
                  [con-name <connection name>]
                  [autoconnect yes|no]
                  [save yes|no]
                  [master <master (ifname, or connection UUID or name)>]
                  [slave-type <master connection type>]

nmcli connection add等效nmcli c a

sudo nmcli c a con-name 'ens33ConnTest001' ifname 'ens33' type ethernet ipv4.method 'manual' ipv4.addresses "192.168.168.224/24 , 192.168.168.225/24,192.168.168.226/24"  +ipv4.address '192.168.168.227/24' +ipv4.a '192.168.168.228/24' +ipv4.addre '192.168.168.229/24 , 192.168.168.230/24   ,     192.168.168.231/24'    +ipv4.addr "192.168.168.232/24" +ipv4.ad '192.168.168.233/24'  +ipv4.a 192.168.168.234/24,192.168.168.235/24 ipv4.gate 192.168.168.2  ipv4.dns 192.168.168.2,119.29.29.29,180.76.76.76,223.6.6.6,8.8.4.4,114.114.115.115 +ipv4.dns '223.5.5.5 , 8.8.8.8 , 1.1.1.1 , 114.114.114.114' +ipv4.dns 101.226.4.6,123.125.81.6 ipv4.ignore-auto-dns true ipv4.dns-search qq.com

ipv4.a(ipv4.addresses)可以设置多个(,逗号分隔,可以有空格),但只能出现一次, +ipv4.a(+ipv4.addresses)可以设置多个(,逗号分隔)可以出现多次
网关ipv4.g(ipv4.gateway)只能有一个, (在图形界面也只能设置一个)
ipv4.dns不能简写,可一次设置多个, +ipv4.dns可多次设置多个
ipv4.dns-search可简写为ipv4.dns-s , 搜索域
ipv4.ignore-auto-dns 取值 true|fasle 是否跳过自动域名 , 最简只能写成ipv4.ignore-auto-d
上面的nmcli控制台语句会在/etc/NetworkManager/system-connections/ 目录生成 con-name指定的名称加上 .nmconnection 后缀的配置文件, 如果同名文件已存在, 就会再加一个UID
上面的nmcli控制台语句生成的对应的配置文件的内容为

[connection]
id=ens33ConnTest001
uuid=47b1917a-5eea-4160-b56f-680654c338c9
type=ethernet
interface-name=ens33

[ethernet]

[ipv4]
address1=192.168.168.224/24,192.168.168.2
address2=192.168.168.225/24
address3=192.168.168.226/24
address4=192.168.168.227/24
address5=192.168.168.228/24
address6=192.168.168.229/24
address7=192.168.168.230/24
address8=192.168.168.231/24
address9=192.168.168.232/24
address10=192.168.168.233/24
address11=192.168.168.234/24
address12=192.168.168.235/24
dns=192.168.168.2;119.29.29.29;180.76.76.76;223.6.6.6;8.8.4.4;114.114.115.115;223.5.5.5;8.8.8.8;1.1.1.1;114.114.114.114;101.226.4.6;123.125.81.6;
dns-search=qq.com;
ignore-auto-dns=true
method=manual

[ipv6]
addr-gen-mode=stable-privacy
method=auto

[proxy]

netplan可以从配置文件创建连接, NetworkManager暂时不知可否从配置文件创建连接,只能从图形界面或nmtuinmcli c a创建新连接, nmcli c load只能加载已创建连接的配置文件, 不能加载自己添加的配置文件


添加一个简洁的,可当基础模板

sudo nmcli connection add con-name 'Concise' ifname 'ens33' type 'ethernet' ipv4.method 'manual' ipv4.addresses "192.168.168.224/24" ipv4.gateway '192.168.168.2' ipv4.dns '192.168.168.2' ipv4.ignore-auto-dns false ipv4.dns-search google.cn

con-name, ifname , type 没法简写 , 区分大小写

可以添加几个连接可用于做试验,或者方便快速切换

sudo nmcli c a con-name 'con-name' ifname 'ens33' type 'EtherneT' ipv4.me 'manual' ipv4.a 192.168.168.224/24 ipv4.g 192.168.168.2

EtHeRnEt 不区分大小写 , 到配置文件会变为小写 ethernet

sudo nmcli c a con-name 'ens33自动获取IP' ifname 'ens33' type EtHeRnEt ipv4.me auto

ipv4.xxx 也不区分大小写, 到配置文件都变小写

sudo nmcli c a con-name '阿里dns' ifname ens33 type ethernet IpV4.me ManuaL iPV4.A 192.168.168.224/24 IPv4.g 192.168.168.2 ipv4.ignore-auto-dns true ipv4.dns 223.6.6.6,223.5.5.5
sudo nmcli c m '阿里dns' iPv4.iGnore-aUto-dNs true Ipv4.dnS 223.6.6.6,223.5.5.5 iPv4.dNs-SeArCh alibaba.com,aliyun.com,taobao.com

con-name, ifname , type 没法简写 , 而且区分大小写

sudo nmcli c a con-name '谷歌dns' ifname ens33 type ETHERnet iPV4.mE mANuAl IpV4.aDDr 192.168.168.224/24 ipV4.GAte 192.168.168.2 IpV4.IgNorE-AUto-DnS TruE ipV4.dNS 8.8.4.4,8.8.8.8 ipV4.DnS-sEaRcH google.cn
sudo nmcli c a con-name 百度dns ifname ens33 type ethernet ipv4.me manual ipv4.a 192.168.168.224/24 ipv4.g 192.168.168.2 ipv4.ignore-auto-dns true ipv4.dns 180.76.76.76 ipv4.dns-search baidu.com

单引号

sudo nmcli c a con-name '腾讯dns' ifname 'ens33' type 'ethernet' ipv4.me 'manual' ipv4.a '192.168.168.224/24' ipv4.g '192.168.168.2' ipv4.ignore-auto-dns 'true' ipv4.dns '119.29.29.29' ipv4.dns-search 'qq.com'

双引号

sudo nmcli c a con-name "114dns" ifname "ens33" type "ethernet" ipv4.me "manual" ipv4.a "192.168.168.224/24" ipv4.g "192.168.168.2" ipv4.ignore-auto-dns "true" ipv4.dns "114.114.114.114,114.114.115.115"

大写

sudo nmcli c a con-name 'IBMdns' ifname 'ens33' type 'ethernet' IPV4.ME manual IPV4.A 192.168.168.224/24 IPV4.G 192.168.168.2 IPV4.IGNORE-AUTO-DNS true IPV4.DNS '9.9.9.9'

全名大写

sudo nmcli c a con-name 'CNNICdns' ifname 'ens33' type 'ethernet' IPV4.METHOD 'manual' IPV4.ADDRESSES 192.168.168.224/24 IPV4.GATEWAY 192.168.168.2 IPV4.IGNORE-AUTO-DNS 'true' IPV4.DNS '1.2.4.8,210.2.4.8' IPV4.DNS-SEARCH 'baidu.com,google.cn'

全名小写

sudo nmcli c a con-name 'CloudflareDNS' ifname 'ens33' type 'ethernet' ipv4.method 'manual' ipv4.addresses '192.168.168.224/24' ipv4.gateway '192.168.168.2' ipv4.ignore-auto-dns 'true' ipv4.dns '1.1.1.1,1.0.0.1' ipv4.dns-search 'baidu.com,google.cn'
sudo nmcli c a con-name "360电信移动铁通dns" ifname "ens33" type "ethernet" ipv4.method "manual" ipv4.addresses "192.168.168.224/24" ipv4.gateway "192.168.168.2" ipv4.ignore-auto-dns "true" ipv4.dns "101.226.4.6 , 218.30.118.6" ipv4.dns-search "360.com"
sudo nmcli c a con-name 360联通dns ifname ens33 type ethernet ipv4.method manual ipv4.addresses 192.168.168.224/24 ipv4.gateway 192.168.168.2 ipv4.ignore-auto-dns true ipv4.dns 123.125.81.6,140.207.198.6 ipv4.dns-search "360.com"
sudo nmcli c a con-name 微软dns ifname ens33 type ethernet ipv4.me manual ipv4.a 192.168.168.224/24 ipv4.g 192.168.168.2 ipv4.ignore-auto-dns true ipv4.dns 4.2.2.1,4.2.2.2 ipv4.dns-s bing.com
sudo nmcli c a con-name OpenDNS ifname ens33 type ethernet ipv4.me manual ipv4.a 192.168.168.224/24 ipv4.g 192.168.168.2 ipv4.ignore-auto-dns true ipv4.dns 208.67.222.222,208.67.220.220 ipv4.dns-s bing.com

修改为手动DNS

sudo nmcli c m 'ens33ConnTest001' ipv4.ignore-auto-dns true

修改自动DNS

sudo nmcli c m 'ens33ConnTest001' ipv4.ignore-auto-dns false

resolvectl 命令可以查看 dns

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NetworkManager nmcli ipv4 静态ip 笔记221025 的相关文章

  • 虚拟机ipv4和6都没访问权限_无线网络连接 ipv4/6都无网络访问权限该怎么解决

    1 网络连接受限或出现黄色感叹号时 xff0c 右击任务栏 网络连接 图标 xff0c 从其右键菜单选择 网络和共享中心 2 待进入 网络和共享中心 界面后 xff0c 点击窗口左上角的 更改适配器设置 按钮 xff0c 如图所示 3 此时
  • linux c++11 获取本机ip地址 ipv4

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • Debian 查看与修改IP,设置多ip,network与networkManager配置

    目录 Debian网络配置network Debian网络配置NetworkManager 当前用的是Debian桌面版 xff0c 网络配置network与NetworkManager xff0c 默认网络采用networkManager
  • 网络——IPV4地址(二)

    划分子网的IPv4地址 在IP地址中增加一个 子网号字段 xff0c 使得两级IP地址变成三级IP地址 这种做法称为子网划分 三级IP地址结构如下 xff1a IP地址 61 lt 网络号 gt lt 子网号 gt lt 主机号 gt 子网
  • IPv4和IPv6何去何从

    一 缘起 某一天 xff0c 在公司技术群内运维大佬们发了这么一条消息 这条消息瞬间勾起了我的好奇心 什么是IPv6 xff1f 为什么要切IPv6 xff1f 于是在上班时多去了几次去卫生间之后 xff0c 对IPv6有了一些初步认识 x
  • ipv4和ipv6的区别

    ipv4 和ipv6 的区别本质在于它们的二进制表示位数 xff0c ipv4是用32位0 1序列来表示的 xff0c 而ipv6使用128位0 1序列来表示的 ipv4用32位 xff0c 为了方便人类记录和阅读 xff0c 我们通常将i
  • docker 错误 WARNING: IPv4 forwarding is disabled. Networking will not work.

    这个错误出现在使用 docker 的服务器上 xff0c 当你进入 docker 容器时 xff0c 如果出现这样的 WARNING 提示 xff0c 则表示服务器没有开启 IPv4 转发 xff0c 按照本文的方法配置开启转发即可 错误提
  • 银河麒麟V10系统NetworkManager服务启动失败的解决方法

    目录 一 NetworkManger网络服务启动失败 二 故障定位过程 xff08 一 xff09 重装NetworkManager未解决 xff08 二 xff09 重装openssl未解决 三 解决方案 xff08 一 xff09 修改
  • NetworkManager 使用

    Network Manager Network Manager aims for Network Connectivity which Just Works The computer should use the wired network
  • 第一章 网络子系统初始化--基于Linux3.10

    下载地址 http download csdn net detail shichaog 8620701 网络初始化函数调用顺序 Linux系统启动那些事 基于Linux 3 10内核 提到系统启动时会调用一系列的初始化函数 初始化函数使用i
  • Failed to restart network.service: Unit network.service not found

    在配置完网络设置时重启时会出现这个问题 原因是和NetworkManager 服务有冲突 解决办法就是关闭NetworkManager然后重启一下Network服务 service NetworkManager stop 关闭Network
  • 第二章 主机到网络层(网卡)--基于Linux3.10

    TCP IP协议栈模型 网络协议栈常用OSI七层模型 实际上Linux网络协议栈使用的却是四层模型 图2 1展示了OSI七层和四层模型它们之间各层对应关系 图2 1的最左侧一列是数据在协议栈上各层的称谓 frame位于主机到网络层 Laye
  • 小团队管理核心(一)

    主管应该投身具体业务还是专注于管理 投身业务 or 专注管理 主管应该投身具体业务还是专注于管理 一 主管的定位 二 如何实现老板目标 三 主管应当专注管理 一 主管的定位 定位简述 通过下属实现经营者目标的人 定位解析 由此看来我们的目标
  • Win32 套接字 - 在发送到其他本地接口时强制 ip 数据包离开物理接口

    摘要 我正在尝试创建套接字以在同一台计算机上存在的两个物理接口之间传递数据 并且 Win32 套接字始终直接在内核中转发流量 而不是通过物理接口推送 有什么方法可以禁用此行为 也许可以通过设备设置 注册表调整 路由表恶作剧或套接字选项 我们
  • 使用正则表达式验证 IPv4 地址

    我一直在尝试获得一个有效的正则表达式来进行 IPv4 验证 但运气不佳 似乎有一次我已经受够了 25 0 5 2 0 4 0 9 01 0 9 0 9 4 但它会产生一些奇怪的结果 grep version grep GNU grep 2
  • Python urllib2 强制 IPv4

    我正在使用 python 运行一个脚本 该脚本使用 urllib2 从天气 api 获取数据并将其显示在屏幕上 我遇到的问题是 当我查询服务器时 出现 没有与主机名关联的地址 错误 我可以使用 Web 浏览器查看 api 的输出 并且可以使
  • IPv6 下网络字节顺序毫无意义吗?

    如果我们使用32位整数来存储IPv4地址 那么必须考虑该整数的字节顺序 但是 由于几乎所有平台下都没有内置的128位整数类型 因此IPv6地址必须存储到字节数组中 因此 我认为字节顺序不再是问题 我对么 或者IPv6有对应的函数htonlX
  • 在 MySQL 数据库中存储 IP 地址(IPv4 和 IPv6)

    好吧 现在我知道类似的问题可能已经被问过一百万次了 但我在这方面是一个真正的新手 我真的很感谢你在这里的帮助 基本上 我想将访问者的 IP 地址存储在 MySQL 中 以便以后检索和验证 我首先需要知道需要使用什么类型的字段来存储 IP 地
  • docker 容器中的 nmcli

    我目前正在寻找在 docker 容器中运行 nmcli nmcli 在我的主机上工作得很好 但如果我启动一个特权容器 nmcli 就不起作用 启动我的容器 sudo docker run privileged net host it ima
  • 将 C++ TCP/IP 应用程序从 IPv4 转换为 IPv6。难的?值得这么麻烦吗?

    多年来 我使用 WinSock 为 Windows 开发了少量 C 服务器 客户端应用程序 路由器 Web 邮件 FTP 服务器等 等等 我开始越来越多地考虑创建这些应用程序的 IPv6 版本 当然 同时也保留原始的 IPv4 版本 问题

随机推荐