gladys 发表于 2022-9-24 03:07

Ubuntu 软路由全套折腾指南(持续更新)

本帖最后由 gladys 于 2023-3-23 23:12 编辑

目录
1. 写在前面


2. 选择Ubuntu作为路由器的理由


3. 设置方法及注意事项
3.1 固定网卡名称
3.2 网卡/网桥的基本配置
3.3 PPPoE配置
3.4 DNS配置
3.5 DHCP配置
3.6 路由功能配置
3.7 IPv6适配


4. 自用路由功能管理工具(待补充)
4.1 基础路由功能
4.2 双上游健康度检查及故障秒级切换
4.3 基于MAC地址的端主机访问控制
4.4 基于动态NAT的IPv6适配


5. 功能和性能评估(待补充)
5.1 主备上游故障转移与恢复
5.2 IPv6适配情况
5.3 访问外网测速
5.4 内网设备间互联测速


6. 写在最后
7. 网关折腾过的其它有趣的东西(待补充)
7.1 自用防火墙管理工具
7.2 NTP服务器
7.3 透明代理
7.4 内网穿透/内网Web服务管理
7.5 基于EC20模块的短信网关/4G上网实现
7.6 自用消息推送服务
7.7 DNS分流
7.8 SSH配置优化
7.9 DDNS
7.10 系统配置sysctl优化
7.11 更换xanmod内核
7.12 Aria2安装与基于RSS的资源自动下载



8 附件

1. 写在前面

折腾过不少路由系统,从一开始的老毛子,到后来的各家定制固件,再到官方固件、自己编译固件,发现可玩性都不够高。还好自己有一点点折腾服务器的经验,于是干脆一步到位,使用自己常用的Linux发行版Ubuntu作为底层系统,通过非侵入、最小化修改的方式实现一套路由器解决方案
整理的内容可能有疏漏,欢迎大家交流补充,在此提前谢各位大佬轻喷之恩。


2. 选择Ubuntu作为路由器的理由
本节内容可能引起您的不适,请谨慎阅读。

2.1 足够稳定可靠,性能不差
目前自己使用过的x86软路由,从J1900开始,到现在的J4125,性能都严重过剩,跑个Ubuntu服务器版,顺带跑个千兆网络乃至2.5G都没有一点问题。Ubuntu作为使用较为广泛的Linux发行版,除了预装些私货以外,在几年VPS的使用经历来看没有什么大问题,运行比较稳定。

2.2 配置管理标准化
这个需求可能有的人没法理解。自己手里很多服务器,包括虚拟或者实体的都以Debian系为主,很多系统和软件配置,也都是依据Debian系的系统和软件进行编写维护的。使用完全不同的Linux发行版不利于配置的精细化管理和重用,尤其是需要配置的软件超过20个、配置文件数量超过100项以后。目前个人的配置文件不得不使用git进行仓库化和版本管理,并通过自己写的配置管理工具进行配置项的同步分发。
举个简单的例子。在我用OpenWRT的时候,OpenWRT的系统服务还是采用init.d,而Debian系的服务配置全部使用systemd。这就意味着就服务配置文件一项而言,就需要多维护20个适用于init.d的系统服务配置文件用于适配OpenWRT,且对应的配置管理工具需要增加逻辑以适配OpenWRT,无疑大大增加了工作量。然而这只是一项,还有例如OpenSSH与DropBox,opkg与dpkg等许多例子。如此种种让配置管理维护成本激增,于是最终决定将网关系统也改为Debian系的操作系统。
通过操作系统的统一,路由器就可作为具有路由功能的服务器所对待,无需针对不同操作系统进行配置的适配,大大降低配置的创建、分发和维护成本。其他服务器上运行良好的服务也可以最少的改动移植到路由器中。

