分类目录归档:Seedbox

Online Dedibox IPv6 配置

Online 的 IPv6 配置真是不一般地蛋疼,官方文档上面那个 DHClient6 完全不能用,在 U2 上有人推荐使用 Dibbler,但是在上一台挂掉的盒子上也还是不好用,平均三天会挂掉一次。在最新的一台盒子上尝试放弃 Online 自己的 IPv6 线路,使用 HE 的 TunnelBroker,然而根本没办法加载网络设备,我也是没有任何办法。

现在又找到了一版 DHClient6 配置,记录如下:

将如下内容写入 /etc/network/interfaces

iface eno1 inet6 static
  address <one IPv6 address from your block from Online>
  netmask 56
  accept_ra 1
  pre-up /sbin/dhclient -1 -v -pf /run/dhclient6.eno1.pid -lf /var/lib/dhcp/dhclient6.eno1.leases -cf /etc/dhcp/dhclient6.conf -6 -P eno1

创建 /etc/dhcp/dhclient6.conf

interface "eno1" {
  send dhcp6.client-id <your DUID for the subnet>;
  request;
}

之后运行 systemctl reload-or-restart networking.service

按照我之前的经历,DHClient6 获得的 IPv6 地址只能存活 12 小时,所以我先继续配置,等待 12 小时之后再来更新。

更新:已经将近 24 小时,目前 IPv6 仍然存活,认为配置成功。

从零开始的盒子:Online Dedibox 盒子配置记录

讲真,我也记不得这是我第几次配盒子了,但是这次我的主力盒子 & 杂活独立服务器挂掉还是给我造成了很大的损失。一方面,我损失了所有的盒子配置,包括澄空学园字幕组和 LoliHouse 的公网分流记录和文件,还有一些刷 PT 的环境;另一方面,我损失了虚拟机上的 Windows 压制环境;还有一些特定用途的杂活类服务,比如 Node.js 环境、Python / Anaconca 环境等等。为了以后维护方便,也为了给有同样需求的人一个参考,我在这里记录一下配置的历程。

先说点别的吧,关于这个盒子为什么会突然挂掉。起因是昨天(2017 年 10 月 9 日)下午至晚上,某国的大型网络过滤系统突然发威,在全国范围内干掉了我盒子的 IP 地址,我就很奇怪,我盒子一不做代理、二不放网站,就几个 BT 客户端的 WebUI 跑在上面,怎么就无缘无故给我过滤掉了。发现了 IP 问题之后,我尝试订购了一个 Failover IP 地址作为备用 IP。在配置的时候,由于我想要把这个 IP 作为我的主 IP 而改动了路由表,然后就被上级交换机锁了网络端口,与客服沟通之后,由于问题在短时间内无法解决,进而选择换机,我也丢失了所有数据。

先整理一下大致需求:

  1. Server As a Seedbox
    1. Update Kernel & BBR & BBR_powered
    2. Deluge ( Main BT/PT Client )
    3. Transmission ( Secondary PT Client )
    4. UTserver ( Specialized BT Client for SumiSora_Initial )
    5. Tixati ( Specialized BT Client for SumiSora_Main )
    6. qBittorrent ( Specialized BT Client for LoliHouse )
    7. Jailed SSH User ( For SumiSora_Initial SFTP Upload )
    8. SSHFS (Map Wishosting Stroage KVM Disk, not decided yet; maybe let Tixati work on this disk )
  2. Server As an Encoding Server
    1. VMware WorkStation
    2. gcc6
    3. Windows 7 & Activation
    4. Runtime Library
    5. Python & VapourSynth
    6. BaiduNetDisk
  3. Server As a Computer
    1. Node.js Http Server
    2. Anaconda Environment in Windows VM
    3. IPv6 Configuration
    4. Xfce & VNCserver
    5. Wine
    6. Firefox
  4. Server As a Storage Box
    1. Jailed SSH User ( Website Backup )

接下来开始安装:

  • 系统安装

