Skip to content

Commit c44655e

Browse files
committed
new: routeros
1 parent 32edb12 commit c44655e

File tree

4 files changed

+110
-20
lines changed

4 files changed

+110
-20
lines changed

content/posts/learncpp_1/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
title: "cpp学习笔记(1)"
2+
title: "cpp学习笔记(1)"
33
date: 2025-09-11T08:10:38+08:00
44
draft: false
55
lastmod: 2025-09-30T10:28:08+08:00

content/posts/learncpp_2/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
+++
22
date = '2025-09-19T19:13:57+08:00'
33
draft = false
4-
title = 'cpp学习笔记(2)'
4+
title = 'cpp学习笔记(2)'
55
lastmod = '2025-09-25T10:55:18+08:00'
66
+++
77
## 符号变量
Lines changed: 108 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,123 @@
11
+++
22
date = '2025-09-23T21:05:32+08:00'
3-
draft = true
4-
title = 'Routeros_ipv6'
3+
draft = false
4+
title = 'RouterOS的IPv6多网段统一进行NAPT转换'
5+
lastmod = '2025-10-04T16:38:46+08:00'
56
+++
67

7-
使用napt,对于eui64:
8+
## 前言
9+
10+
终于决定给社团的网络修一修了~
11+
12+
## 实践
13+
14+
### 内网划分
15+
16+
对于内网的划分是这样的:
17+
18+
使用`ULA`子网:`fd11:4514:5a51::/48`
19+
20+
然后划分四个网段,分别给设施、1-3楼用户。
21+
22+
- `fd11:4514:5a51:0::/64`,尽量使用`EUI64`分配地址,同时分配公网前缀用于`IPv6`访问。
23+
- `fd11:4514:5a51:[1-3]::/64`,仅仅分配`ULA`,不分配公网前缀,使得设备流量分流到三条移动宽带。
24+
25+
### /DNPT规则
26+
27+
相比之前使用的`fc00-fc03`网段来说,可以少写很多规则,直接转换`/60`的前缀即可。
28+
29+
参考如下:
30+
31+
```shell
32+
3 ;;; PCC-1 Output
33+
chain=prerouting action=mark-packet new-packet-mark=PCC-1 passthrough=yes src-address=fd11:4514:5a51::/60 dst-address-list=!ULAs per-connection-classifier=src-address:3/0 log=no log-prefix=""
34+
35+
4 ;;; PCC-2 Output
36+
chain=prerouting action=mark-packet new-packet-mark=PCC-2 passthrough=yes src-address=fd11:4514:5a51::/60 dst-address-list=!ULAs per-connection-classifier=src-address:3/1 log=no log-prefix=""
37+
38+
5 ;;; PCC-3 Output
39+
chain=prerouting action=mark-packet new-packet-mark=PCC-3 passthrough=yes src-address=fd11:4514:5a51::/60 dst-address-list=!ULAs per-connection-classifier=src-address:3/2 log=no log-prefix=""
40+
41+
6 ;;; PCC-1 Output NPT
42+
chain=postrouting action=SNPT src-prefix=fd11:4514:5a51::/60 dst-prefix=2409:8a20:ae0:6af0::/60 src-address=fd11:4514:5a51::/60 packet-mark=PCC-1 log=no log-prefix=""
43+
44+
7 ;;; PCC-2 Output NPT
45+
chain=postrouting action=SNPT src-prefix=fd11:4514:5a51::/60 dst-prefix=2409:8a20:ae0:1360::/60 src-address=fd11:4514:5a51::/60 packet-mark=PCC-2 log=no log-prefix=""
46+
47+
8 ;;; PCC-3 Output NPT
48+
chain=postrouting action=SNPT src-prefix=fd11:4514:5a51::/60 dst-prefix=2409:8a20:bc5:c950::/60 src-address=fd11:4514:5a51::/60 packet-mark=PCC-3 log=no log-prefix=""
49+
50+
9 ;;; PCC-1 Input NPT
51+
chain=prerouting action=dnpt src-prefix=2409:8a20:ae0:6af0::/60 dst-prefix=fd11:4514:5a51::/60 dst-address=2409:8a20:ae0:6af0::/60 log=no log-prefix=""
52+
53+
10 ;;; PCC-2 Input NPT
54+
chain=prerouting action=dnpt src-prefix=2409:8a20:ae0:1360::/60 dst-prefix=fd11:4514:5a51::/60 dst-address=2409:8a20:ae0:1360::/60 log=no log-prefix=""
55+
56+
11 ;;; PCC-3 Input NPT
57+
chain=prerouting action=dnpt src-prefix=2409:8a20:bc5:c950::/60 dst-prefix=fd11:4514:5a51::/60 dst-address=2409:8a20:bc5:c950::/60 log=no log-prefix=""
58+
```
59+
60+
总共9条规则就可以解决,依次是出站PCC规则分流,出站规则,入站DNPT规则。
61+
62+
## 问题
63+
64+
### 脚本自动更新问题
65+
66+
我真的非常不愿意去看RouterOS的脚本,太乱了,沿用了之前的内容,只是修改了其中的网段。
67+
68+
### 入站问题
69+
70+
按照现有的规则,实际上是无法入站的,需要单独添加一条规则,而且似乎只对`EUI64`的地址生效。
71+
72+
```
73+
2 ;;; PCC-1 LAN_Device
74+
chain=prerouting action=accept dst-address=2409:8a20:ae0:6af0::/64 log=no log-prefix=""
75+
```
76+
77+
其实,对于隐私地址,防火墙也非常难以匹配规则,因为后缀变,运营商的前缀也跟着变,一般解决方案都是`socat`或者反向匹配(目标地址写`::be24:11ff:fe82:8282/::ffff:ffff:ffff:ffff`这样)。
78+
79+
### 内网访问问题
80+
81+
对于内网v6互访(从0网段到1)是失败的,我怀疑是PCC规则误伤了,但是排查还是挺困难的,因为RouterOS的日志调试我根本不会用,不出日志,你说要是有个`tcpdump`我就会了...
82+
83+
## 补充
84+
85+
### 关于EUI64和RFC4291
86+
87+
使用`NAPT`,对于`EUI64`:
88+
89+
```bash
890
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
9-
link/ether 00:0c:29:80:e3:fe brd ff:ff:ff:ff:ff:ff
91+
link/ether 00:0c:29:65:43:21 brd ff:ff:ff:ff:ff:ff
1092
altname enp11s0
11-
inet 192.168.114.3/24 brd 192.168.114.255 scope global dynamic ens192
93+
inet 192.168.114.39/24 brd 192.168.114.255 scope global dynamic ens192
1294
valid_lft 13117sec preferred_lft 13117sec
13-
inet6 2409:8a20:ae0:6af0:20c:29ff:fe80:e3fe/64 scope global dynamic mngtmpaddr
95+
inet6 fd11:4514:5a51:0:20c:29ff:fe65:4321/64 scope global dynamic mngtmpaddr
96+
valid_lft 6993sec preferred_lft 3393sec
97+
inet6 2409:8a20:ae0:6af0:20c:29ff:fe65:4321/64 scope global dynamic mngtmpaddr
1498
valid_lft 7124sec preferred_lft 3524sec
15-
16-
出来的ip地址:
17-
curl 6.ipw.cn
18-
2409:8a20:ae0:6af0:20c:29ff:fe80:e3fe
99+
```
19100

