JerryYuan 最近的时间轴更新
JerryYuan

JerryYuan

V2EX 第 657743 号会员,加入于 2023-11-01 17:08:44 +08:00
JerryYuan 最近回复了
10 天前
回复了 tool2dx 创建的主题 宽带症候群 网线的颜色顺序重要吗?
@tool2dx 最近刚自己做了个 PoE 受电的交换机,了解了一些 PoE 相关的知识。

其实网线并不是直接接到网络接口芯片上的,而是四对线通过四个变压器和网络接口出来的线耦合在一起。于是就实现了网线的电势可以随意变化(其实最后还是靠电阻和地有关联),对于它是 48V(poe)还是 0V(非供电)并不重要。于是就可以在网线的线对之间搞出一个电压用来供电,通过网络变压器以后,变化的网络信号和恒定的供电电压就隔离开了。

因为百兆只用四根线,于是另外四根线就可以抽走直接通个电压,这种就是非标的 PoE ,简单粗暴,一头通个 12V 48V 220V(很危险,但能用,且很受二把刀弱电师傅欢迎),另一头的设备直接受电就能用。

但是到了千兆,8 跟线都要跑数据信号,就没有空闲的线给供电用了,只能抽出两组(4 线)同时传信号和供电,再在网络变压器分离,网络变压器网线侧中间抽头出来电源,对侧线圈出来数据信号。这种也可以直接加电做非标的 PoE ,但是非标 PoE 相当于网口一直带电,有些隔离不好或者不支持非标 PoE 的口子还是有可能被高电压打坏接口。

于是引出了 IEEE 的标准 PoE ,即两边还要加电源管理芯片(供电端 PSE,受电端 PD),决定线上要不要带电。PD 会和 PSE 协商,然后 PSE 才会让网线带电,这种一般是 48V ,PSE 检测到对端不支持 PoE 的话是会关掉电源输出的。这种也是 PoE 交换机使用的 PoE 模式。
25 天前
回复了 BaymaxK 创建的主题 程序员 这愚人节彩蛋...
话说哦,设置中明确提供一个全局彩蛋开关是不是会更好呢(只提供全局开关,不提供具体彩蛋的开关和信息),另外触发彩蛋后 hover 能给个提示并一键关闭全局彩蛋开关。这样既能保留彩蛋,又可以在严肃场合提前/及时关掉彩蛋。
如 12#所说,改过一版,基本只替换了 luci 读配置那些东西。
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
#
# Copyright (C) 2018 Aleksandr V. Piskunov <[email protected]>.
# Copyright (C) 2015-2018 Jason A. Donenfeld <[email protected]>. All Rights Reserved.
#
# This watchdog script tries to re-resolve hostnames for inactive WireGuard peers.
# Use it for peers with a frequently changing dynamic IP.
# persistent_keepalive must be set, recommended value is 25 seconds.
#
# Run this script from cron every minute:
# echo '* * * * * /usr/bin/wireguard_watchdog' >> /etc/crontabs/root

check_peer_activity() {
local iface=$1
local public_key=$2
local endpoint_host=$3
local endpoint_port=$4
local persistent_keepalive
local last_handshake
local idle_seconds

persistent_keepalive=$(wg show ${iface} persistent-keepalive | grep ${public_key} | awk '{print $2}')

echo "checking $1 $2 $3 $4..."

# only process peers with endpoints and keepalive set
echo 1
[ -z ${endpoint_host} ] && return 0;
echo 2
[ -z ${persistent_keepalive} -o ${persistent_keepalive} = "off" ] && return 0;
echo 3

# skip IP addresses
# check taken from packages/net/ddns-scripts/files/dynamic_dns_functions.sh
local IPV4_REGEX="[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}"
local IPV6_REGEX="\(\([0-9A-Fa-f]\{1,4\}:\)\{1,\}\)\(\([0-9A-Fa-f]\{1,4\}\)\{0,1\}\)\(\(:[0-9A-Fa-f]\{1,4\}\)\{1,\}\)"
local IPV4=$(echo ${endpoint_host} | grep -m 1 -o "$IPV4_REGEX$") # do not detect ip in 0.0.0.0.example.com
local IPV6=$(echo ${endpoint_host} | grep -m 1 -o "$IPV6_REGEX")
echo 4
[ -n "${IPV4}" -o -n "${IPV6}" ] && return 0;
echo 5

# re-resolve endpoint hostname if not responding for too long
last_handshake=$(wg show ${iface} latest-handshakes | grep ${public_key} | awk '{print $2}')
[ -z ${last_handshake} ] && return 0;
idle_seconds=$(($(date +%s)-${last_handshake}))
[ ${idle_seconds} -lt 150 ] && return 0;
logger -t "wireguard_monitor" "${iface} endpoint ${endpoint_host}:${endpoint_port} is not responding for ${idle_seconds} seconds, trying to re-resolve hostname"
wg set ${iface} peer ${public_key} endpoint "${endpoint_host}:${endpoint_port}"
}

