Ubuntu 20.04.6系统如何按URL/IP指定WiFi或有线网络访问外网?
当然可以实现!在Ubuntu 20.04.6里,我们可以通过自定义路由规则和**IP集合(ipset)**结合的方式,精准指定哪些IP或URL走WiFi,哪些走有线网络,下面一步步来操作:
一、先确认你的网络接口和网关信息
首先得搞清楚你的有线、WiFi接口名称,以及它们对应的网关地址:
- 查看所有网络接口:
ip addr
通常有线接口叫eth0或enp*,WiFi接口叫wlan0或wlp*,记下来这两个接口名。
- 查看各接口的网关:
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.com、google.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