系统仍然选择了我熟悉的 Ubuntu 16.04 LTS Server,由于我的服务器硬盘是 SoftRaid,在配置的时候还遇到了一些问题。最主要的问题就是 SWAP 分区不能使用 RAID0,如果这么选择安装操作系统就会报错。

  • 预配置及软件源添加
sudo apt-get install python-software-properties software-properties-common
sudo add-apt-repository ppa:transmissionbt/ppa
sudo add-apt-repository ppa:deluge-team/ppa
sudo add-apt-repository ppa:qbittorrent-team/qbittorrent-stable
curl -sL https://deb.nodesource.com/setup_9.x | sudo -E bash -
sudo dpkg --add-architecture i386 
wget -nc https://dl.winehq.org/wine-builds/Release.key 
sudo apt-key add Release.key 
sudo apt-add-repository https://dl.winehq.org/wine-builds/ubuntu/
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
  • 安装一系列软件
sudo apt update
sudo apt install xfce4 vnc4server deluged deluge-web qbittorrent transmission-daemon sshfs nodejs firefox build-essential fonts-noto gtk3-engines-xfce xfce4-goodies xfce4-power-manager
sudo apt-get install --install-recommends winehq-stable
sudo apt-get install gcc-7 g++-7
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 60 --slave /usr/bin/g++ g++ /usr/bin/g++-7
sudo update-alternatives --config gcc
  • Kernel Update & BBR_powered

在 http://kernel.ubuntu.com/~kernel-ppa/mainline/ 上下载 4.11 版本的内核,4.12 存在 VirtIO 方面的 bug,4.13+ 无法适配 BBR_powered 模块,所以采用 4.11.12

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.11.12/linux-headers-4.11.12-041112_4.11.12-041112.201707210350_all.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.11.12/linux-headers-4.11.12-041112-generic_4.11.12-041112.201707210350_amd64.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.11.12/linux-image-4.11.12-041112-generic_4.11.12-041112.201707210350_amd64.deb
sudo dpkg -i linux*.deb
sudo update-grub
sudo reboot

wget -O ./tcp_tsunami.c https://down.gloriousdays.pw/Tools/tcp_tsunami.c
echo "obj-m:=tcp_tsunami.o" > Makefile
make -C /lib/modules/$(uname -r)/build M=`pwd` modules CC=/usr/bin/gcc
sudo cp tcp_tsunami.ko /lib/modules/$(uname -r)/kernel/drivers/
echo 'tcp_tsunami' | sudo tee -a /etc/modules
sudo depmod
sudo modprobe tcp_tsunami
sudo bash -c "echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf"
sudo bash -c "echo "net.ipv4.tcp_congestion_control=tsunami" >> /etc/sysctl.conf"
sudo sysctl -p
  • IPv6 配置

鉴于 Online 的蛋疼实现,另起一篇在这里

  • BT 客户端配置
sudo systemctl stop transmission-daemon.service
sudo vi /var/lib/transmission-daemon/info/settings.json
#Change the following lines to the content that you want
"rpc-password": "{62b16db87b89a91dd49a5110a7cafc06d20eb4f2wtK6kqPj",
"rpc-username": "transmission",
"rpc-whitelist": "*",
"umask": 2,

一、utserver
这个比较简单

前往utserver的官网: http://www.utorrent.com/downloads/linux 下载编译好的程序
文件名一般是utserver.tar.gz
注意适用的发行版。

目前最新的3.3已经可用。

部署:
sudo tar xvzf utserver.tar.gz -C /opt/

#释放到opt目录

sudo chmod -R 777 /opt/utorrent-server-alpha-v3_3/
#给予目录权限,这里的目录名视情况而定。可以先敲sudo chmod -R 777 /opt/ut 再按下TAB自动补全

sudo ln -s /opt/utorrent-server-alpha-v3_3/utserver /usr/bin/utserver

#链接可执行文件,建立快捷方式。目录名问题同上。
utserver -settingspath /opt/utorrent-server-alpha-v3_3/
#(测试)运行。目录名问题同上。

