网关怎么设置?Linux、Windows 默认网关的查看与修改
网关怎么设置分三步:先查出当前网关,并按 IP 和掩码确认正确的网关地址;再按系统写入,临时改路由表、永久改网卡配置;最后用 ping 和 traceroute 验证。一台机器只保留一个默认网关;在机房里,网关以 IP 交付单为准,推算只用来核对。
网关怎么设置,先要知道该填哪个地址。默认网关必须和本机 IP 在同一网段,通常是网段里第一个或最后一个可用地址,机房分配公网 IP 时会在交付单上写明。查当前网关,Linux 用 ip route show default,Windows 用 ipconfig 或 route print -4;修改时,Linux 用 ip route replace default via 网关 立即生效,要重启后仍有效就写进 nmcli、netplan 或网卡配置文件,Windows 在网卡的“Internet 协议版本 4 (TCP/IPv4)”属性里填写,或用 netsh、PowerShell 命令修改。改完用 ping 网关和 traceroute 看第一跳确认。不论 Linux 还是 Windows,一台机器只保留一个默认网关,多块网卡时其余网卡用静态路由。
先查当前网关,再确认应该是多少
网关地址怎么查
| 系统 | 命令 | 看哪里 |
|---|---|---|
| Linux | ip route show default |
default via 后面的地址,dev 后面是走哪块网卡 |
| Linux(老系统) | route -n |
目标为 0.0.0.0、Flags 带 UG 的那一行,Gateway 列 |
| Linux(NetworkManager) | nmcli dev show eth0 |
IP4.GATEWAY 一行 |
| Windows | ipconfig |
对应网卡的“默认网关” |
| Windows | route print -4 |
网络目标和掩码都是 0.0.0.0 的行,“网关”列;有几行就有几个默认网关 |
| Windows(PowerShell) | Get-NetIPConfiguration |
IPv4DefaultGateway |
| macOS | route -n get default |
gateway: 一行 |
家用宽带下,“网关是多少”通常就是路由器的地址,常见 192.168.1.1、192.168.0.1,以 ipconfig 的显示或路由器标签为准。
不知道网关是多少:用 IP 和掩码推算
网关只有一个硬性条件:和本机在同一网段。所以先算出网段的范围,再看候选地址:
- 用掩码算出块大小:256 减去掩码最后一个非 255 的字节,例如 /27 的掩码 255.255.255.224,块大小是 32;
- 本机地址所在的块就是网段:网络地址是块的起点,广播地址是块的终点;
- 网络地址加 1、广播地址减 1,就是两个最常见的网关候选。
| 分到的地址 | 掩码 | 网络地址 | 广播地址 | 可用范围 | 网关候选 |
|---|---|---|---|---|---|
| 203.0.113.70/27 | 255.255.255.224 | .64 | .95 | .65–.94 | .65 或 .94 |
| 198.51.100.13/29 | 255.255.255.248 | .8 | .15 | .9–.14 | .9 或 .14 |
| 192.0.2.6/30 | 255.255.255.252 | .4 | .7 | .5–.6 | .5,即另一个可用地址 |
| 10.20.30.40/24 | 255.255.255.0 | .0 | .255 | .1–.254 | .1 或 .254 |
以第一行为例:70 落在 64 到 95 这个块里,所以网关只可能在 .65 到 .94 之间,按惯例先试 .65 和 .94。推算出来的只是候选,要用 ARP 确认哪个地址真的有设备应答:
arping -c 3 -I eth0 203.0.113.65 # 收到 Unicast reply 说明这个地址有设备
arping -c 3 -I eth0 203.0.113.94
两个都没有应答,说明二层不通或网关不在惯例位置,这时不要逐个地址去试,直接找网络管理员或机房要交付信息。在机房里随便填一个“看起来像网关”的地址,可能恰好是别的客户的服务器。
Linux 设置默认网关:临时修改与永久生效
临时修改:ip route
ip route show default # 改之前先记下旧网关
ip route replace default via 203.0.113.65 dev eth0
ip route get 223.5.5.5 # 确认去外网走新网关
replace 的意思是有就替换、没有就添加,比 add 更省事:已有默认路由时执行 ip route add default ... 会报 RTNETLINK answers: File exists。要删掉一条多余的默认路由,执行 ip route del default via 旧网关。
ip route 改的是内核路由表,重启或者网络服务重启后就恢复了。远程操作时可以利用这一点:先用 ip route replace 改好并验证,再去改配置文件,配置文件和当前状态一致,就不必为了生效而重启网络。
永久修改:按管理网络的组件选
NetworkManager(RHEL、Rocky、AlmaLinux 等),只改网关不动其他参数:
nmcli -f NAME,DEVICE con show # 找到网卡对应的连接名
nmcli con mod "System eth0" ipv4.gateway 203.0.113.65
nmcli dev reapply eth0 # 把改动应用到网卡,不先断开连接
ipv4.gateway 用于静态地址(ipv4.method manual)的连接;DHCP 方式的连接,网关由 DHCP 服务器下发,要改网关就改服务器上的配置,或者先把连接改成静态地址。要去掉网关,写 ipv4.gateway ""。
netplan(Ubuntu 18.04 及以后),网关写成一条默认路由:
network:
version: 2
ethernets:
eth0:
addresses: [203.0.113.70/27]
routes:
- to: default
via: 203.0.113.65
netplan try # 120 秒内不确认就自动回退
老教程里的 gateway4: 203.0.113.65 写法在新版本 netplan 中已经弃用,应用时会给出弃用提示,改成上面的 routes 写法即可;版本较老、不认 to: default 的 netplan,写成 to: 0.0.0.0/0。netplan 规定同一张路由表里 IPv4 默认路由只能定义一次,两种写法不要同时出现。
Debian 的 ifupdown(/etc/network/interfaces),在网卡段落里改 gateway 一行:
auto eth0
iface eth0 inet static
address 203.0.113.70/27
gateway 203.0.113.65
RHEL 8、CentOS 7 的 ifcfg 文件,改 /etc/sysconfig/network-scripts/ifcfg-eth0 里的 GATEWAY=203.0.113.65,再执行 nmcli con reload 和 nmcli con up 连接名。
Windows 设置默认网关:网卡属性、netsh 与 PowerShell
图形界面
- 运行
ncpa.cpl(Win+R 打开“运行”框),进入“网络连接”; - 在要改的网卡上右键打开“属性”,找到“Internet 协议版本 4 (TCP/IPv4)”,再打开它的属性;
- 切换到“使用下面的 IP 地址”,在“默认网关”一栏填新网关;地址、掩码、DNS 没变的不用动;
- 点“高级”,在“IP 设置”页的“默认网关”列表里只留一条,其余删除;
- 一路点“确定”保存,改动立即生效。
Windows 11 也可以在“设置 → 网络和 Internet → 以太网 → IP 分配 → 编辑”里改为手动并填写网关,结果相同。Windows Server Core 没有图形界面,可以运行 sconfig,在“网络设置”里修改。
命令行
单 IP 的机器,用 netsh 一次写入地址、掩码和网关(网卡名以 ipconfig 里显示的为准):
netsh interface ipv4 set address name="以太网" source=static address=203.0.113.70 mask=255.255.255.224 gateway=203.0.113.65 gwmetric=1
set address 会用这一组参数替换网卡上原有的静态地址,配了附加 IP 的服务器执行后附加地址会丢失。这类机器只改网关,用 PowerShell 删旧建新:
Get-NetRoute -DestinationPrefix 0.0.0.0/0 # 看当前有几条默认路由
Remove-NetRoute -InterfaceAlias "以太网" -DestinationPrefix 0.0.0.0/0 -Confirm:$false
New-NetRoute -InterfaceAlias "以太网" -DestinationPrefix 0.0.0.0/0 -NextHop 203.0.113.65
New-NetRoute 默认同时写入当前路由表和持久配置,重启后仍然有效。改完用 ipconfig 和 route print -4 各看一遍,确认默认路由只剩一条且网关正确。网卡上已经有默认网关时,用 New-NetIPAddress 带 -DefaultGateway 参数会报默认网关已存在的错误,也要先删掉旧的。
还有一个老办法 route -p add 0.0.0.0 mask 0.0.0.0 203.0.113.65。它加的是“永久路由”,在 route print 的“永久路由”部分可见,但不显示在网卡属性里,以后别人从网卡属性改网关时容易漏掉它,变成两个默认网关。设置默认网关优先用网卡属性或上面的 PowerShell 命令。
多网卡只保留一个默认网关
服务器常见的组合是一块公网网卡、一块内网网卡。两块都填了网关,就会出现两条默认路由:Linux 按 metric 选一条,Windows 按“接口跃点数 + 网关跃点数”选一条,另一条不会分担流量。更麻烦的是选择结果会变:Windows 默认按链路速率自动计算跃点数,内网网卡升级到 10G 后,优先级可能反超公网网卡,外网流量突然改从内网出口走,表现为“什么都没改,外网突然断了”。
正确的配置是:
- 公网网卡填默认网关;
- 内网网卡网关留空,需要访问的内网网段逐条加静态路由。
Windows 上内网网卡加持久静态路由,if 后面是 route print 开头“接口列表”里内网网卡的编号:
route -p add 10.0.0.0 mask 255.0.0.0 10.10.0.1 metric 10 if 12
Linux 上,临时删掉内网网卡的默认路由,加一条内网路由:
ip route del default via 10.10.0.1 dev eth1
ip route add 10.0.0.0/8 via 10.10.0.1 dev eth1
要长期生效,NetworkManager 的内网连接加上 ipv4.never-default yes,再用 +ipv4.routes "10.0.0.0/8 10.10.0.1" 把内网路由写进连接;netplan 只给内网网卡写一条去往 10.0.0.0/8 的路由,不写默认路由,内网网卡走 DHCP 的,用 dhcp4-overrides 里的 use-routes: false 忽略 DHCP 下发的网关。
机房分配 IP 时网关写错的典型现象
机房交付的 IP 通常是一个小网段,例如 203.0.113.64/27,网关 .65。下面这些错误都很常见,现象各不相同:
| 写错的方式 | 表现 | 怎么确认 |
|---|---|---|
| 网关写成同网段另一个地址,比如 .65 写成 .66 | 外网全不通;如果 .66 恰好是别人的服务器,ARP 能解析到 MAC,看起来“网关是通的” | ip neigh show 203.0.113.66 的 MAC 与同网段其他服务器上看到的网关 MAC 不一致;traceroute -n 第一跳就断 |
| 掩码写大,/27 写成 /24 | 系统不报错,外网基本正常,但访问 203.0.113.0/24 里不属于自己的地址通常不通,比如同段其他客户的机器、机房在这个段里的服务 | 主机把整个 /24 当成本网段,直接 ARP 而不经网关;ip route get 目标IP 显示没有 via |
| 掩码写小,例如 /27 写成 /30 | 203.0.113.70/30 的网段只有 .68–.71,网关 .65 落在网段外,默认路由加不上,外网全不通 | Linux 加默认路由时报 Nexthop has invalid gateway;Windows 保存时弹出网关与 IP 不在同一网段的警告 |
| 换了 IP 段,网关还是旧段的 | 跨网段全不通,Linux ping 外网报 Network is unreachable |
ip route 里没有 default |
| 网关做了冗余,却填了某台核心交换机的实地址 | 平时正常,那台交换机维护或故障时断网,另一台接管后仍然不通 | 让机房确认虚拟网关地址,改填虚拟地址 |
| 附加 IP 段也填了网关 | Windows 出现多条默认路由,出口随机变化,部分连接回包走错 | route print -4 里 0.0.0.0 不止一行 |
确认改对之后,按这个顺序验证:ping 网关;ip neigh 或 arp -a 看网关 MAC 已解析;traceroute -n 223.5.5.5(Windows 用 tracert -d)第一跳是网关;最后从外部 ping 或 SSH 本机,确认回程也通。
在管理系统里怎么落地
网关填错,根源常在交付环节:交付单上的网关是手写的,和交换机上的配置对不上。Toplink DCIM 的 IP 地址管理按 CIDR 录入地址段后,自动算出起止地址和掩码,网关可选段内第一个或最后一个地址,并记录该段所在的 VLAN 和网关所在的交换机;给服务器分配地址时,掩码和网关以这条登记为准,不用每次手抄。客户自己改网关把服务器改断了网,也不必等机房值班:在客户自助端打开 VNC 控制台登录系统,按上文的命令把网关改回来即可。
常见问题
改网关需要重启电脑或服务器吗?
不需要。Linux 用 ip route replace 立即生效,nmcli、netplan 应用配置后生效;Windows 在网卡属性里点确定或执行 netsh、PowerShell 命令后立即生效。有维护窗口时可以重启一次,确认重启后读到的配置和当前一致。
默认网关可以留空吗?
可以,留空后这块网卡只能访问本网段,访问其他网段和互联网都不通。多网卡服务器的内网网卡通常就是这样配置,再按需添加到内网其他网段的静态路由。
DHCP 自动获取的网关能改吗?
在本机上改了也会在下次续租时被覆盖。要么把网卡改成静态地址再填网关,要么让管理员在 DHCP 服务器上修改下发的网关(选项 3,Router)。