OpenWrt 21.02.2 是 OpenWrt 当前最新的稳定版, 内核 5.4.179, 这个内核已经内置了 Wireguard 模块
root@OpenWrt:~# uname -a
Linux Timecloud2 5.4.179 #0 SMP Wed Feb 16 20:29:10 2022 mips GNU/Linux
root@OpenWrt:~# lsmod|grep wireguard
ip6_udp_tunnel 1760 1 wireguard
libblake2s 1760 1 wireguard
libchacha20poly1305 4320 1 wireguard
libcurve25519_generic 10368 1 wireguard
udp_tunnel 2560 1 wireguard
wireguard 49168 0
对于从旧版本(<=19.xx)升级的设备,
Kernel包只需要刷入一次, 之后升级只需要刷 Sysupgrade 包. 下载固件时, 建议通过 https://firmware-selector.openwrt.org/ 这个界面搜索型号下载, 因为这里会同时提供Kernel和Upgrade的固件, 比较方便.
启动后, 会进行文件系统的初始化, 通过 mount_root 这个脚本将spi flash 挂载到文件系统,
df -h 看到的文件系统是临时的(你会看到一些和路由器内存容量相近的分区), 这时候如果设置了配置并重启路由器, 配置会丢失, 并且重启后ssh登录会发现key变了. 这时候运行reboot会卡住, 不能重启.df -h 看到的文件系统就能看到和flash大小相近的分区, 这时候做配置才能持久化, 并且reboot也正常工作了测试了 NeWiFi D1, D2, 迅雷 Timecloud, 运行正常无压力.
MT7620方案测试了极路由的极贰, 初始固件下运行速度正常, 但是安装 block mount 之后, 通过ping上游观察到的延迟增长很大, 经常会达到数百毫秒
因为 Wireguard 配置相对简单, 而命令行也直接易懂, 可以不需要界面辅助
# Install packages
opkg update
# 21.02 or above
opkg install wireguard-tools
下面的场景适用于已经配置了带外网IP的WG节点, 在LAN内配置WG节点连接到外网, 用于内网融合或内网穿透.
创建密钥
root@OpenWrt:/etc# wg genkey
kGLk+qcgYXVlu8hkSpj0DegQB4BlLW71e8eLiJdVJFY=
root@OpenWrt:/etc# echo "kGLk+qcgYXVlu8hkSpj0DegQB4BlLW71e8eLiJdVJFY="|wg pubkey
5R3mGHTm6FPzKutJf8X0Zfd7VKLPxc+J8suzGiKZX0I=
在 /etc/config/network 下添加配置
config interface 'wg0'
option proto 'wireguard'
option private_key '=====LAN WG=======私======钥='
option listen_port '50055'
list addresses '10.233.0.17/32'
config wireguard_wg0 'wgserver'
option public_key '=====外网WG=======公=======钥='
option endpoint_host '123.234.123.210'
option endpoint_port '50055'
option persistent_keepalive '25'
option route_allowed_ips '1'
list allowed_ips '10.233.0.0/24'
list allowed_ips '192.168.255.0/24'
以上的修改也可以通过uci命令完成
# Configure network
uci -q delete network.wg0
uci set network.wg0="interface"
uci set network.wg0.proto="wireguard"
uci set network.wg0.private_key="${WG_KEY}"
uci set network.wg0.listen_port="${WG_PORT}"
uci add_list network.wg0.addresses="${WG_ADDR}"
uci add_list network.wg0.addresses="${WG_ADDR6}"
# Add VPN peers
uci -q delete network.wgclient
uci set network.wgclient="wireguard_wg0"
uci set network.wgclient.public_key="${WG_PUB}"
uci set network.wgclient.preshared_key="${WG_PSK}"
uci add_list network.wgclient.allowed_ips="${WG_ADDR%.*}.2/32"
uci add_list network.wgclient.allowed_ips="${WG_ADDR6%:*}:2/128"
uci commit network
重启network
/etc/init.d/network restart
查看wireguard状态
wg show
编辑 /etc/config/firewall, 在 config zone 下添加 list network 'wg0' 和 option masq 1
config zone
option name lan
list network 'lan'
list network 'wg0' <----- 添加这行
option input ACCEPT
option output ACCEPT
option forward ACCEPT
option masq 1 <----- 添加这行
然后重启firewall
/etc/init.d/firewall restart
当连接数较大时, 如果去实时统计里查看连接, 会出现上面的错误, 导致luci页面完全失效. 这时候重启 rpcd 可以恢复
/etc/init.d/rpcd restart
PPPOE拨号时, OpenWrt 默认会将 MTU 设置为 1492, 这个配置对于宽带服务商设备的设置而言可能还是太大, 在访问量较大(例如观看视频时), 容易被上游设备封锁, 导致掉线. 建议通过ping测试实际的 MTU.
先通过tracert得到路由器的直接上级设备的IP, 下面的202.38.64.1是中科大的ns, 这个随便换成一个别的公网IP都行, 注意执行测试的电脑要直接连到这个路由器上
C:\Users\milton>tracert -d 202.38.64.1
Tracing route to 202.38.64.1 over a maximum of 30 hops
1 2 ms 1 ms 1 ms 192.168.6.1
2 33 ms 5 ms 4 ms 42.12.64.1
3 5 ms 5 ms 4 ms 218.221.245.21
PING 测试
关于 DF(Don't Fragment)标志
用来确定到达目的地的路径中最大传输单元 MTU 的大小, 通过在IP报头中设置不分片DF(Don't Fragment)标志来探测路径中的MTU值, 如果路径中设备的 MTU 值小于此报文长度, 并且发现DF标志, 就会发回一个Internet控制消息协议(ICMP)(类型3、代码4需要分片的消息ICMP_FRAG_NEEDED), 消息中包含它可接受的MTU值.
因为路由器IP是192.168.6.1, 其上级IP就是42.12.64.1, 需要对其检测 MTU , 首先确认路由器上没有做MTU限制(或者设置成1500)避免影响, 然后执行ping命令
# windows
ping -f -l 1436 42.12.64.1
# linux
ping -M do -s 1436 42.12.64.1
找到能得到正常的ping回显且不出现 DF fragmented 提示的最大的size, 在其基础上加28, 设置到 PPPOE 的 Advanced 选项中.
Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/
我有两个Rails模型,即Invoice和Invoice_details。一个Invoice_details属于Invoice,一个Invoice有多个Invoice_details。我无法使用accepts_nested_attributes_forinInvoice通过Invoice模型保存Invoice_details。我收到以下错误:(0.2ms)BEGIN(0.2ms)ROLLBACKCompleted422UnprocessableEntityin25ms(ActiveRecord:4.0ms)ActiveRecord::RecordInvalid(Validationfa
//1.验证返回状态码是否是200pm.test("Statuscodeis200",function(){pm.response.to.have.status(200);});//2.验证返回body内是否含有某个值pm.test("Bodymatchesstring",function(){pm.expect(pm.response.text()).to.include("string_you_want_to_search");});//3.验证某个返回值是否是100pm.test("Yourtestname",function(){varjsonData=pm.response.json
1.在Python3中,下列关于数学运算结果正确的是:(B)a=10b=3print(a//b)print(a%b)print(a/b)A.3,3,3.3333...B.3,1,3.3333...C.3.3333...,3.3333...,3D.3.3333...,1,3.3333...解析: 在Python中,//表示地板除(向下取整),%表示取余,/表示除(Python2向下取整返回3)2.如下程序Python2会打印多少个数:(D)k=1000whilek>1: print(k)k=k/2A.1000 B.10C.11D.9解析: 按照题意每次循环K/2,直到K值小于等
我正在尝试将以下SQL查询转换为ActiveRecord,它正在融化我的大脑。deletefromtablewhereid有什么想法吗?我想做的是限制表中的行数。所以,我想删除少于最近10个条目的所有内容。编辑:通过结合以下几个答案找到了解决方案。Temperature.where('id这给我留下了最新的10个条目。 最佳答案 从您的SQL来看,您似乎想要从表中删除前10条记录。我相信到目前为止的大多数答案都会如此。这里有两个额外的选择:基于MurifoX的版本:Table.where(:id=>Table.order(:id).
我目前正在用Ruby编写一个项目,它使用ActiveRecordgem进行数据库交互,我正在尝试使用ActiveRecord::Base.logger记录所有数据库事件具有以下代码的属性ActiveRecord::Base.logger=Logger.new(File.open('logs/database.log','a'))这适用于迁移等(出于某种原因似乎需要启用日志记录,因为它在禁用时会出现NilClass错误)但是当我尝试运行包含调用ActiveRecord对象的线程守护程序的项目时脚本失败并出现以下错误/System/Library/Frameworks/Ruby.frame
我有一个应用需要发送用户事件邀请。当用户邀请friend(用户)参加事件时,如果尚不存在将用户连接到该事件的新记录,则会创建该记录。我的模型由用户、事件和events_user组成。classEventdefinvite(user_id,*args)user_id.eachdo|u|e=EventsUser.find_or_create_by_event_id_and_user_id(self.id,u)e.save!endendend用法Event.first.invite([1,2,3])我不认为以上是完成我的任务的最有效方法。我设想了一种方法,例如Model.find_or_cr
在许多ruby类之间共享记录器实例的最佳(正确)方法是什么?现在我只是将记录器创建为全局$logger=Logger.new变量,但我觉得有更好的方法可以在不使用全局变量的情况下执行此操作。如果我有以下内容:moduleFooclassAclassBclassC...classZend在所有类之间共享记录器实例的最佳方式是什么?我是以某种方式在Foo模块中声明/创建记录器还是只是使用全局$logger没问题? 最佳答案 在模块中添加常量:moduleFooLogger=Logger.newclassAclassBclassC..
原始问题Letd(n)bedefinedasthesumofproperdivisorsofn(numberslessthannwhichdivideevenlyinton).Ifd(a)=bandd(b)=a,whereab,thenaandbareanamicablepairandeachofaandbarecalledamicablenumbers.Forexample,theproperdivisorsof220are1,2,4,5,10,11,20,22,44,55and110;therefored(220)=284.Theproperdivisorsof284are1,2,
如何在出现异常时指定全局救援,如果您将Sinatra用于API或应用程序,您将如何处理日志记录? 最佳答案 404可以在not_found方法的帮助下处理,例如:not_founddo'Sitedoesnotexist.'end500s可以通过调用带有block的错误方法来处理,例如:errordo"Applicationerror.Plstrylater."end错误的详细信息可以通过request.env中的sinatra.error访问,如下所示:errordo'Anerroroccured:'+request.env['si