如果这是没有出错提示,恭喜已经成功了
访问 [server_ip]:8080/gui 登陆webui
用户名 admin, 密码为空
登陆后开始设置

如果提示libssl.so package missing
运行
sudo apt-get install libssl0.9.8:i386
#补全依赖

因为一旦登出,utserver -settingspath /opt/utorrent-server-alpha-v3_3 这个命令终止导致ut停止运行
可以使用tmux或者nohup后台运行
nohup utserver -settingspath /optutorrent-server-alpha-v3_3 >/dev/null 2>&1 &

[Unit]
Description=utserver
After=network-online.target

[Service]
ExecStart=/usr/bin/sudo -u <username> /path/to/utserver/bin -settingspath /path/to/utserver/dir/
ExecStop=kill -9 $(cat /run/utserver.pid)
Restart=always
PIDFile=/run/utserver.pid
TimeoutStopSec=300
RestartSec=3

[Install]
WantedBy=multi-user.target
  • VNCserver 配置

修改 ~/.vnc/xstartup 以启动 Xfce 桌面环境

#!/bin/sh

# Uncomment the following two lines for normal desktop:
# unset SESSION_MANAGER
# exec /etc/X11/xinit/xinitrc

[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
#x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#x-window-manager &
startxfce4 &

修改 /usr/bin/vncserver 中 VNCserver 的配置,这个需要 root 权限

$geometry="1024x768"
$vncPort = 5900 + $displayNumber
$depth = 16 #(may cause problems with Windows VM if set to 24)
  • Jailed SSH User 进一步配置

由于我不想打开 SSH 的 Password Authentication, 但是 LNMP 脚本的备份又需要通过密码认证的 SSH 连接实现,因此寻找了可以打开单个用户的密码认证的方法:

在 /etc/ssh/sshd_config 中写入如下代码块即可

Match User <username1>,<username2>
    PasswordAuthentication yes
Match all  #This line is to end the match block
  • systemd 自启动脚本的设定

参照之前我写的这篇文章和 SSHFS 设置的这篇文章

Ubuntu 16.04 上 SSHFS 的配置

为什么要想起来折腾 SSHFS,这个就说来话长了。简单地说,就是买到了 Treudler 家 1TB 硬盘 10 欧/季度的 VPS,鉴于之前在上面跑 Deluge 被商家封过一次,现在我又好死不死想再折腾一次。但是呢,OpenVZ 架构的 VPS 上面跑的程序对于用户来说是毫无隐私可言的,因此运行 BT 客户端是不可能的了,因此想到了将它的硬盘挂载到其他 VPS,然后进行下载的做法。

经过一番查找,我最终选定了 SSHFS 的方案。选择这个方案的理由主要是无需在客户端,即 Treudler VPS 一方进行任何额外配置,只需要有基本 SSH 能力即可,最大程度减少在 OpenVZ 上折腾被商家刻意针对的可能性。此外,SSH 连接是加密的,商家也不会知道我在他们的 VPS 上进行大量的 BT 操作,唯一需要注意的可能是硬盘的使用,这一点会不会被商家封停还有待观察。

SSHFS 的配置很简单,在需要挂载的一方执行 apt install sshfs 即可获得所有需要的软件包。需要注意的一点是,SSHFS 基于 SFTP 实现,这不可避免存在一个登陆的问题,这个可以通过生成 SSH Key 自动登陆的方法解决,具体命令如下:

ssh-keygen -t rsa  #make a ssh key pair under ~/.ssh/, usually the name is "id_rsa" and "id_rsa.pub"

然后将 id_rsa.pub 中的内容写入被挂载一方的 ~/.ssh/authorized_key 文件中,将 /etc/ssh/ssh_config 文件拷贝一份存为 ~/.ssh/config,然后写入相应的私钥路径:IdentityFile   /path/to/your/private/key

这里需要注意的一点是,如果是本地上传私钥到 ~/.ssh/目录下,需要调整权限为 600,默认的 644 权限会导致 SSH 拒绝使用该私钥进行认证。

之后可以使用 sshfs 命令行工具实现挂载,我没有选择在 /etc/fstab 中写入挂载点的方法,而选择了 systemd 自启动脚本,脚本如下:

[Unit]
Description=SSHFS
After=network-online.target

[Service]
Type=forking
ExecStart=/usr/bin/sudo -u <username> /usr/bin/sshfs -o reconnect -o cache=yes -o follow_symlinks username@host:/path /mountpoint
ExecStop=/usr/bin/sudo -u <username> /bin/fusermount -u /mountpoint
ExecStartPre=-/usr/bin/sudo /bin/umount -l  /mountpoint
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

ExecStartPre 选项是为了强制清除挂载点上的任何东西,以一个干净的方式启动。

VMware 在 Ubuntu 上运行 Windows 虚拟机会造成 khugepaged CPU 高占用的问题

这个问题一直存在,没有很好的解决方法,是内核中 transparent huge page 不断尝试整理 vmware-vmx 申请的大量内存导致的。在 khugepaged 运行时会造成 VMware 虚拟机卡顿,且系统整体会非常慢。

可以在 /etc/rc.local 中写入如下代码关闭这个功能:

if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
   echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
   echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi

 

部分 Seedbox 使用的 systemd 自动启动脚本

本文仅供记录使用,可能将合并入将来撰写的系列文章:”大刷子的养成方法“

所有脚本存放于 /etc/systemd/system 目录下

Deluge 及其 WebUI 的 SystemD 启动脚本:

[Unit]
Description=Deluged
After=network-online.target

[Service]
ExecStart=/usr/bin/deluged -d
ExecStop=/bin/kill -9 $(/bin/cat /run/deluged.pid)
Restart=always
PIDFile=/run/deluged.pid
TimeoutStopSec=300

[Install]
WantedBy=multi-user.target
[Unit]
Description=Deluge-web
After=network-online.target deluged.service
Wants=deluged.service

[Service]
ExecStart=/usr/bin/deluge-web
ExecStop=/bin/kill -9 $(/bin/cat /run/deluge-web.pid)
Restart=always
PIDFile=/run/deluge-web.pid

[Install]
WantedBy=multi-user.target

VNCserver 启动脚本:

[Unit]
Description=VNCserver
After=syslog.target network.target

[Service]
ExecStart=/usr/bin/sudo /usr/bin/vncserver :1
ExecStop=/usr/bin/sudo /usr/bin/vncserver -kill :1
ExecStartPre=-/usr/bin/sudo /usr/bin/vncserver -kill :1 > /dev/null 2>&1
Restart=always
Type=forking
#PIDFile=/run/vncserver.pid

[Install]
WantedBy=multi-user.target

OpenVZ 下 TunnelBroker 实现(借助 tb_tun 实现):

[Unit]
Description=ipv6tb
After=network-online.target

[Service]
Type=forking
ExecStart=/usr/bin/sudo /etc/init.d/ipv6tb start
ExecStop=/usr/bin/sudo /etc/init.d/ipv6tb stop
Restart=always

[Install]
WantedBy=multi-user.target

执行 systemctl enable <serviceName> 安装服务

写入完成之后,执行 systemctl daemon-reload 载入 service 文件,再使用 systemctl start <serviceName> 运行服务,或者重启测试

一些说明:

  • Type=forking 代表该启动脚本需要 systemd 跟踪 fork 出来的进程,在执行脚本的时候可能需要,以及 vncserver 这样需要启动桌面环境(其他进程)的启动项
  • VNCserver 采用 sudo 运行的原因是需要指定运行环境变量,如果直接运行 /usr/bin/vncserver 会有 vncserver: The HOME environment variable is not set. 的错误,为了方便直接指定 sudo 采用 root 环境运行
  • Systemd 脚本需要写绝对路径,不能写相对路径