Chiphell - 分享与交流用户体验

标题: 路由器自由?我把Linux服务器变成了路由器,支持IPv6 [打印本页]

作者: aitkots    时间: 2022-11-1 18:26
标题: 路由器自由?我把Linux服务器变成了路由器,支持IPv6
本帖最后由 aitkots 于 2022-11-1 19:47 编辑

经过里几天的折腾,在参考了如下文档之后,把一台 Ubuntu Server 22.10 变成了路由器。

(不要问为啥是 Ubuntu Server 22.10,问就是 dhcpcd 的包在其他发行版中版本太老还有 Bug ,而且能不 make Install 就不 make Install )  


  

基础功能和性能看上去并不比 RouterOS OpenWrt iKuai 相差多少。



参考文档

- CPU

Microcode - Debian Wiki
CPU Performance Scaling
CPU frequency scaling - Arch Wiki

- DHCP

dhcpcd | Roy's Projects
dhcpcd - ArchWiki
dhcpcd.conf(5) — Arch manual pages
dhcpcd(8) — Arch manual pages
Kea Administrator Reference Manual

- DNS

resolv.conf - Debian Wiki
openresolv - ArchWiki
dnsmasq - ArchWiki
dnsmasq warnings - Pi-hole documentation
[OpenWrt Wiki] DNS and DHCP configuration
Unbound - ArchWiki
SmartDNS · GitHub

- IPv6

IPv6 - ArchWiki
Dynamic Host Configuration Protocol for IPv6 (DHCPv6)
RFC4193 IPv6 Generator
Setting up IPv6 using a DHCP client - K3A
Setting up IPv6 on a Linux Router
Managing Address Spaces with NAT and IPv6 - Config Router

- Network Interface

Network bridge - Arch Wiki
systemd-networkd - Arch Wiki
Systemd.Network
Systemd.Link
BRIDGE-UTILS-INTERFACES(5) - Debian Wiki
Netplan configuration examples
Ubuntu Manpage: systemd.network
Bridge - Linux Foundation DokuWiki

- Nftables

nftables - Debian Wiki
nftables - ArchWiki
Firewall4 / NFtables Tips and Tricks

- PPPoE

ppp - ArchWiki
pppd(8) — Arch manual pages
PPP - Alpine Linux
Debian / pppoeconf · GitLab
add pppoe support to systemd-networkd · GitHub

- SYSCTL

sysctl - ArchWiki
sysctl - explorer
Huge improve network performance by change TCP congestion control to BBR
Optimizing TCP for high WAN throughput while preserving low latency

- Linux Router Setup

Router - ArchWiki
Linux Router with ** on a Raspberry Pi (IPv6) - Alpine Linux
debian-clearfog-gt-8k · GitHub
Setting up Alpine Linux as a Home Router
DIY Linux Router Part 2: Interfaces, DHCP and VLAN
我的另类软路由方案——Alpine Linux改造
X86 软路由配置 IPv6 踩坑小记
自建Linux路由器--Debian篇
使用 Debian 服务器作为家庭网关
Building Your Own Low Latency Home Router
作者: yoakam    时间: 2022-11-1 18:28
鸟哥的私房菜 实践能力很强么。
作者: aitkots    时间: 2022-11-1 18:29
yoakam 发表于 2022-11-1 18:28
鸟哥的私房菜 实践能力很强么。

早有耳闻鸟哥的Linux私房菜,但并未拜读。
作者: YsHaNg    时间: 2022-11-1 18:30
make Install有啥仇吗 都装usr/local/lib的还是很好的
作者: aitkots    时间: 2022-11-1 18:31
YsHaNg 发表于 2022-11-1 18:30
make Install有啥仇吗 都装usr/local/lib的还是很好的

我为了能完全自动更新,这样比较清真
作者: YsHaNg    时间: 2022-11-1 18:32
aitkots 发表于 2022-11-1 10:31
我为了能完全自动更新,这样比较清真

嗨 arch opensuse滚起来
作者: normanlu    时间: 2022-11-1 18:35
我是alpine linux搞得路由器,但是现在routeros出的v7版本,确实挺香的
作者: yoakam    时间: 2022-11-1 18:35
本帖最后由 yoakam 于 2022-11-1 19:38 编辑
aitkots 发表于 2022-11-1 18:29
早有耳闻鸟哥的Linux私房菜,但并未拜读。