# query ubus for all active wireguard interfaces
wg_ifaces=$(wg show interfaces | awk '{print $1}' | tr '\n' ' ')

# check every peer in every active wireguard interface
for iface in $wg_ifaces; do
config_file="/etc/wireguard/${iface}.conf"
# parsing wireguard config file
eval `cat $config_file | tr -d ' ' |awk -F '=' '
BEGIN {peer_index = 0;status = 0;}
# close previous peer section
status==1 && $1 ~ /^\[/ {status = 0;}
# open new peer section
status==0 && $1 == "[Peer]" {status = 1;peer_index++;}
# parse PublicKey in Peer section
status==1 && $1 == "PublicKey" {public_key = \$0;sub(/PublicKey=/, "", public_key);printf("public_key%d=%s\n", peer_index, public_key);}
# parse Endpoint in Peer section
status==1 && $1 == "Endpoint" {printf("endpoint%d=%s\n", peer_index, $2);}
END {printf("peer_count=%d\n",peer_index)}'`

for ((i = 1; i <= $peer_count; i++)); do
public_key_var="public_key$i"
endpoint_var="endpoint$i"
public_key="${!public_key_var}"
endpoint="${!endpoint_var}"

endpoint_host=`echo "${endpoint}"|awk -F '[:]' '{print $1}'`
endpoint_port=`echo "${endpoint}"|awk -F '[:]' '{print $2}'`
check_peer_activity "${iface}" "${public_key}" "${endpoint_host}" "${endpoint_port}"
done
done
IPv4 和 IPv6 本质上已经是两种互不兼容 IP 协议了,不然铺开 IPv6 就不需要花那么大力气去更新骨干网设备了。因为二者有血缘关系,所以有些好的设定是一脉相承的。但是切忌这俩有点像就把彼此的特性往自己身上套。
@didididididi 定制一个蓝色背景 KT 板,印上"您已进入视频监控区域",主打就是一个威慑是吧😂
@nealot 目前正在用 wireguard+ddns+wireguard_watchdog ,调好以后基本上就没掉过线。wireguard 能搞点对点连接,ddns 帮你记录动态变化的地址,wireguard_watchdog 是个从 openwrt 的 luci-proto-wireguard 里扣出来的脚本,用来定时检测每个 peer 的链路是否还活着,断掉的就强制重新解析然后更新地址。
这个脚本能实现不重启端口地更新地址恢复链路,恢复其中一个边不影响其他边的链路。

剩下的就是 11 楼写的,两边用不同的网段,直接 AllowIPs 允许转发都就通了。
82 天前
回复了 ahey 创建的主题 NAS 在 nas 上是优先套件还是 dockers?
Docker 隔离性好一些,容器里折腾不至于把宿主机折腾挂了,重新来过比较容易;套件就是所有套件进程混在一起,有可能会折腾挂宿主机,执行非常规操作前需要谨慎,但是因为不隔离,文件系统、网络栈上会少一些问题(当然 docker 熟悉了这点同样不是问题)。

作为 Linux 吹,我是推荐 Docker 的,而且 NAS 系统只管存储,额外开虚拟机/物理机挂载 NAS 的 NFS 跑应用。
要不搭个 gitlab(重量级) gitea(轻量级)直接代码托管一步到位?目前看这俩基本能做到私有化部署下替代 github 的操作。Gitlab 我记得也是有 Gist 类似功能的,就是吃资源一些。
92 天前
回复了 dc2002007 创建的主题 Java 为何不选 Hibernate,非要 MyBatis?
大概是 hibernate 不能方便的跨几个表联查/用 sql 的骚操作?

PS:可能只是我不知道怎么搞
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2842 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 12ms · UTC 06:50 · PVG 14:50 · LAX 23:50 · JFK 02:50
Developed with CodeLauncher
♥ Do have faith in what you're doing.