20101
开启了隐私拓展后:
21102

22-
3: enp0s20f0u3u4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
23-
link/ether 00:e0:4c:68:09:ce brd ff:ff:ff:ff:ff:ff
103+
```bash
104+
4: enp0s20f0u3u4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
105+
link/ether 01:e0:22:65:43:21 brd ff:ff:ff:ff:ff:ff
24106
altname enx00e04c6809ce
25-
inet6 fd11:4514:5a51:0:81e3:4643:cd5c:7b73/64 scope global dynamic noprefixroute
26-
valid_lft 7194sec preferred_lft 3594sec
27-
107+
inet 192.168.101.80/24 brd 192.168.101.255 scope global dynamic noprefixroute enp0s20f0u3u4
108+
valid_lft 8484sec preferred_lft 8484sec
109+
inet6 fd11:4514:5a51:1:ff9d:d0eb:c4f3:ad54/64 scope global dynamic noprefixroute
110+
valid_lft 7117sec preferred_lft 3517sec
28111
❯ curl 6.ipw.cn
29-
2409:8a20:bc5:c950:9b1b:4643:cd5c:7b73
112+
2409:8a20:ae0:1361:cfab:d0eb:c4f3:ad543
113+
```
114+
115+
其中65-80的这一段,若不是真实反应MAC地址,那么好像在`SNPT`的时候不会为你保留。
116+
117+
有人说,变化是因为要符合校验和,但是对于`EUI64`地址好像并不需要啊,这是为什么呢?
118+
119+
查了下,发现`EUI64`并没有强制要求必须保留,所以为了效率和随机性,就找了一个能够唯一标识的地址使用了。
30120

31-
其中65-80的这一段,若不是真实反应mac地址,那么好像在snpt的时候不会为你保留。
121+
## 总结
32122

123+
感觉调RouterOS完全就是在猜啊,没有wrt类那种我理解的感觉,希望以后能找到个大佬浇浇我。

date --iso9001=seconds

Lines changed: 0 additions & 1 deletion
This file was deleted.

0 commit comments

Comments
 (0)