刚工作时翻过几十页,太厚了。
这个都能搞,那pfsense基于FreeBSD应该也能玩转。
用Ubuntu当路由器太纯粹了,要是隔几个月没笔记的话出现异常我不知道该咋维护。
作者: yoakam    时间: 2022-11-1 18:41
天使您好,这帖子看起来是为了纪念注册10周年吧。
作者: 声色茶马    时间: 2022-11-1 18:43
本帖最后由 声色茶马 于 2022-11-1 18:45 编辑
YsHaNg 发表于 2022-11-1 18:30
make Install有啥仇吗 都装usr/local/lib的还是很好的


服务端的各种东西,大佬们一般都建议make install,而不是pacman apt啥的装。

不过LZ既然敢在Router这种东西上滚更,不用担心跪洗衣板机械键盘,想来生活还相当自由的。膜拜一下。

不过我个人要是搞,肯定还是在Arch或者gentoo上干。毕竟系统精简得多,干净卫生。
作者: AAGun    时间: 2022-11-1 18:52
楼主 10 周年快乐。赞动手能力不是一般的强
作者: YsHaNg    时间: 2022-11-1 18:52
声色茶马 发表于 2022-11-1 10:43
服务端的各种东西,大佬们一般都建议make install,而不是pacman apt啥的装。

不过LZ既然敢在Router这种 ...

是的 生产环境谁滚 现在都巴不得全docker里写死 部署完全一样的
作者: terryhux    时间: 2022-11-1 19:01
声色茶马 发表于 2022-11-1 18:43
服务端的各种东西,大佬们一般都建议make install,而不是pacman apt啥的装。

不过LZ既然敢在Router这种 ...

干了15年运维,刚出道两年时都编译安装,后来要求apt或yum安装,现在只用docker/k8s了
作者: 声色茶马    时间: 2022-11-1 19:15
YsHaNg 发表于 2022-11-1 18:52
是的 生产环境谁滚 现在都巴不得全docker里写死 部署完全一样的

配置环境太熬人太累了。如上面那位兄弟所言,不写笔记过一周就特么完全不记得自己干过啥了。

前两天想试试wayland,看能不能完全移植过去让X11彻底下岗,于是虚拟机搞了个arch+wayfire。结果我勒个去,被折腾个死去活来,然后决定转投garuda现成的发行版。转过去以后……继续死去活来。
作者: 声色茶马    时间: 2022-11-1 19:24
terryhux 发表于 2022-11-1 19:01
干了15年运维,刚出道两年时都编译安装,后来要求apt或yum安装,现在只用docker/k8s了 ...

我原来以为Linux“装软件10秒、配环境一年”这种风格得延续到宇宙终结了,没想到Docker和K8s这种神器终于憋了出来。现在感觉用Portainer部署个容器比win上装个服务还爽利,爽利多了,搞得现在Linux上装点儿啥第一反应都是去找个好用的docker。
作者: YsHaNg    时间: 2022-11-1 19:28
声色茶马 发表于 2022-11-1 11:15
配置环境太熬人太累了。如上面那位兄弟所言,不写笔记过一周就特么完全不记得自己干过啥了。

前两天想试 ...

Fcitx搞不好没法当个正经桌面用 总结还是ssh吧
作者: aitkots    时间: 2022-11-1 19:41
normanlu 发表于 2022-11-1 18:35
我是alpine linux搞得路由器,但是现在routeros出的v7版本,确实挺香的

RouterOS 我已经折腾完了
作者: aitkots    时间: 2022-11-1 19:42
YsHaNg 发表于 2022-11-1 18:32
嗨 arch opensuse滚起来

Arch 雀食不错,就是安装过程不太友好
作者: aitkots    时间: 2022-11-1 19:43
yoakam 发表于 2022-11-1 18:35
刚工作时翻过几十页,太厚了。
这个都能搞,那pfsense基于FreeBSD应该也能玩转。
用Ubuntu当路由器太纯粹 ...

