Debian 12 安装及配置软路由全记录
本次安装主要参考星野玲的文章《使用 Debian 作为路由器》,并在 ChatGPT 的指导下完成。博主使用 ARM 小主机,而我的主机是 X86 架构(Bosgame 双网口2.5G intel N100 小主机),虽然都安装了 Debian 系统,但因CPU架构差异导致我在安装过程中经历多次水土不服的情况,好在有 ChatGPT,最终一一克服这些困难,成功完成路由功能配置。
一、安装 Debian 系统
当前 Debian 最新版 12.9,在Debian官网下载好映像文件,使用 Ventoy 启动盘引导启动。一路点击【下一步】完成安装。在系统安装中遇到最大的问题是关于网卡的驱动适配。我的 X86 N100 小主机配备 RTL 8125B 2.5G 有线网卡,但 Debian 系统会自动适配安装 RTL8169 驱动,虽然能用,网速打折扣勉强达到千兆。我当然不甘心如此,于是自己手动重装驱动若干次,最终在ChatGPT指导下,一步步检测完成网卡驱动安装,实现网卡完整功能。
二、修改系统网络配置
通常情况下安装的 Linux 系统不具备路由功能,但 Linux 系统天生就是为网络而生的操作系统,网络功能强大无比,仅需要适当配置就可实现路由功能。唯一的问题是设置适配很复杂,对于小白来说基本是不可能完成任务。所以一边参考现成文章,一边咨询 ChatGPT ,我这个电脑业余水平的人也可以尝试一下。
1.配置远程SSH终端
参照博主文章,第一步首先配置路由器远程安全的 SSH 访问。这部分来说相对比较简单,创建存放密钥文件夹,写入密钥,编辑sshd配置文件,原则只有一个确保安全访问,避免 SSH 暴露在互联网遭受攻击,这里不再赘述。
2.设置网络
参照博主文章修改网络配置文件编辑 /etc/network/interfaces
,并在文件中写入如下内容:
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
auto enp1s0
allow-hotplug enp1s0
iface enp1s0 inet static
address 192.168.3.1/24
auto eth1
allow-hotplug eth1
iface eth1 inet dhcp
iface eth1 inet6 auto
启动网络运行出现错误,将错误信息及配置内容提交给 ChatGPT 检查,指出存在一个潜在问题:为 enp1s0
配置了两个接口定义,分别是:
iface enp1s0 inet dhcp
(用于 DHCP)iface enp1s0 inet auto
(重复配置)
ChatGPT 指出这可能会导致 ifup 命令出错,并使网络接口启动失败。修改如下后,重启网络服务后运行正常。这是我遇到第一个水土不服的情况。
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
auto enp2s0
allow-hotplug enp2s0
iface enp2s0 inet static
address 192.168.100.1/24
auto enp1s0
allow-hotplug enp1s0
iface enp1s0 inet dhcp
3.开启转发
编辑 /etc/sysctl.conf 文件。
sudo vim /etc/sysctl.conf
在 /etc/sysctl.conf
的末尾添加以下内容。
net.ipv4.ip_forward=1
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.default.forwarding=1
net.ipv6.conf.default.accept_ra=2
net.ipv6.conf.default.use_tempaddr=1
应用配置。
sudo sysctl -p
为了让配置生效,重启系统。
sudo reboot
重启之后 我的N100的 LAN 口的 IP 地址已经变成了 192.168.100.0/24
这个网段,将笔记本电脑IP地址设为 192.168.100.10,用RJ45网线连接到 N100 的 LAN 口,可以ping 通 192.168.100.1,远程 SSH 连接,说明配置生效。接下来为了更好适配路由功能,需要安装一些必要软件。
4.安装 docker 及 docker-compose
这里我没有使用博主文章中指令安装 Docker 和 Docker-compose,直接询问ChatGPT 给出指令。
#更新系统
sudo apt update && sudo apt upgrade -y
#安装必要依赖
sudo apt install -y ca-certificates curl gnupg
#添加Docker 官方 GPG 密钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo tee /etc/apt/keyrings/docker.asc > /dev/null
sudo chmod a+r /etc/apt/keyrings/docker.asc
#添加Docker 官方软件源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
#更新软件包索引并安装 Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
#启动并设置Docker 开机自启
sudo systemctl enable --now docker
#验证是否安装成功
docker --version
docker-compose --version
5.安装配置 Dnsmasq
我考虑要用可视化 docker 管理工具以后大量的 Docker 应用,所以先安装了 Portainer CE,然后按照文章的步骤建立了一个文件夹存放 Dnsmasq 配置文件。
mkdir -p ~/config/dnsmasq
vim ~/config/dnsmasq/dnsmasq.conf
写入以下内容。
interface=enp2s0
port=53
server=8.8.8.8
server=8.8.4.4
enable-ra
log-dhcp
dhcp-range=192.168.100.2,192.168.100.254,1h
# dhcp-range=::,constructor:enp2s0,ra-staeless,1h
dhcp-option=option:router,192.168.100.1
dhcp-option=option:dns-server,192.168.100.1
dhcp-option=option6:dns-server,[fe80::8647:9ff:fe46:ef85]
接着,在 Portainer 使用Stack 配置安装 Dnsmasq
version: "3"
services:
dnsmasq:
container_name: dnsmasq
cap_add:
- NET_ADMIN
image: jpillora/dnsmasq
network_mode: host
volumes:
- "/home/laaa/config/dnsmasq/dnsmasq.conf:/etc/dnsmasq.conf:ro"
restart: always
部署并启动容器, 这样实现 DNS 功能和 DHCP 服务,再次连接 N100 LAN 口可以自动获得 IP 地址。
6.安装 PPPoE 拨号
因为我的宽带网络是直接获取IP地址,无需 PPPoE 拨号,此部分无需安装。
7.开启 NAT 转换
使用 nftables 来开启 NAT 转换。
编辑 /etc/nftables.conf
文件。
在此之前,所有安装基本无困难通过,即便遇到问题,在ChatGPT帮助下也能很快解决。但是这里参照博主文章进行了nat 转换规则配置。配置后,网络不能正常,互联网访问也不正常,让 ChatGPT进行修改后,可以正常工作,路由功能也正常。但是有一个新的问题,每次服务器重启后,导致远程主机不能访问 Docker 端口,原因不明。ChatGPT 提出了无数个解决方案,我一一测试,均未能解决此问题。每次系统重启后,我的 docker 应用就不能访问,只有再执行 'sudo systemctl restart nftables' 重启网络服务后,方可正常访问。其实这样也没有多大问题,只是需要每次重启系统后再执行一次这条指令,但是心里有一点点不舒坦。
第二天,我干脆将配置 nftables 表清空,然后完全不参照博主设置,让 ChatGPT 给出一个配置 NAT 转换指令集,按照它给出步骤一步步重做,完成后测试一切正常,重启系统,也一切正常。困扰我数十个小时问题就这样解决了,具体过程附后。至此,所有网络适配完成。
后记
虽然我的小主机 N100 完整适配了路由功能,并可取代我目前使用的华硕路由器,但我并未实施。目前家中各类连网的智能化设备包括智能照明、监控摄像头、亚马逊Echo、智能插座、NAS 服务器以及各种手持设备,零零总总接近50个,更换一次网络实在太麻烦,太多的不确定性。折腾这个小主机路由功能的初衷只是练练手,学习一下计算机网络知识,仅此而已。
后来,我在这个小主机上安装了很多其他网络应用,包括目前这个个人网站也迁移到这个主机上了。鉴于这个小主机强悍的性能,我把 EMBY 影视服务器也迁移过来运行,考虑到用户端需要重新适配,目前采用双系统双运行模式,暂未迁移客户,条件成熟只需要简单适配就可迁移过来。那么原来安装于 群晖NAS 系统上的 Emby 服务端就可以下线卸载了,让NAS专心于NAS的事务。
附:全新配置 nftables
对 ChatGPT 提出需求如下。
现在配置 nftables,将 enp1s0 设置为 WAN 接口,enp2s0 设置为 LAN 接口。
ChatGPT 提供指令及步骤。
步骤1: 创建 NAT 表和设置规则: 先创建 nftables 的 NAT 表,然后设置链。
sudo nft add table ip nat
配置 NAT 转发规则: 你需要配置 POSTROUTING 链,进行 NAT 转换,使 LAN 网络能够访问外网:
sudo nft add chain ip nat POSTROUTING { type nat hook postrouting priority 100 \; }
步骤2: 配置 NAT 转换规则(将 LAN 流量转换为 WAN 地址): 使用 masquerade 对 LAN 网络进行地址伪装,使其能够通过 WAN 接口访问外网。
sudo nft add rule ip nat POSTROUTING oifname "enp1s0" masquerade
这条规则的意思是:如果数据包的输出接口为 enp1s0(WAN 接口),则进行地址伪装。 步骤 3:设置过滤规则(可选)
如果你还需要配置防火墙规则,可以添加基本的过滤规则以控制哪些流量可以进出。
例如,允许 LAN 访问外网,禁止其他流量:
sudo nft add chain ip filter forward { type filter hook forward priority 0 \; }
sudo nft add rule ip filter forward iifname "enp2s0" oifname "enp1s0" accept
sudo nft add rule ip filter forward iifname "enp1s0" oifname "enp2s0" accept
步骤 4:保存配置
保存 nftables 配置,确保系统重启后仍然有效:
sudo nft list ruleset > /etc/nftables.conf
然后,确保 nftables 在启动时自动加载该配置:
sudo systemctl enable nftables