You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu 20.04.6系统如何按URL/IP指定WiFi或有线网络访问外网?

Ubuntu 20.04.6系统如何按URL/IP指定WiFi或有线网络访问外网?

当然可以实现!在Ubuntu 20.04.6里,我们可以通过自定义路由规则和**IP集合(ipset)**结合的方式,精准指定哪些IP或URL走WiFi,哪些走有线网络,下面一步步来操作:


一、先确认你的网络接口和网关信息

首先得搞清楚你的有线、WiFi接口名称,以及它们对应的网关地址:

  1. 查看所有网络接口:
ip addr

通常有线接口叫eth0enp*,WiFi接口叫wlan0wlp*,记下来这两个接口名。

  1. 查看各接口的网关:
ip route show

你会看到类似default via 192.168.1.1 dev eth0的行,这里192.168.1.1就是有线网关;同理找WiFi的网关地址,记下来。


二、针对特定IP/IP段配置专属路由

如果你的需求是指定某个IP或IP段走特定网络,直接配置路由规则就行:

1. 创建自定义路由表

Ubuntu默认用数字标识路由表,我们给WiFi和有线各分配一个表:

# 添加WiFi路由表(编号10,名称wifiroute)
echo "10 wifiroute" | sudo tee -a /etc/iproute2/rt_tables
# 添加有线路由表(编号20,名称cableroute)
echo "20 cableroute" | sudo tee -a /etc/iproute2/rt_tables

2. 给路由表添加默认网关

把WiFi和有线的网关分别绑定到对应的路由表:

# 替换成你的WiFi网关和接口名
sudo ip route add default via <WiFi网关地址> dev <WiFi接口名> table wifiroute
# 替换成你的有线网关和接口名
sudo ip route add default via <有线网关地址> dev <有线接口名> table cableroute

3. 添加规则,指定IP走对应路由表

比如要让8.8.8.8(Google DNS)走WiFi,1.1.1.1(Cloudflare DNS)走有线:

# 8.8.8.8走WiFi路由表
sudo ip rule add from all to 8.8.8.8 lookup wifiroute
# 1.1.1.1走有线路由表
sudo ip rule add from all to 1.1.1.1 lookup cableroute

如果是IP段,比如192.168.3.0/24走有线,就写:

sudo ip rule add from all to 192.168.3.0/24 lookup cableroute

4. 让配置永久生效

上面的命令重启后会失效,我们可以把它们加到/etc/rc.local里:

sudo nano /etc/rc.local

exit 0前添加所有路由相关命令,保存后给文件加执行权限:

sudo chmod +x /etc/rc.local

三、针对URL(域名)配置专属路由

路由是基于IP的,所以域名需要先解析成IP,我们可以用ipset结合定时脚本,自动更新域名对应的IP,再引导到指定网络:

1. 安装ipset工具

sudo apt update && sudo apt install ipset

2. 创建IP集合,存放需要走WiFi的域名IP

sudo ipset create wifidomains hash:ip

3. 写脚本自动更新域名IP

创建一个脚本文件,用来定期解析指定域名并更新IP集合:

sudo nano /usr/local/bin/update_wifi_domains.sh

粘贴以下内容(把example.comgoogle.com换成你需要的域名):

#!/bin/bash
# 需要走WiFi的域名列表
DOMAINS=("example.com" "google.com")

# 清空旧的IP集合
ipset flush wifidomains

# 遍历域名,解析IP并添加到集合
for domain in "${DOMAINS[@]}"; do
    # 用dig解析域名的所有IP
    ips=$(dig +short $domain)
    for ip in $ips; do
        ipset add wifidomains $ip
    done
done

给脚本加执行权限:

sudo chmod +x /usr/local/bin/update_wifi_domains.sh

4. 设置定时任务,自动更新IP

用crontab让脚本每小时执行一次(确保域名IP更新):

sudo crontab -e

在文件末尾添加:

0 * * * * /usr/local/bin/update_wifi_domains.sh

保存退出即可。

5. 配置iptables和路由规则,引导IP集合走指定网络

首先用iptables给这些IP打上标记,再让标记过的IP走WiFi路由表:

# 给wifidomains集合里的IP打标记10
sudo iptables -t mangle -A PREROUTING -m set --match-set wifidomains dst -j MARK --set-mark 10
# 让标记10的IP走WiFi路由表
sudo ip rule add fwmark 10 lookup wifiroute

6. 保存iptables规则,防止重启失效

安装iptables-persistent来保存规则:

sudo apt install iptables-persistent

安装过程中会提示是否保存当前规则,选择Yes即可。


四、测试配置是否生效

traceroute命令测试目标IP/域名的路由路径:

# 测试8.8.8.8是否走WiFi网关
traceroute 8.8.8.8
# 测试example.com是否走WiFi网关
traceroute example.com

看输出的第一跳是不是对应的网关,就知道配置生效了。


备注:内容来源于stack exchange,提问作者Hans van Leeuween

火山引擎 最新活动