其实,简单来说就是 设置网桥,配置防火墙,配置pppoe ,配置 dhcp dns,配置 ipv6,和一些简单的系统软件调整。
作者: aitkots    时间: 2022-11-1 19:45
AAGun 发表于 2022-11-1 18:52
楼主 10 周年快乐。赞动手能力不是一般的强

就是喜欢折腾咯
作者: aitkots    时间: 2022-11-1 19:51
normanlu 发表于 2022-11-1 18:35
我是alpine linux搞得路由器,但是现在routeros出的v7版本,确实挺香的

不过 RouterOS 的 IPv6 有不方便的地方,pppoe 拨号之后 IPv6 默认路由有问题。
作者: normanlu    时间: 2022-11-1 19:56
aitkots 发表于 2022-11-1 19:51
不过 RouterOS 的 IPv6 有不方便的地方,pppoe 拨号之后 IPv6 默认路由有问题。 ...

我倒是没发现问题嘛,上外网都正常。

你这里具体啥表现呢?
作者: terryhux    时间: 2022-11-1 20:04
声色茶马 发表于 2022-11-1 19:24
我原来以为Linux“装软件10秒、配环境一年”这种风格得延续到宇宙终结了,没想到Docker和K8s这种神器终于 ...

portainer用于docker图形界面管理确实好用,4年前还在用docker swarm的时候用过几次,界面不错,不过k8s已经开始转向containerd了,不知道portainer现在发展成什么样了
作者: YsHaNg    时间: 2022-11-1 20:09
terryhux 发表于 2022-11-1 12:04
portainer用于docker图形界面管理确实好用,4年前还在用docker swarm的时候用过几次,界面不错,不过k8s ...

Docker感觉并不需要什么图形界面 毕竟主要管理不在这 都是用k8s做资源分配 再加上docker需要sudo 现在主流都是只把docker当作oci标准 用kaniko之类的 至于图形界面完全可以用k9s lens
作者: terryhux    时间: 2022-11-1 20:55
YsHaNg 发表于 2022-11-1 20:09
Docker感觉并不需要什么图形界面 毕竟主要管理不在这 都是用k8s做资源分配 再加上docker需要sudo 现在主 ...

现在k8s管理大多就kubectl搞搞了,图形界面可有可无,有时候看日志方便点,rancher现在也挺不错的
作者: aitkots    时间: 2022-11-1 21:10
normanlu 发表于 2022-11-1 19:56
我倒是没发现问题嘛,上外网都正常。

你这里具体啥表现呢?

拨号后,通过dhcpv6 client给bridge1分配一个公网地址A(使用的前缀为a),这时候内网设备能拿到公网地址,这些都没问题。

当pppoe重新拨号时候,公网的前缀会发生变化,这时候bridge1的公网地址也将同步发生变化,假设拿到的公网地址是B(使用的前缀是b),内网设备此时也能拿到新的前缀b从而生成新的公网地址。

问题在于(可能是我设置有点问题哈),内网设备通过前缀a生成的公网地址并未过期(默认有效期3天)的情况下,又拿到了新前缀b,这时内网设备将有4个公网地址(新旧公网地址2固定地址2临时地址)。

而 RouterOS 并未在路由表中记录旧的公网地址的路由信息,也没有通过 ND 告知内网设备说之前的地址已经不可用 deprecated 。

就会让内网设备无法正确选择最新的公网地址进行通信。

表现形式就是ping不通ipv6网络了。
作者: normanlu    时间: 2022-11-1 21:42
aitkots 发表于 2022-11-1 21:10
拨号后,通过dhcpv6 client给bridge1分配一个公网地址A(使用的前缀为a),这时候内网设备能拿到公网地址 ...

刚才看了一下,确实有这个问题。
作者: smallfount    时间: 2022-11-1 21:55
我之前为了用Linux base的**工具然后能自动切换所以在内网起了BGP然后用Linux的FRR直接做了BGP Peering...
总体来说。。。其实还挺简单的哈哈
作者: YsHaNg    时间: 2022-11-2 00:32
terryhux 发表于 2022-11-1 12:55
现在k8s管理大多就kubectl搞搞了,图形界面可有可无,有时候看日志方便点,rancher现在也挺不错的 ...

