V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  JerryYuan  ›  全部回复第 3 页 / 共 4 页
回复总数  71
1  2  3  4  
如 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 允许转发都就通了。
284 天前
回复了 ahey 创建的主题 NAS 在 nas 上是优先套件还是 dockers?
Docker 隔离性好一些,容器里折腾不至于把宿主机折腾挂了,重新来过比较容易;套件就是所有套件进程混在一起,有可能会折腾挂宿主机,执行非常规操作前需要谨慎,但是因为不隔离,文件系统、网络栈上会少一些问题(当然 docker 熟悉了这点同样不是问题)。

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

PS:可能只是我不知道怎么搞
303 天前
回复了 coinbase 创建的主题 问与答 人类是否和宇宙同寿?在原子层面
身体里那些因聚变产生的元素的原子有没有可能比宇宙年轻个 10 的负几次方秒?
@docx 既要又要的完美实践
319 天前
回复了 JerryYuan 创建的主题 程序员 如何在 Node 中实现类似于 docker-cli 的效果
破案了,是 python 的缓冲区,python 在 docker 里的时候会把 stdout 内容给缓冲了,然后外边 docker 实际没有收到任何 stdout,自然 node 也什么都没拿到.
321 天前
回复了 GuluMashimaro 创建的主题 程序员 公司项目要用区块链技术
@chendy 没毛病,然后再写段程序检查后边的 hash ,对不上的及时重算 hash 。(你就说用没用区块链吧😏
nginx proxy manager+wireguard
题主提的几个特性都有了:面板 转发 私有化部署 内网 IP
这也是我正在用的方案。
当然是先创建一个 banner.txt 啦(doge
@YaD2x
之前有个公开的,太老了,不太好用,后来就自己封装了一个:
```dockerfile
FROM jlesage/baseimage-gui:ubuntu-20.04-v4

# change to tsinghua mirror
RUN sed -i "s@http://.*archive.ubuntu.com@http://mirrors.tuna.tsinghua.edu.cn@g" /etc/apt/sources.list &&\
sed -i "s@http://.*security.ubuntu.com@http://mirrors.tuna.tsinghua.edu.cn@g" /etc/apt/sources.list

# install dependencies
RUN apt-get update
RUN apt-get install -y --no-install-recommends \
libgtk-3-0 \
libnotify4 \
libnss3 \
libxss1 \
xdg-utils \
libatspi2.0-0 \
libsecret-1-0 \
libxtst6 \
libx11-xcb1 \
libdrm2 \
libgbm1 \
libasound2 \
language-pack-zh-hans \
fonts-wqy-microhei


# install baidu netdisk linux version
COPY baidunetdisk_4.17.7_amd64.deb /tmp/
RUN dpkg -i /tmp/baidunetdisk_4.17.7_amd64.deb

# config VNC
RUN set-cont-env APP_NAME "百度网盘" && \
set-cont-env HOME "/home/app"
RUN APP_ICON_URL="https://www.baidu.com/more/img/wangpanlogo.png" &&\
install_app_icon.sh "$APP_ICON_URL"


# prepare configurations
RUN mkdir -p /home/app/Downloads && \
mkdir -p /config/appConfig && \
ln -s /config/appConfig /home/app/.config && \
chown -R 1000:1000 /home/app
COPY startapp.sh /startapp.sh

# for debug usage
#RUN apt-get install -y vim
```
startapp.sh:
```shell
#!/bin/bash

export HOME=/home/app
export LANG=zh_CN.UTF-8

exec /opt/baidunetdisk/baidunetdisk --no-sandbox
```
baidunetdisk_4.17.7_amd64.deb 是我提前下好的客户端安装包,去官网下载新的替换名字应该就行了。
百度网盘 linux 客户端泡在 docker 里的方案能忍么。。。体验上基本做到开箱即用。。。
349 天前
回复了 yy306525121 创建的主题 宽带症候群 河南联通用 Nas 跑 PT 被限制上传了
上周给 NAT1 的宽带上钻了个洞,30M 上行小水管几乎能全天拉满,考虑 ISP 可能会检测,现在只敢开着 100KBps 的限速跑,毕竟我还得留着上传流量给老家电视的 jellyfin 客户端上传电影电视剧用😥
@Windyzhou 打满链路带宽是没问题的,之前在高铁上开 WiFi6 热点跟朋友的 IPhone 同步照片,一两个 GB 的视频图片交换完大概一两分钟吧。
Termux+http 服务
简陋点就是 python -m http.server
好看点+双向倒是可以 filebrowser
354 天前
回复了 klo424 创建的主题 NAS 有没有能直接在 jellyfin 上看的电视直播源?
以个人经历来看,靠谱的直播源基本只有两种,一种是自己抓包从运营商 IPTV VLAN 中抠出来的组播,毕竟交了钱,速度和稳定性有保障,缺点就是可能需要隔三差五重新抓包搞一波;另一个就是高校提供的 IPTV 源,自建服务,高校也花钱买了频道和节目,稳定性不如运营商的,但也只是类似于 UDP 那种相对不稳定,这种就是有个门槛,你得能接入高校内网或者教育网才有的用。
除了这两种,也不排除有好用的公网源,但迫于带宽成本,版权问题,大多都活的不长,体验也不佳。
1  2  3  4  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2773 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 32ms · UTC 13:08 · PVG 21:08 · LAX 05:08 · JFK 08:08
Developed with CodeLauncher
♥ Do have faith in what you're doing.