2.3 可定制性高
有的人用OpenWRT可能只是习惯在UI上点点点,觉得每次系统重置就重新点一遍就行了,大不了再记一下笔记。有的人可能稍微有心一些,定期把配置下载备份。然而这些是建立在对程序深度定制没要求的用户,但凡需求高一些的用户,这些方法都是行不通的。
一个很明显的例子,开发者提供的很多默认配置选项或功能存在各种问题,要么存在缺陷、或是不符合自己的要求,或是和其它程序存在冲突的情况。例如同时对iptables修改出现冲突的问题,三年前我用OpenClash的时候,它搞崩OpenWRT的iptables导致没法上网的情况我已经数不清了。要么放弃OpenClash,要么就要自己动手丰衣足食。当然,这也不全是OpenClash的锅,因为作者也不知道用户到底在用什么可能与OpenClash不兼容的程序。
假设你决定继续用OpenClash,那么只能尝试修改OpenClash的某些默认配置(例如其内置的一些运行脚本),以保证它的运行同你现在使用的程序兼容。如果你运气好,发现了OpenClash的问题,添加了相关逻辑修复了问题,然后希望给作者发个PR。结果作者可能会拒绝掉,理由是这个情况太小众。但对你不是啊,因为和它冲突的软件虽然大家不用,但你用的非常频繁。那OpenClash还要自动更新吗?如果要的话,你的修改可能会被覆盖掉;否则,没法及时获得最新的bug修复,可能会出现其他问题,而且手动更新也很麻烦。那只有自己在每次自动更新以后覆盖patch了。也许一两个程序、一两个文件的patch手动还能解决,但是如果patch文件太多呢?如果几个,甚至十几个软件都要这样呢?问题就很大了。


3. 设置方法及注意事项

3.1 固定网卡名称
3.1.1 设置方法
1)      将配置文件(custom-devices.rules)放置于/etc/udev/rules.d/目录下;
2)      ATTR{address}后面的MAC地址修改为自己设备对应的网卡MAC地址(可通过ifconfig -a命令获得)‘’
3)      对应的NAME后面修改为自己喜欢的网卡别名;
4)      配置文件示例在下面给出。

# Located in /etc/udev/rules.d/custom-devices.rules
# Network Interface Card
# 格式:SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="(替换为MAC地址)", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME="(替换的网卡名称)"
# 举例:将MAC地址为 11:22:33:44:55:66:77 的网卡名称改为 eth1,每行设置一个网卡
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="11:22:33:44:55:66:77", ATTR{dev_id}=="0x0", ATTR{type}=="1", NAME="eth1"
3.1.2 补充说明
之前手里有一台3965U,安装系统后6个网卡的名称出现了enp*s0和eth*混用的情况,因此通过udev将所有网卡统一名称。非必需步骤,强迫症患者福音。

3.2 网卡/网桥的基本配置
3.2.1 设置方法
1)      检查当前系统下是否存在/etc/netplan/目录。若无,需运行命令apt install -y netplan.io安装netplan;
2)      将配置文件(00-installer-config.yaml.yaml)放置于/etc/netplan/目录下,若有同名文件,替换之;
3)      需要使用的网卡及名称根据实际情况进行替换,具体替换的方式通过配置文件内注释的方式予以说明;
4)      配置文件示例在下面给出。

# Located in /etc/netplan/00-installer-config.yaml
# To config network interfaces
# Run "sudo netplan generate && sudo netplan apply" after editing

network:
version: 2
renderer: networkd
ethernets:
    enp1s0: # 网卡enp1s0,作为LAN使用
      dhcp4: false # 禁用DHCPv4
      dhcp6: false # 禁用DHCPv6
      optional: true # 设置为非必须,防止Ubuntu的网络检查造成系统启动延迟
    enp2s0: # 网卡enp2s0,作为LAN使用,配置同网卡enp1s0一致
      dhcp4: false
      dhcp6: false
      optional: true
    enp4s0: # 网卡enp4s0,作为WAN使用
      dhcp4: true # 启用DHCPv4
      dhcp6: true # 启用DHCPv6
      optional: true # 设置为非必须,防止Ubuntu的网络检查造成系统启动延迟
      accept-ra: true # 接受Router Advertisement,IPv6适配相关的配置
bridges:
    br_lan: # 将网卡enp1s0和网卡enp2s0组成网桥,网桥名称为br_lan
      interfaces: # 包含的所有网卡名称
      - "enp1s0"
      - "enp2s0"
      addresses: # 固定网卡所拥有的内网IP地址段
      - 192.168.2.1/24
      - fc00:192:168:2::1/64
      dhcp4: false # 禁用DHCPv4
      dhcp6: false # 禁用DHCPv6
      nameservers: # 设置默认DNS服务器,非必须
      addresses:
          - 223.5.5.5
          - 119.29.29.29
          # - "2400:3200::1"
      parameters:
      stp: true # 启用生成树协议,防止环路
      forward-delay: 4
      optional: true # 设置为非必须,防止Ubuntu的网络检查造成系统启动延迟

