RouterOS IPv6 NPTv6 脚本 (NAT版,非Mangle版)

使用前注意:

  1. 这是一个非常早期的脚本,可能存在一些bug或者不适用的场景。
  2. 如果你不知道这个脚本的作用是什么,请不要使用。
  3. 使用该脚本需要中级或高级 RouterOS 知识,新手用户建议绕过。

使用说明:

以下内容需要在运行脚本之前手动配置一次:

# 创建 公网地址池
# 使用 IPv6 DHCP-Client 获取 IPv6 Prefix,并将地址放到地址池内
# 设置地址池再分配的 prefix 大小是 /60 (可根据实际情况修改)
/ipv6 dhcp-client
add add-default-route=yes interface=pppoe-telecom pool-name=pool6-telecom pool-prefix-length=60 request=prefix

# 创建 内网地址池
# 内网地址池的 prefix 大小应和公网地址池分配的 prefix 大小匹配 (这里是 /60)
# 设置地址池再分配的 prefix 大小是 /64 (SLAAC 分配时只能使用 /64)
/ipv6 pool
add name=pool6-bridge prefix=fd00:1111:2222:3300::/60 prefix-length=64

# 将 公网地址 分配到 vlan/bridge 接口上,并且不要广播地址
# 注意 地址的掩码是 /60 (和 公网地址池pool-prefix-length 匹配)
/ipv6 address
add address=::/60 advertise=no eui-64=yes from-pool=pool6-telecom interface=bridge

# 将 内网地址 分配到 vlan/bridge 接口上
# 注意 地址的掩码是 /64 (和 内网地址池prefix-length 匹配)
/ipv6 address
add address=::/64 eui-64=yes from-pool=pool6-bridge interface=bridge

# 可选: 创建内网 dhcp-server,并从 内网地址池 中分配 prefix
/ipv6 dhcp-server
add address-pool=pool6-bridge interface=bridge name=server1

现在已经完成了 公网内网地址池创建接口地址分配

prefix 分配层级关系

接下来创建防火墙规则,这里使用 IPv6 的 NAT / NETMAP。

/ipv6 firewall nat

add action=netmap chain=srcnat comment="netmap for bridge" out-interface=pppoe-telecom src-address=fd00:1111:2222:3300::/60 to-address=240e:1111:2222:3300::/60

add action=netmap chain=dstnat dst-address=240e:1111:2222:3300::/60 in-interface=pppoe-telecom to-address=fd00:1111:2222:3300::/60

现在已经完成了必要的设置,只需将下面的脚本添加到 /system script,修改脚本内的 内网/外网接口 名称,并在 /ipv6 dhcp-client 里添加以下触发脚本即可:

:delay 5000ms;
/system script run ipv6-npt6

脚本下载:

RouterOS 导入 USTC IP 黑名单

将 中科大 USTC IP Blacklist 转换成 RouterOS 格式并导入。

黑名单列表介绍:
https://blackip.ustc.edu.cn/

使用方法:
访问 https://gateway.vsean.net/ustc_blackip/routeros.php 下载脚本并导入即可。

导入脚本时会先清空同名列表里的现有列表项。如有自定义需求建议建立多个地址列表。
默认 address-list 的列表名为 black_ip

如需自定义列表名,只需要在 url 后面跟上 ?list_name=[your list name]
例如: https://gateway.vsean.net/ustc_blackip/routeros.php?list_name=Block

也可以使用脚本的方式自动导入:

# 黑名单列表名称
:local listName "Block";
:local url ("https://gateway.vsean.net/ustc_blackip/routeros.php?list_name=" . $listName);
/tool fetch url=$url mode=https output=file dst-path="black_ip.rsc";
import file=black_ip.rsc

示例防火墙脚本

/ip firewall filter
add action=reject chain=input comment="reject blocked" connection-state=new reject-with=icmp-network-unreachable \
    src-address-list=black_ip
add action=reject chain=forward comment="reject blocked" connection-state=new reject-with=icmp-network-unreachable \
    src-address-list=black_ip

/ipv6 firewall filter
add action=reject chain=input comment="reject blocked" connection-state=new reject-with=icmp-address-unreachable \
    src-address-list=black_ip
add action=reject chain=forward comment="reject blocked" connection-state=new reject-with=icmp-address-unreachable \
    src-address-list=black_ip

RouterOS 限制只允许中国IP访问

