找回密码
 立即注册
img_loading
智能检测中

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888广告投放联系QQ68610888
查看: 3894|回复: 14

[Router OS] OSPF配置参考

[复制链接]
发表于 2023-5-18 22:34 | 显示全部楼层 |阅读模式
本帖最后由 mantouboji 于 2023-5-18 23:25 编辑

运行wireguard隧道
隧道一端在本地RouterOS 路由器上,这里是hAP AX3,RouterOS 7.9

VPS在大洋彼岸,Ubuntu 20.04, 同时有IPv4和IPv6地址。

假设隧道本地这侧地址是 10.28.6.30, VPS那一端是10.28.6.1



VPS上运行bird2 ,用nchnroutes 生成配套的routes4.conf 和 routes6.conf

VPS那边的设置:( /etc/bird/bird.conf )

  1. #
  2. # Yao Fei feiyao@me.com
  3. #
  4. #  2022-08-15
  5. #
  6. log syslog all;
  7. #debug protocols all;

  8. router id 10.28.6.1;
  9. protocol device {
  10. }

  11. # IPv4
  12. protocol static {
  13.         ipv4;
  14.         include "routes4.conf";
  15. }

  16. protocol ospf v2 wg {
  17.         ipv4 {
  18.                 export all;
  19.                 import none;
  20.         };
  21.         area 0.0.0.0 {
  22.                 interface "wg*" {
  23.                         type ptp;
  24.                         hello 10;
  25.                         dead 40;
  26.                 };
  27.         };
  28. }

  29. #IPv6
  30. protocol static {
  31.         ipv6;
  32.         include "routes6.conf";
  33. }

  34. # must assign a fe80:: address to wg0
  35. protocol ospf v3 wg6  {
  36.         ipv6 {
  37.                 export all;
  38.                 import none;
  39.         };
  40.         area 0.0.0.0 {
  41.                 interface "wg*" {
  42.                         type ptp;
  43.                         hello 10;
  44.                         dead 40;
  45.                 };
  46.         };
  47. }
复制代码


RouterOS这一侧的设置:

  1. # may/18/2023 22:23:29 by RouterOS 7.9
  2. #
  3. # model = C53UiG+5HPaxD2HPaxD
  4. /routing ospf instance
  5. add comment="VPS OSPF IPv4" disabled=no name=ospf-instance-1 router-id=\
  6.     10.28.6.30
  7. add comment="VPS OSPF IPv6" disabled=no name=ospf-instance-2 router-id=\
  8.     10.28.6.30 version=3
  9. /routing ospf area
  10. add comment="VPS IPv4" disabled=no instance=ospf-instance-1 name=ospf-area-1
  11. add comment="VPS IPv6" disabled=no instance=ospf-instance-2 name=ospf-area-2
  12. /routing ospf interface-template
  13. add area=ospf-area-1 comment="VPS IPv4" disabled=no interfaces=wg1 type=ptp
  14. add area=ospf-area-2 comment="VPS IPv6" disabled=no interfaces=wg1 type=ptp
复制代码


仅供参考

只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
 楼主| 发表于 2023-5-25 16:10 | 显示全部楼层
玩这个的重点,是境外VPS那一段的wireguard设备上一定要配置一个fe80开头的局部IPv6地址,因为OSPFv3只在fe80地址之间交换信息。

RouterOS这一侧本身就会为wg设备随机分配一个fe80地址,所以只要对方有fe80,两者就能相互发现交换路由。

为了代理IPv6流量,两端wg设备还需要再叠加分配一个fd开头的内部IPv6地址,具体数值你自己设置就好,比如我在VPS那一侧是fd80:1234:5678::1, RouterOS 这一侧是fd80:1234:5678::20。OSPFv3会把国外IP流量自动导向这个wg连接。所以你还需要在ipv6/firewall/nat里给这个wg出口的流量做个src-nat

只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-26 14:00 | 显示全部楼层



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-6-25 16:11 | 显示全部楼层
大佬求问一个问题,当ROS用IP分流或者OSPF分流都会出现某些APP不能登录,请问这是DNS解释还是别的问题?

点评

我的经验: 1、DNS问题,拿到了国内被污染的DNS 2、IPv6 没有配置 3、MTU不匹配,没有clamp to pmtu 分流必须要做好DNS防污染,中国境内的DNS都不能信任。有大仙推荐我在VPS上跑AdGuard Home,但用下来我还是觉得  详情 回复 发表于 2023-6-25 17:06
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-25 17:06 | 显示全部楼层
garrickchen 发表于 2023-6-25 16:11
大佬求问一个问题,当ROS用IP分流或者OSPF分流都会出现某些APP不能登录,请问这是DNS解释还是别的问题? ...

我的经验:
1、DNS问题,拿到了国内被污染的DNS
2、IPv6 没有配置
3、MTU不匹配,没有clamp to pmtu