3.2.2 补充说明
这里使用netplan进行网卡配置,其通过yaml承载配置信息,清晰易读。一般而言,netplan会预装至Ubuntu系统中;否则可通过命令apt install -y netplan.io安装(需联网)。netplan配置文件放置于/etc/netplan/中,一般只需要替换默认的00-installer-config.yaml即可。本节所给出的netplan的配置示例中,底层的网络配置渲染器可采用Systemd-networkd(networkd),也可采用NetworkManager,具体可参考netplan的使用手册。示例配置中的其它内容将通过注释的形式予以说明。
需要注意的是,该配置作为路由器的基础配置,绝对不能出现错误,否则将可能无法通过SSH连接至路由器中。配置完成后通过命令:sudo netplan generate && sudo netplan apply生成与应用网络配置。
当该配置完成后,你的路由器就具备了基础的网络功能。只要安装了SSH,就可以在其他设备上对路由器进行操作,而不需要连接键盘和显示器至路由器中。SSH的配置优化将在第7节予以介绍。


3.3 PPPoE配置
3.3.1 设置方法
1)      通过运行命令apt install -y ppp以安装ppp;
2)      将配置文件(pppoe_dial)放置于/etc/ppp/peers目录下;
3)      配置文件中,user "******"和password "******"改成你的PPPoE上网账号和密码;
4)      将对应的系统服务配置文件pppoe_dial.service放置于/etc/systemd/system中;
5)      运行systemctl daemon-reload以注册服务;
6)      运行systemctl enable pppoe_dial即令服务开机启动(自动拨号);
7)      运行systemctl start pppoe_dial立即拨号


# Located in /etc/ppp/peers/pppoe_dial
# Print debug info
#debug
logfile /var/log/pppoe_dial/run.log

# interface name
ifname pppoe_dial # 虚拟网卡名称设置为pppoe_dial

# Keep pppd in terminal
nodetach

# Set default route
defaultroute

# Do not set PPP compression
ipcp-accept-local
ipcp-accept-remote
local

# Set PPPoE used interface
plugin pppoe.so enp4s0 # PPPoE使用的实际网卡名称
# Username & password
user "******" # 你的上网用户名
password "******" # 你的上网密码
noauth
# Hide password when print connect info
hide-password

# 启用IPv6
# Use IPv6
+ipv6
ipv6cp-use-ipaddr
ipv6cp-accept-local
ipv6cp-accept-remote
ipv6cp-max-failure 100
ipv6cp-restart 2

# Set default route v6
defaultroute6

usepeerdns

# Conn check
lcp-echo-interval 60 # Ping sending interval
lcp-echo-failure 10 # Times of ping failure tolerance

# Reconnect
persist
maxfail 10
holdoff 1

# PPPoE compliant settings.
noaccomp
default-asyncmap
mtu 1452

# Located in /etc/systemd/system/pppoe_dial.service

Description=PPPoE auto dial
After=systemd-networkd.service
StartLimitBurst=5
StartLimitIntervalSec=120


User=root
ExecStartPre=-/bin/sh -ec '\
    /usr/bin/mkdir -p /var/log/pppoe_dial'
ExecStart=pppd call pppoe_dial
ExecStop=poff pppoe_dial
Restart=always
RestartSec=10s


WantedBy=multi-user.target

3.3.2 补充说明
如果上网环境为PPPoE上网,那么需要进行这一步配置;如果你的上网环境为DHCP,那么当插上网线至WAN口时即可正常上网,无需进行这一步配置。


3.4 DNS配置
3.4.1 配置示例
# SmartDNS config
bind-tcp [::]:53

# 注意,当网卡上有多个IP地址时,绑定UDP套接字需要明确IP,否则仅网卡第一个IP生效(已作废)