1. 导入中国IP列表。将文件上传到RouterOS后,运行 import China_IP.rsc

2. 创建防火墙规则

# 限制非中国IP直接到路由器的访问
/ip firewall filter
add action=drop chain=input connection-state=new dst-address-type=local src-address-list="!China_IP"

# 限制非中国IP所有NAT访问 (与下方规则二选一)
/ip firewall filter
add action=drop chain=forward connection-state=new dst-address-type=local src-address-list="!China_IP"

# 限制非中国IP指定端口的NAT访问
/ip firewall nat
add action=dst-nat chain=dstnat dst-address-type=local dst-port=80 protocol=tcp src-address-list="China_IP" to-addresses=192.168.88.100 to-ports=80

在 Ubuntu Server 中安装指定版本的 MySQL Server

出于某些特殊的原因(如和 xtrabackup 版本匹配),你可能需要安装指定版本的 MySQL Server,并禁止它自动升级。

1. 下载 MySQL Server 安装包

https://downloads.mysql.com/archives/community/
在这里选择你要下载的 MySQL 版本
Operating System 选择 Ubuntu Linux
下方的文件列表中下载 DEB Bundle 的版本
然后将下载的文件上传至服务器中。

2. 安装 MySQL Server

  1. 安装必要依赖
    sudo apt install libmecab2
  2. 解压 MySQL Server 安装包 (根据实际情况修改文件名)
    tar -xvf mysql-server_8.0.28-1ubuntu20.04_amd64.deb-bundle.tar
  3. 使用 dpkg -i 命令依次安装以下软件包
    mysql-common
    mysql-community-client-plugins
    mysql-community-client-core
    mysql-community-client
    mysql-client
    mysql-community-server-core
    mysql-community-server
    mysql-server
    libmysqlclient21

dpkg -i mysql-{common,community-client-plugins,community-client-core,community-client,client,community-server-core,community-server,server}_*.deb

3. 设置 APT 不要自动升级 MySQL Server

apt-mark hold mysql-common mysql-client mysql-server libmysqlclient21

Ubuntu 编译支持 IE 8 的 Caddy Server v2

1. 安装 Golang

rm -rf /usr/local/go
wget -c https://golang.org/dl/go1.17.8.linux-amd64.tar.gz -O - | sudo tar -xz -C /usr/local

2. 安装 XCaddy

XCaddy 是一个 Caddy 的辅助编译工具

curl -1sLf \
  'https://dl.cloudsmith.io/public/caddy/xcaddy/setup.deb.sh' \
  | sudo -E bash

apt install xcaddy

3. 下载代码

git clone https://github.com/caddyserver/caddy.git caddy-mod

4. 修改代码,启用对 TLS 1.0 / 1.1 的支持

---
 modules/caddytls/values.go | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/modules/caddytls/values.go b/modules/caddytls/values.go
