基本信息
环境:Ubuntu22.04,已安装docker,所有操作在root权限下运行;
网络拓扑:上级网络(光猫)->主机@enp1s0做wan口->主机@enp2s0做lan口->有线中继WiFi等局域网设备。
软路由基本配置
配置网卡启用桥接网络
1
|
apt install bridge-utils
|
使用netplan工具配置网卡,将 enp1s0作为wan口连接上级网络,enp2s0作为lan口连接局域网设备,在 enp2s0上建立桥接网络以将局域网与上级网络连接:
1
|
vim /etc/netplan/00-installer-config.yaml
|
依据网络环境修改并添加以下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
network:
ethernets:
enp1s0:
dhcp4: no # 配置静态ip上网,也可设置为true以使用上级网络dhcp配置网络,使用dhcp时下列配置均不需要
addresses:
- 192.168.1.100/24
routes:
- to: default
via: 192.168.1.1
metric: 100
on-link: true
nameservers:
addresses:
- 192.168.99.2 # 后续在桥接网络上配置dns服务,也可先设置为公共dns
enp2s0:
dhcp4: no
bridges: # 建立桥接网络将局域网设备接入上层网络,其中99可更改为任意网段
br0:
dhcp4: no
addresses:
- 192.168.99.2/24
nameservers:
addresses:
- 192.168.99.2
interfaces:
- enp2s0
version: 2
renderer: NetworkManager
|
应用配置并查看信息:
1
2
3
|
netplan apply
brctl show
|
桥接网络配置应包含类似以下信息:
1
2
|
bridge name bridge id STP enabled interfaces
br0 8000.6aa01d4c1f71 no enp2s0
|
配置DNS服务器
本文使用adguardhome提供dns服务,dnsmasq、smartdns、mosdns等均可。
调整 systemd-resolved 服务
首先调整Ubuntu自带DNS Resolve服务器:
1
2
3
4
|
# vim /etc/systemd/resolved.conf
DNS=192.168.99.2 # 修改为br0接口地址
DNSStubListener=no # 关闭dns服务以取消端口占用
|
随后重启 systemd-resolved服务以取消dns端口占用:
1
2
3
|
systemctl restart systemd-resolved
systemctl stop systemd-resolved # 可选,防止systemd-resolved影响后续配置
systemctl disable systemd-resolved --now # 可选,防止systemd-resolved影响后续配置
|
检查 /etc/resolv.conf内的 nameserver是否为 192.168.99.2,使用 lsof指令检查53端口占用情况:
1
2
|
apt install lsof
lsof -i :53
|
lsof输出应没有任何内容,若存在 systemd-resolved服务则需要重试。
安装配置 AdguardHome
使用docker以host网络模式运行 AdguardHome,其中 /mydir/adguardhome/目录位置可自行调整:
1
2
3
4
5
6
7
|
docker run -itd \
--name adguardhome \
--network host \
-v /mydir/adguardhome/work:/opt/adguardhome/work \
-v /mydir/adguardhome/conf:/opt/adguardhome/conf \
--restart=always \
adguard/adguardhome
|
访问ip+端口号(3000),进入网页配置,修改网页管理端口(80可提供其他服务),配置监听 br0:192.168.99.2地址,配置DNS上游服务器,选择合适的广告屏蔽器。
配置完成后,使用 lsof检查,应有快速输出(若输出缓慢可能存在dns配置问题),类似以下信息:
1
2
3
4
5
|
lsof -i :53
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
AdGuardHo 92446 root 10u IPv4 1906252 0t0 UDP 192.168.99.2:domain
AdGuardHo 92446 root 11u IPv4 1906253 0t0 TCP 192.168.99.2:domain (LISTEN)
|
配置DHCP服务器
本文使用 isc-dhcp-server作为dhcp服务器,使用dnsmasq或其他服务均可。
1
|
apt install isc-dhcp-server
|
修改DHCP接口:
1
2
3
4
|
# vim /etc/default/isc-dhcp-server # 修改接口为br0
INTERFACESv4="br0"
INTERFACESv6="br0"
|
配置子网:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# vim /etc/dhcp/dhcpd.conf
default-lease-time 21600; # 延长租约时间到6小时
max-lease-time 86400;
ddns-update-style none;
authoritative; # 启用权威dhcp服务器
# 配置DHCP子网
subnet 192.168.99.0 netmask 255.255.255.0 {
range 192.168.99.10 192.168.99.240;
option domain-name-servers 192.168.99.2;
option subnet-mask 255.255.255.0;
option routers 192.168.99.2;
}
|
重启DHCP服务:
1
2
|
systemctl restart isc-dhcp-server
systemctl status isc-dhcp-server # 查看是否正确运行
|
在 enp2s0上连接设备以测试DHCP与DNS服务是否正常,检查是否可正确获取ip地址、网关地址、dns服务器。
转发与路由配置
配置主机转发能力:
1
2
3
4
|
# vim /etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
|
应用配置:
1
|
sysctl -p /etc/sysctl.conf
|
使用 iptables启用路由能力,以下指令非持久化,每次重启主机需重新执行:
1
2
3
|
iptables -A FORWARD -s 192.168.0.0/16 -j ACCEPT # 局域网,可依据自身环境修改为10.0.0.0/24等
iptables -A FORWARD -s 172.16.0.0/12 -j ACCEPT # docker网络
iptables -t nat -A POSTROUTING -j MASQUERADE # 应用nat伪装源ip地址
|
持久化示例(iptables-persistent):
iptables-persistent 会在重启后自动加载 iptables 规则。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 安装并设置自启动,安装过程会提示是否保存 ipv4 规则和 ipv6 规则。
apt install iptables-persistent && systemctl enable netfilter-persistent
# 添加规则
iptables -A FORWARD -s 192.168.0.0/16 -j ACCEPT # 局域网,可依据自身环境修改为10.0.0.0/24等
iptables -A FORWARD -s 172.16.0.0/12 -j ACCEPT # docker网络
iptables -t nat -A POSTROUTING -j MASQUERADE # 应用nat伪装源ip地址
# 保存 ipv4 规则
iptables-save > /etc/iptables/rules.v4
# 保存 ipv6 规则
ip6tables-save > /etc/iptables/rules.v6
# 上述两条指令可通过在.bashrc文件内配置alias快速操作
|
保存后可以重启,使用 iptables -L 命令查看刚刚添加的规则是否还在。
若使用 ufw,应用以下规则:
1
2
3
|
ufw allow from 172.16.0.0/12 # docker的桥接网络地址
ufw allow from 192.168.0.0/16 # 局域网
ufw reload
|
至此,软路由基本配置完成,主机可作为一个普通的路由器使用。
基于 v2rayA 配置透明代理访问ChatGPT
参考官网安装并启动 v2rayA,其中 apt安装流程如下:
1
2
3
4
5
6
7
8
9
10
|
wget -qO - https://apt.v2raya.org/key/public-key.asc | sudo tee /etc/apt/keyrings/v2raya.asc # 添加公钥
echo "deb [signed-by=/etc/apt/keyrings/v2raya.asc] https://apt.v2raya.org/ v2raya main" | sudo tee /etc/apt/sources.list.d/v2raya.list # 添加软件源
sudo apt update
sudo apt install v2raya v2ray # 也可以使用 xray 包
sudo systemctl start v2raya.service # 启动v2rayA
sudo systemctl enable v2raya.service # 设置开机自启动
|
连接到 http://192.168.99.2:2017(不能访问则检查防火墙开放端口),配置管理员账号与密码
v2rayA 配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
透明代理/系统代理
启用: 分流规则与规则端口所选模式一致
开启IP转发
开启端口分享
透明代理/系统代理实现方式
redirect
规则端口的分流模式
RoutingA
防止DNS污染
关闭
特殊模式
supervisor
TCPFastOpen
保持系统默认
|
一份简单的 RoutingA 配置,更多配置方法可参考官网:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#常用学术网站
domain(aliyundrive.com, mail.qq.com, ntia.gov, nist.gov, ieee.org, acm.org)->direct
domain(geosite:category-scholar-cn)->direct
domain(geosite:google-scholar, geosite:category-scholar-!cn)->proxy
#AI网站
domain(bing.com, claude.ai, bard.google.com, poe.com, bingapis.com, copilot.microsoft.com, anthropic.com, generativelanguage.googleapis.com)->proxy
domain(chat.openai.com.cdn.cloudflare.net, openaiapi-site.azureedge.net, z01.azurefd.net, blob.core.windows.net, production-openaicom-storage.azureedge.net)->proxy
domain(chatgpt-async-webps-prod-eastus-0.webpubsub.azure.com, cdn.oaistatic.com,ab.chatgpt.com,oneocsp.microsoft.com)->proxy
domain(geosite:openai)->proxy
# 按地区划分
ip(geoip:hk,geoip:mo)->proxy
domain(geosite:cn)->direct
domain(geosite:geolocation-!cn)->proxy
ip(geoip:private, geoip:cn)->direct
default: proxy
|
参考
软路由系列–路由器系统-Ubuntu
[v2RayA]RoutingA自定义分流
iptables 两种持久化方式 - centos 和 ubuntu 下 iptables 的持久化