3.4.2 补充说明
这里采用SmartDNS接管设备全局DNS。这里仅给出SmartDNS的配置示例(smartdns.conf),不给出具体的安装方法。你可以使用自己喜欢的方式安装SmartDNS,例如在https://github.com/pymumu/smartdns中使用作者所推荐的标准Linux系统的安装方式。关于程序手动安装与管理的方式,将在第7节中予以简要介绍。另外,关于SmartDNS配置的资料也较为丰富,你也可以使用一些其他网友提供的配置文件。
安装完成后,需要将本机DNS解析指向SmartDNS,你可以使用resolvconf进行设置。这里提供一个取巧的方法:使用root删除/etc/resolv.conf,重新新建该文件、修改内容(例如:nameserver 127.0.0.1)并保存,之后通过chattr +i /etc/resolv.conf命令使其成为不可修改文件。后续只要保证SmartDNS监听套接字不变(UDP 127.0.0.1:53)即可保证设备DNS服务正常运行。
需要提醒的是,这里SmartDNS作为基础的上游DNS服务,稳定可靠是第一要求。因此不推荐配置过于复杂的分流策略,建议仅配置可靠的上游以实现IP优选、解析加密等基本需求即可。复杂的功能可交给更为功能更丰富的DNS工具实现,例如mosdns等。
注意,若使用SmartDNS接管系统DNS解析,需禁用系统自带的systmed-resolved,具体方法为:
运行命令 sudo systemctl stop systemd-resolved && sudo systemctl disable systemd-resolved


3.5 DHCP配置
3.5.1 设置方法
1)      运行命令apt install -y dnsmasq以安装dnsmasq;
2)      将配置文件(dhcp.conf)放置于/etc/dnsmasq.d目录下;
3)      内网IPv4和IPv6网段配置可根据实际需要修改,具体参考配置文件示例中的注释说明;
4)      配置文件示例在下面给出。

# located in /etc/dnsmasq.d/dhcp.conf
# Set the interface on which dnsmasq operates.
# If not set, all the interfaces is used.
interface=br_lan

# To disable dnsmasq's DNS server functionality.
port=0

# To enable dnsmasq's DHCP server functionality.
# 设置可分配的IPv4段为192.168.2.1/24,其中192.168.2.100 ~ 192.168.2.254用于随机分配,其余IP用于静态分配
dhcp-range=192.168.2.100,192.168.2.254,255.255.255.0,24h
# Set gateway as Router.
dhcp-option=3,192.168.2.1
# Set DNS server as Router.
dhcp-option=6,192.168.2.1
# Set NTP server as Router
dhcp-option=42,192.168.2.1

# DHCPv6 config
# 设置有状态分配的IPv6地址段为fc00:192:168:2::1/120,同IPv4保持一致
dhcp-range=fc00:192:168:2::1,fc00:192:168:2::ff,24h
# 设置无状态分配的IPv6地址段为fc00:192:168:2::1/64,兼容大部分情况
dhcp-range=fc00:192:168:2::,slaac
dhcp-option=option6:dns-server,
dhcp-option=option6:ntp-server,
enable-ra
dhcp-authoritative

# Set static IPs of other PCs and the Router.
# 指定静态IP示例:
dhcp-host=00:11:22:33:44:55,ESXi,192.168.2.2,,infinite

# Logging.
log-facility=/var/log/dnsmasq/dnsmasq.log   # logfile path.
log-async=25
log-queries # log queries.
log-dhcp    # log dhcp related messages.
3.5.2 补充说明
这一步的目的在于实现路由器向局域网内设备下发IP地址的功能,包括网关、DNS服务器、IP范围、NTP服务器、静态IP等的设置。

3.6 路由功能配置
3.6.1 设置方法
1)      将配置文件(99-forward.conf)放置于/etc/sysctl.d目录下;
2)      运行命令sysctl -p /etc/sysctl.d/99-forward.conf,以启用路由器的转发功能;
3)      将配置文件(99-custom-modules.conf)放置于/etc/modules-load.d/目录下,
4)      运行命令insmod nf_conntrack,以启用链接跟踪模块;
5)      运行命令apt install -y iptables-persistent,安装防火墙配置持久化程序;
6)      运行firewall-set.sh中的命令以设置防火墙NAT转发,需以root身份运行该脚本;
7)      运行netfilter-persistent save以持久化步骤6)中所设置的防火墙命令;
8)      上文中所提到的所有配置文件示例均在下面给出。

# Located in /etc/sysctl.d/99-forward.conf
net.ipv4.ip_forward=1
net.ipv4.conf.all.forwarding=1
net.ipv4.conf.default.forwarding=1
net.ipv4.conf.all.route_localnet=1

net.ipv6.conf.all.forwarding=1
net.ipv6.conf.default.forwarding=1

# Located in /etc/modules-load.d/custom-modules.conf
nf_conntrack

#!/bin/bash
# firewall-set.sh

# 根据你的WAN网卡名称对应修改!!!
WAN_NAME='pppoe_dial'