index 4e8c1adc..91cfd0f5 100644
--- a/modules/caddytls/values.go
+++ b/modules/caddytls/values.go
@@ -115,6 +115,8 @@ var defaultCurves = []tls.CurveID{
 
 // SupportedProtocols is a map of supported protocols.
 var SupportedProtocols = map[string]uint16{
+	"tls1.0": tls.VersionTLS10,
+	"tls1.1": tls.VersionTLS11,
 	"tls1.2": tls.VersionTLS12,
 	"tls1.3": tls.VersionTLS13,
 }
@@ -124,8 +126,6 @@ var SupportedProtocols = map[string]uint16{
 var unsupportedProtocols = map[string]uint16{
 	//nolint:staticcheck
 	"ssl3.0": tls.VersionSSL30,
-	"tls1.0": tls.VersionTLS10,
-	"tls1.1": tls.VersionTLS11,
 }
 
 // publicKeyAlgorithms is the map of supported public key algorithms.
-- 

5. 编译 Caddy

xcaddy build \
  --with github.com/caddyserver/caddy/v2=./caddy-mod/

6. 修改 Caddy 配置文件,启用算法支持

tls {
  protocols tls1.0 tls1.3
  ciphers TLS_AES_128_GCM_SHA256 TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA TLS_RSA_WITH_AES_256_CBC_SHA TLS_RSA_WITH_AES_128_CBC_SHA
}

ssllabs.com 测试算法支持情况:

IP话机对接陕西电信固话IMS

该教程使用到的设备/软件:

  1. 电信光猫 (需将 vlan45 透传给路由器)
  2. RouterOS 路由器
  3. SIP客户端 (可以是 IPPBX / IP话机 / SIP软件)

第一步:获取固话信息

使用 telecomadmin 账号登录光猫,找到以下信息

  1. 本地域名,通常是 sn.ctcims.cn
  2. 主用 Outbound 服务器地址
  3. SIP用户名和密码 (可以通过备份文件提取,也可以直接问电信小哥要)

第二步:配置路由器

以下内容假设光猫接在路由器 ether1 口,光猫已设置将所有 vlan 透传给路由器。

# 在 ether1 上添加 vlan45 接口
/interface vlan
add interface=ether1 name=vlan45-ims vlan-id=45

# 在 vlan45 接口上获取IP
/ip dhcp-client
add add-default-route=no interface=vlan45-ims use-peer-dns=no use-peer-ntp=no

# 添加 IMS 路由
/ip route
add dst-address=172.25.130.0/23 gateway=vlan45-ims

# 对接口启用NAT (手动将规则调整到防火墙前面)
/ip firewall nat
add action=masquerade chain=srcnat out-interface=vlan45-ims

# 防火墙对接口放行 (手动将规则调整到防火墙前面)
/ip firewall filter
add action=accept chain=input in-interface=vlan45-ims
add action=accept chain=forward in-interface=vlan45-ims

# 启用 SIP Helper
/ip firewall service-port
set sip disabled=no ports=5060,5061 sip-direct-media=yes sip-timeout=1h

第三步:配置客户端

以下介绍三种客户端的设置方法,MicroSIP 软件 , 讯时 IPPBX 和 方位 IP话机

MicroSIP 的配置示例如下:

其中
SIP服务器域名 填写 第一步获取到的 本地域名
SIP 代理 填写 第一步获取到的 主用 Outbound 服务器地址 (需加上 5060 端口号)
用户名和密码 填写 第一步获取到的用户名和密码

讯时 IPPBX 的配置示例如下:

基本设置
将STUN关闭

SIP外线-注册选项
默认注册服务器代理服务器 填写 第一步获取到的 主用 Outbound 服务器地址 (需加上 5060 端口号)
本地端口 需修改为非 5060 的值
用户端域名 填写 第一步获取到的 本地域名
需勾选上 IMS
接入网信息 填写为 第一步获取到的 本地域名

SIP外线-添加账户
添加账号时 号码/用户名 只需输入电话号码部分,无需输入 @及后面的域名

方位 IP 话机的配置如下:

用户名输入电话号码部分,如 +862987654321
用户认证输入电话号码+域名的部分,如 +862987654321@sn.ctcims.cn
验证密码输入 密码
SIP服务器地址输入 本地域名,如: sn.ctcims.cn
代理服务器地址输入 Outbound 服务器地址,如:172.25.130.1

不兼容的设备

Yealink IP 话机无法直接注册到电信IMS设备,因为它在发送 REGISTER 命令时,附带了默认的端口号 5060(实际不能带端口号),导致注册失败。

Confluence 导出 PDF 报错解决方案

添加调试记录

在 管理 – 日志与性能分析 – 自定义日志设置 中,添加一条记录:
com.atlassian.confluence.impl.util.sandbox ,级别为 DEBUG

/var/atlassian/application-data/confluence/logs/atlassian-confluence.log 中查看具体报错原因。

安装缺失依赖

apt install libxrender1 libxtst6 libxi6

禁用 SSH 工具的 X-11 转发

如果你的 SSH 工具默认启用了 X-11 转发 (如Mobaxterm),则需要禁用掉,然后重启 Confluence。

配置 iptables 限制端口只允许从国内IP发起访问

1. 安装软件包

sudo apt install ipset iptables netfilter-persistent ipset-persistent iptables-persistent

2. 启用配置持久保存功能

sudo systemctl enable netfilter-persistent
sudo systemctl start netfilter-persistent

3. 导入中国IP列表
IP列表来自 ipip.net (https://github.com/17mon/china_ip_list)

4. 对指定端口添加限制
其中 in-interface 修改为你的外网接口,destination-port 修改为想要限制的端口

iptables -A INPUT --in-interface eth0 --protocol tcp --destination-port 22 --match state --state NEW --match set ! --match-set ChinaIP src -j DROP
iptables -L -v -n --line-numbers

5. 保存修改

netfilter-persistent save