分流必须要做好DNS防污染,中国境内的DNS都不能信任。有大仙推荐我在VPS上跑AdGuard Home,但用下来我还是觉得自己小盒子跑china-dns-ng效果好一点。

点评

1.装了2个ADGUARDHOME做DNS缓存服务器,但没有做DNS分流,不确定是不是这个原因 2.IPV6也不确定,如果关了能用就真打脸了 3.MTU已经匹配了 感谢大佬回复,希望能成  详情 回复 发表于 2023-6-25 17:45
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-6-25 17:45 | 显示全部楼层
mantouboji 发表于 2023-6-25 17:06
我的经验:
1、DNS问题,拿到了国内被污染的DNS
2、IPv6 没有配置

1.装了2个ADGUARDHOME做DNS缓存服务器,但没有做DNS分流,不确定是不是这个原因
2.IPV6也不确定,如果关了能用就真打脸了
3.MTU已经匹配了
感谢大佬回复,希望能成
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-8 12:55 | 显示全部楼层
本帖最后由 mantouboji 于 2023-7-8 17:05 编辑

连接了三个VPS做热冗余,通过OSPF控制路由分流。之前为每个VPS设置了单独的OSPF area,经过深入思考发现这样是不对的,全部设成同一个area 0.0.0.0才对。
以前的各种麻烦现在想来,主要是因为MTU的问题。倒霉的上海国际精品网,PPPoE链路MTU才1442,对应的wireguard MTU应该不超过1442-60=1382 才对。

每个接口的cost设置似乎没什么用。



  1. /routing ospf instance add comment="OSPF v2" disabled=no name=default-v2 router-id=192.168.20.1
  2. /routing ospf instance add comment="OSPF v3" disabled=no name=default-v3 router-id=192.168.20.1 version=3
  3. /routing ospf area add disabled=no instance=default-v2 name=backbone-v2
  4. /routing ospf area add disabled=no instance=default-v3 name=backbone-v3
  5. /ip firewall filter add action=accept chain=input comment="accept OSPF" protocol=ospf
  6. /ipv6 firewall filter add action=accept chain=input comment="accept OSPF" protocol=ospf
  7. /routing ospf interface-template add area=backbone-v2 disabled=no interfaces=bridge1
  8. /routing ospf interface-template add area=backbone-v3 disabled=no interfaces=bridge1
  9. /routing ospf interface-template add area=backbone-v2 cost=10 disabled=no interfaces=wg1 type=ptp
  10. /routing ospf interface-template add area=backbone-v3 cost=10 disabled=no interfaces=wg1 type=ptp
  11. /routing ospf interface-template add area=backbone-v2 cost=11 disabled=no interfaces=wg2 type=ptp
  12. /routing ospf interface-template add area=backbone-v3 cost=11 disabled=no interfaces=wg2 type=ptp
  13. /routing ospf interface-template add area=backbone-v2 cost=12 disabled=no interfaces=wg3 type=ptp

复制代码

只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-8-10 08:39 | 显示全部楼层
大佬,折腾一下BGP吧
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-8-10 08:40 | 显示全部楼层
BGP分流是动态的,更新最全最及时

点评

好,安排一下学习进度  详情 回复 发表于 2023-8-10 09:37
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-10 09:37 | 显示全部楼层
恩山蜡笔 发表于 2023-8-10 08:40
BGP分流是动态的,更新最全最及时

好,安排一下思考进度

点评

我目前是这么做的: 1.通过vultr的BGP收了V4的全表: 2.配置了配置WireGuard,打通了家里与vultr的通道 3.安装了bird2,配置文件在/etc/bird这么写: router id 我的vultrIP; include "asn_cn.conf"; include "us.  详情 回复 发表于 2023-8-10 09:50
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-8-10 09:50 | 显示全部楼层
mantouboji 发表于 2023-8-10 09:37
好,安排一下思考进度

我目前是这么做的:
1.通过vultr的BGP收了V4的全表:
2.配置了配置WireGuard,打通了家里与vultr的通道
3.安装了bird2,配置文件在/etc/bird这么写:
router id 我的vultrIP;

include "asn_cn.conf";

include "us.conf";

protocol device {}

protocol static {
        ipv4 {};
}

protocol bgp vultr
{
        local as 我vultr的AS;
        neighbor vultr上面邻居IP asvultr上面邻居AS;
        password "BGP密码";
        source address 我vultr的IP;

  ipv4 {
                import all;
                export none;
  };
        graceful restart on;
        multihop 2;

}

protocol bgp home  #这是去我家的配置
{
        local as 65533;
        neighbor 10.88.88.2 as 65532;
        source address 10.88.88.1;

  ipv4 {
                import none;
                export filter {
                        #if bgp_path ~ [4134, 4809, 36678, 4837, 9929, 9808, 9394, 4538, 23910] then accept; else reject;
                        if bgp_path ~ china_asn then accept; else reject;
                        if bgp_path ~ us then accept; else reject;
                };
  };
}