# IPv4设置
iptables -t nat -N mt_rtr_4_n_rtr
iptables -t nat -A POSTROUTING -j mt_rtr_4_n_rtr
iptables -t nat -A mt_rtr_4_n_rtr -o ${WAN_NAME} -j MASQUERADE # 添加路由到作为WAN的网卡的自动源地址转换规则

# 添加IPv4转发优化规则
iptables -t mangle -N mt_rtr_4_m_rtr
iptables -t mangle -A FORWARD -j mt_rtr_4_m_rtr
iptables -t mangle -A mt_rtr_4_m_rtr -o ${WAN_NAME} -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu # 针对PPPoE链接的优化
iptables -t mangle -A mt_rtr_4_m_rtr -m state --state RELATED,ESTABLISHED -j ACCEPT # 允许已建立连接的数据包直接通过
iptables -t mangle -A mt_rtr_4_m_rtr -m conntrack --ctstate INVALID -j DROP
iptables -t mangle -A mt_rtr_4_m_rtr -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
iptables -t mangle -A mt_rtr_4_m_rtr -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
iptables -t mangle -A mt_rtr_4_m_rtr -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
iptables -t mangle -A mt_rtr_4_m_rtr -i br_lan -o ${WAN_NAME} -j ACCEPT

# IPv6 NAT设置,与IPv4基本一致
ip6tables -t nat -N mt_rtr_6_n_rtr
ip6tables -t nat -A POSTROUTING -j mt_rtr_6_n_rtr
ip6tables -t nat -A mt_rtr_6_n_rtr -o ${WAN_NAME} -j MASQUERADE # 添加路由到作为WAN的网卡的自动源地址转换规则

# 添加IPv6转发优化规则
ip6tables -t mangle -N mt_rtr_6_m_rtr
ip6tables -t mangle -A FORWARD -j mt_rtr_6_m_rtr
ip6tables -t mangle -A mt_rtr_6_m_rtr -o ${WAN_NAME} -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
ip6tables -t mangle -A mt_rtr_6_m_rtr -m state --state RELATED,ESTABLISHED -j ACCEPT
ip6tables -t mangle -A mt_rtr_6_m_rtr -m conntrack --ctstate INVALID -j DROP
ip6tables -t mangle -A mt_rtr_6_m_rtr -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
ip6tables -t mangle -A mt_rtr_6_m_rtr -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
ip6tables -t mangle -A mt_rtr_6_m_rtr -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
ip6tables -t mangle -A mt_rtr_6_m_rtr -i br_lan -o ${WAN_NAME} -j ACCEPT
3.6.2 补充说明
这里对路由的基本知识进行简要的介绍,以帮助读者理解每项防火墙配置的目的,不想看可以跳过此部分。基本知识介绍的内容纯靠回忆手敲,可能有些许错误,还望大神们轻喷。
路由动作究其根本,就是路由器从一个端口接收到数据包后,决定数据包应当转发至的端口过程。与交换动作不同,路由的转发动作的决定依据是路由表。系统内核网络栈通过将数据包的IP地址与路由表中IP段进行匹配(最长前缀匹配)以查找到最适合的路由表表项,进而决定数据包的转发出口。因此,路由表的配置是必须的,否则网络内设备无法通外网通信。而Ubuntu默认不开启路由转发功能,因此需通过sysctl开启系统的路由转发功能。
其次,路由器还有一个重要的功能:网络地址转换(NAT)。面对公网IP地址枯竭的问题,我们使用NAT技术以实现IP地址的有效利用。NAT一般分为三种:静态NAT、动态NAT和端口多路复用(PAT)。而我们常说的NAT1~4均为PAT。
对于由iptables所实现的NAT来说,比较重要的概念有两项:SNAT和DNAT。SNAT的含义为“源地址转换”,指的是内网发出的、源地址为保留IP的数据包在路由匹配完成并进入网卡A时,将源地址替换为对应网卡A上的一个外部IP地址(不一定是公网IP,想想看什么是NAT444);这样就实现了仅有保留IP同公网IP之间的通信。其中较为特殊的MASQUERADE功能含义在于,源IP地址(内网保留地址)所要被替换的外部IP地址由系统自动选择。DNAT为“目的地址转换”,其作用在于实现外网对不具有公网IP的内部设备的访问。在开放内部服务时较为有用,而不是本文所述路由器所必需的配置,故此处不做展开说明。