觉得k9s很cool 不过不是devops平时接触不到
作者: aitkots    时间: 2022-11-2 01:02
normanlu 发表于 2022-11-1 21:42
刚才看了一下,确实有这个问题。

可能是个疑难杂症
作者: aitkots    时间: 2022-11-2 01:03
smallfount 发表于 2022-11-1 21:55
我之前为了用Linux base的**工具然后能自动切换所以在内网起了BGP然后用Linux的FRR直接做了BGP Peering...
...

你说的是我 RouterOS的那个问题么,我觉得用策略路由可能有解决方法,但是最近没时间尝试
作者: smallfount    时间: 2022-11-2 08:13
aitkots 发表于 2022-11-2 01:03
你说的是我 RouterOS的那个问题么,我觉得用策略路由可能有解决方法,但是最近没时间尝试 ...

应该不是把....
我起FRR纯粹是因为我想试试Linux上用到某些梯子工具而已。。。
后来感觉....我很何必。。
最后还是直接用浮动静态解决得了。。
作者: softz    时间: 2022-11-2 09:16
aitkots 发表于 2022-11-1 21:10
拨号后,通过dhcpv6 client给bridge1分配一个公网地址A(使用的前缀为a),这时候内网设备能拿到公网地址 ...

ros v7 目前暂时可以通过修改ND中的过期时间来解决该问题
作者: ksong    时间: 2022-11-2 09:51
我觉得应该用freebsd来做
作者: 豆豆那头熊    时间: 2022-11-2 10:40
希望我写的东西对你有所启发
作者: aitkots    时间: 2022-11-2 10:47
softz 发表于 2022-11-2 09:16
ros v7 目前暂时可以通过修改ND中的过期时间来解决该问题

你说的是这个地方么? 建议是多少啊?
(, 下载次数: 51)
作者: aitkots    时间: 2022-11-2 10:48
ksong 发表于 2022-11-2 09:51
我觉得应该用freebsd来做

感觉可以试试,毕竟 opnsense 和 pfsense 底层也是这个
作者: softz    时间: 2022-11-2 11:44
aitkots 发表于 2022-11-2 10:47
你说的是这个地方么? 建议是多少啊?

我是这么调整的,目前来看有效
Valid Lifetime  00:30:00
Preferred Lifetime 00:10:00
作者: aitkots    时间: 2022-11-2 13:49
softz 发表于 2022-11-2 11:44
我是这么调整的,目前来看有效
Valid Lifetime  00:30:00
Preferred Lifetime 00:10:00

  这么短啊。nice 我去试试
作者: normanlu    时间: 2022-11-2 15:53
我查了一下,现在是这么调整的,大家可以探讨一下。
其实这些都是临时方案,最终还是要出台新路由器ipv6的标准.
估计当初设计ipv6的时候,就没想到会有动态ipv6的问题,所有设备都应该会分配到固定的ipv6地址。

(, 下载次数: 60) (, 下载次数: 57)

参考:
https://superuser.com/questions/ ... v6-address-from-isp
https://datatracker.ietf.org/doc ... -renum-01#section-5

作者: liusimin    时间: 2022-11-4 01:28
建议可以拿debian搞,思路一样,效率更高,别问我怎么知道的
作者: goat    时间: 2022-11-4 01:59
最最最最早用centos,接下去转虚拟机+op。有时间折腾还好,真要忙起来谁还给自己后院除草。
玩这东西不是职业相关就是触手怪。
作者: aitkots    时间: 2022-11-5 14:04
liusimin 发表于 2022-11-4 01:28
建议可以拿debian搞,思路一样,效率更高,别问我怎么知道的

我本来也是准备拿Debian搞的,但是发现要用dhcpcd这个包,所以选择了Ubuntu,但是,没错又来了但是,最后发现可以不用dhcpcd。。。。
作者: aitkots    时间: 2022-11-5 14:04
goat 发表于 2022-11-4 01:59
最最最最早用centos,接下去转虚拟机+op。有时间折腾还好,真要忙起来谁还给自己后院除草。
玩这东西不是职 ...

干就是要自动化




欢迎光临 Chiphell - 分享与交流用户体验 (https://www.chiphell.com/) Powered by Discuz! X3.5