其中asn_cn.conf文件,通过脚本自动更新了中国区的AS号。  us.config是自己把奈飞等要上网海淘的AS号加进去了

ROS里面配置BGP:ROS---Routing---Filters 这么写了
if (protocol bgp) {set gw pppoe-out1;accept}
if (bgp-as-path 15169$|32934$|14907$|13414$|15133$|13335$|16625$|62041$|59930$|40027$|2906$|55095$| 16509$) {set gw 192.168.100.2;accept}

这样是实现了所有中国区AS号过滤来的IP通过PPPOE-out1出去了,但是国外的路由不能走隧道192.168.100.2出去,上网海淘深造不了。

请问要这么写才能实现bgp分流,解决上网海淘深造问题呢。
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-8-10 10:12 | 显示全部楼层
asn_cn.conf  里面都是中国区的AS号
自动更新中国asn的python脚本:
  1. asn_cn.conf  里面都是中国区的AS号
  2. 自动更新中国asn的python脚本:
复制代码
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-8-10 10:12 | 显示全部楼层
asn_cn.conf  里面都是中国区的AS号
自动更新中国asn的python脚本:
  1. # version :Python 3.7.3
  2. import os
  3. import re
  4. import urllib.request


  5. # 读出文件最后一行
  6. # 参考大神代码https://blog.csdn.net/weixin_30632899/article/details/97566294
  7. def getEndLing(name):
  8.     with open(name, 'rb') as f:
  9.         file_size = os.path.getsize(name)
  10.         offset = -100
  11.         # 文件字节大小为0则返回none
  12.         if file_size == 0:
  13.             return ''
  14.         while True:
  15.             # 判断offset是否大于文件字节数,是则读取所有行,并返回最后一行
  16.             if abs(offset) >= file_size:
  17.                 f.seek(-file_size, 2)
  18.                 data1 = f.readlines()
  19.                 return data1[-1]
  20.             # 游标移动倒数的字节数位置
  21.             f.seek(offset, 2)
  22.             data1 = f.readlines()
  23.             # 判断读取到的行数,如果大于1则返回最后一行,否则扩大offset
  24.             if len(data1) > 1:
  25.                 return data1[-1]
  26.             else:
  27.                 offset *= 2


  28. file_name = 'asn_cn.conf'
  29. str1 = 'define china_asn = ['
  30. str5 = '];'
  31. datas_source = 'https://whois.ipip.net/countries/CN'

  32. response = urllib.request.urlopen(datas_source)

  33. html = response.read().decode('utf-8')

  34. with open(file_name, 'a') as file:
  35.     file.write(str1 + "\n")
  36. print("step 1.添加文件第一行字符串!")

  37. results = re.findall(', CN">AS(.*?)</a> </td>', html, re.S)
  38. for result in results:
  39.     with open(file_name, 'a') as file_object:
  40.         str2 = result.strip() + ',' + '\n'
  41.         file_object.write(str2)
  42. print("step 2.采集ASN号数据!")

  43. data2 = getEndLing(file_name)
  44. if data2:
  45.     str3 = data2.decode('utf-8').strip()


  46. with open(file_name,"r",encoding="utf-8") as f:
  47.     lines = f.readlines()
  48.     #print(lines)
  49. with open(file_name,"w",encoding="utf-8") as f_w:
  50.     for line in lines:
  51.         if str3 in line:
  52.             continue
  53.         f_w.write(line)
  54. print("step 3.提取数据完成!")

  55. str4 = str3[:-1]
  56. with open(file_name, 'a') as file:
  57.     file.write(str4 + "\n")
  58.     file.write(str5)

  59. print("step 4.生成中国区ASN成功!")
复制代码
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-10 16:15 | 显示全部楼层
评估了一下,觉得弄BGP不值得,没啥意思。我OSPF的方案现在是每周更新一次路由表,大不了每3天更新,反正就是crontab里写个数自动操作,足够了。

点评

嗯,0 0 * * * make -C /root/nchnroutes每天更新  详情 回复 发表于 2023-8-10 17:40
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-8-10 17:40 | 显示全部楼层
mantouboji 发表于 2023-8-10 16:15
评估了一下,觉得弄BGP不值得,没啥意思。我OSPF的方案现在是每周更新一次路由表,大不了每3天更新,反正就 ...

嗯,0 0 * * * make -C /root/nchnroutes每天更新
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛

只谈技术、莫论政事!切勿转播谣言!为了你也为了他人。
只谈技术、莫论政事!(点击见详情) 切记不要随意传播谣言,把自己的日子过安稳了就行,为了自己好也为了大家好。 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。

查看 »

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2025-5-31 23:38

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com

快速回复 返回顶部 返回列表