3.7 IPv6适配
如果以上的配置全部成功,你的路由器下的设备应该能通过NAT(PAT)的方式连接IPv6网络。如果你希望每个设备都有一个独立的IPv6地址,可通过dhcp6c与dnsmasq配合即可实现IPv6地址的分配。这里不详细展开说明的原因在于,本人采用了动态NAT的思路实现IPv6地址的分配,具体将在第4节进行介绍。
这里推荐一篇文章:https://github.com/torhve/blag/b ... smasq-for-dhcpv6.md。英文写的,但用翻译工具翻译后阅读也不会有障碍。它介绍了使用dhcp6c与dnsmasq配合实现IPv6地址下发的配置方式,仅供参考。


4. 自用路由功能管理工具(待补充)
在上文3.6节所述的防火墙设置虽然可以保证路由功能正常,但在实际的使用环境中肯定是不方便的,因此本人写了个小工具用来自动完成防火墙设置。具体包括四个基本功能,将在下文进行详细介绍。这个工具目前仅个人在使用,可能还会有很多bug,不太推荐大家用(如果有不介意的可以试一试,后续会放出来)
4.1 基础路由功能
4.2 双上游健康度检查及故障秒级切换
4.3 基于MAC地址的端主机访问控制
4.4 基于动态NAT的IPv6适配

5. 功能和性能评估(待补充)
5.1 主备上游故障转移与恢复
5.2 IPv6适配情况
5.3 访问外网测速
5.4 内网设备间互联测速

6. 写在最后
本文作为长久以来基于Ubuntu的路由器折腾记录的总结,希望能为有相关需求或部分需求的用户提供一点小小的参考。后续将视情况更新一些在Ubuntu路由器上折腾过的小东西。

7. 网关折腾过的其它有趣的东西(待补充)

7.1 自用防火墙管理工具
这是自己数年前用Go写的一个小玩意儿,从最开始简陋的防火墙脚本演变而来的。最开始的功能就是把自己所在地区的IP作为白名单IP加到VPS的防火墙里以防止某些端口扫描或者主动探测行为的,后来演变为简单的防火墙入站规则管理工具。那时候觉得firewalld有点重,而且可能和别的存在编辑防火墙行为的程序出现冲突,于是就自己重新造了轮子。
基本思路就是将(传输层协议组,端口组)作为一个“应用”对待,例如:HTTP = (tcp 80,443,8080,8443),然后为每个“应用”配置一个ipset,以控制该应用的访问权限。
现在正在尝试将底层替换成eBPF等更高效的实现,方便替换底层实现也是自己造轮子的好处之一。

7.2 NTP服务器

7.2.1 设置方法
1)运行命令 apt install -y chrony 安装chrony
2)如有需要,调整系统时区至北京时间(CST): timedatectl set-timezone Asia/Shanghai;
2)将配置文件(chrony.conf)放置于/etc/chrony/目录下,若有重名文件,替换之;
3)将配置文件(ntp-pool.sources)放置于/etc/chrony/sources.d目录下;
4)重启chrony服务:sudo systemctl restart chrony;
5)可运行命令chronyc sources -v,以查看上游NTP服务器状态。
6)配置文件示例在下面给出。

# Located in /etc/chrony/chrony.conf
# Use chronyc sources -v to check NTP sources

# Use time sources from DHCP.
sourcedir /run/chrony-dhcp

# Use NTP sources found in /etc/chrony/sources.d.
sourcedir /etc/chrony/sources.d

# This directive specify the location of the file containing ID/key pairs for
# NTP authentication.
keyfile /etc/chrony/chrony.keys

# This directive specify the file into which chronyd will store the rate
# information.
driftfile /var/lib/chrony/chrony.drift

# Save NTS keys and cookies.
ntsdumpdir /var/lib/chrony

# Uncomment the following line to turn logging on.
#log tracking measurements statistics

# Log files location.
logdir /var/log/chrony

# Stop bad estimates upsetting machine clock.
maxupdateskew 100.0

# This directive enables kernel synchronisation (every 11 minutes) of the
# real-time clock. Note that it can’t be used along with the 'rtcfile' directive.
rtcsync

# Step the system clock instead of slewing it if the adjustment is larger than
# one second, but only in the first three clock updates.
makestep 1 3

# Get TAI-UTC offset and leap seconds from the system tz database.
# This directive must be commented out when using time sources serving
# leap-smeared time.
leapsectz right/UTC

# Set chrony server to bind to
# 设置绑定的IP,这里同时启用IPv4和IPv6访问
bindcmdaddress 0.0.0.0
bindcmdaddress ::
# 允许访问的IP段,根据实际情况配置
# 也可允许所有IP访问,通过防火墙实现访问控制
# 以下配置为允许所有IP访问该NTP服务器
allow 0.0.0.0/0
allow ::/0
# Located in /etc/chrony/sources.d/ntp-pool.sources
# 设置 NTP 服务器池
server 0.pool.ntp.org iburst
server 1.pool.ntp.org iburst
server 2.pool.ntp.org iburst
server 3.pool.ntp.org iburst
# 如果是在国内,也可以用下面的 NTP 服务器
pool ntp.aliyun.com      iburst maxsources 4
pool cn.ntp.org.cn         iburst maxsources 4
pool ntp.ntsc.ac.cn      iburst maxsources 4
pool time1.cloud.tencent.com iburst maxsources 4
pool time2.cloud.tencent.com iburst maxsources 4
pool time3.cloud.tencent.com iburst maxsources 4
pool time4.cloud.tencent.com iburst maxsources 4
pool time5.cloud.tencent.com iburst maxsources 4


7.3 透明代理
(IPv6暂未找到比较优雅的实现方式,目前正在调研OSPF方案,故暂不更新)

7.4 内网穿透/内网Web服务管理

7.5 基于EC20模块的短信网关/4G上网实现
7.5.1 4G模块基础设置
1)确认你的工控机PCB板上有没有SIM卡插槽;
2)如无SIM卡插槽,可购买USB接口的4G模块,一般会带个插槽,缺点是模块没法安装到设备内部,看着不好看;有的话就可以购买mPCIe口的4G模块了,PCB板上自带的SIM插槽一般都能用;
3)个人买的型号是:移远EC20CEHDLG-MINIPCIE-CB。大家也可以购买其它品牌,但要注意其是否支持你SIM的运营商。【此处绝无带货恰饭】,选择这款的理由是它支持三网4G,而且网上资料较多较全;
4)装上SIM卡和4G模块,开机以确认模块是否可用。Ubuntu 20.04版本及以后实测免驱可用。

7.5.2 短信网关的实现

7.5.3 4G拨号上网

7.6 自用消息推送服务
7.7 DNS分流
7.8 SSH配置优化
7.9 DDNS
7.10 系统配置sysctl优化

7.11 更换xanmod内核
7.2.1 手动安装和设置方法
7.2.2 可能感兴趣的内核特性
1)RFC3489 full-cone NAT 支持
2)Cloudflare TCP collapse(TCP队列坍缩)以实现高吞吐量和低延迟的支持

7.12 Aria2安装与基于RSS的资源自动下载

8. 附件
1. 配置文件和脚本
**** Hidden Message *****

jackyxiongcn 发表于 2022-9-24 09:34

看看有什么

runking 发表于 2022-9-24 10:09

好文章,谢谢分享!

幽灵道人 发表于 2022-9-24 12:20

谢谢分享。。。。。。。。。。

wmf1029 发表于 2022-9-24 14:40

好文章,谢谢分享!

cjf 发表于 2022-9-24 15:33

感觉好高大上的样子,问下这个还能当系统用吗?能再加个NAS功能吗?

nmgmax 发表于 2022-9-24 17:16

学习学习!!!

Moto88 发表于 2022-9-24 17:32

谢谢分享

798388 发表于 2022-9-24 17:40

感谢大礼分享

jwpia 发表于 2022-9-24 17:51

谢谢楼主的分享:lol

tzmag 发表于 2022-9-24 20:15

谢谢分享

a5276815 发表于 2022-9-24 20:21

大神都是这么的秀。。。。

yz8303 发表于 2022-9-24 21:28

谢谢分享。。。。。。。。。。

gladys 发表于 2022-9-24 22:36

cjf 发表于 2022-9-24 15:33
感觉好高大上的样子,问下这个还能当系统用吗?能再加个NAS功能吗?

可以,最基本NAS功能用Samba server就可以实现(https://ubuntu.com/tutorials/install-and-configure-samba#1-overview),高级一点可以搞ZFS(实现安全文件系统),BT下载之类的拉个Docker就可以(https://hub.docker.com/r/linuxserver/transmission)

雪韵凌寒 发表于 2022-9-28 10:49

谢谢楼主热心分享
页: [1] 2 3 4 5 6
查看完整版本: Ubuntu 软路由全套折腾指南(持续更新)