Install ruTorrent on Docker

cd ~
mkdir rutorrent
chmod o+w rutorrent
cd rutorrent
printf "raymond:$(openssl passwd -crypt raymond)\n" >> .htpasswd
docker run -dt --name rtorrent-rutorrent -p 8081:80 -p 49160:49160/udp -p 49161:49161 -v ~/rutorrent:/downloads -e USR_ID=1000 -e GRP_ID=1000 diameter/rtorrent-rutorrent:latest

Access web UI at http://<IP>:8081, username and password is raymond

在Docker中运行OpenWrt教程

参考:
https://github.com/luoqeng/OpenWrt-on-Docker
斐讯N1小钢炮固件docker安装最新版openwrt实现旁路由

软件环境:
Win10中运行的Hyper-V中运行的Debian中运行的Docker

网络环境:
主路由:192.168.2.1/24
Win10(主机):192.168.2.5
Debian(Hyper-V桥接到局域网):192.168.2.8
OpenWrt(Debian中的Docker中运行):192.168.2.2

一、开启网卡混杂模式(重要)

首先要开启Hyper-V中Debian虚拟机网卡的混杂模式,否则OpenWrt无法连网,主机也ping不通OpenWrt。

Enable promiscuous mode in Hyper-V:
Hyper-V > VM > Settings > NIC (click plus) > ADVANCED FEATURE > Enable MAC Address Spoofing
(https://serverfault.com/questions/812528/docker-container-connection-in-macvlan-network)

如果是Linux环境,那么用ip link set eth0 promisc on即可。

二、选择OpenWrt镜像

推荐两个:
https://www.right.com.cn/forum/thread-866582-1-1.html
https://www.right.com.cn/forum/thread-762559-1-1.html

三、将OpenWrt镜像导入Docker

mkdir ~/openwrt
mkdir /mnt/openwrt
cd ~/openwrt
# 将下载好的OpenWrt镜像放到这里
mount -o loop openwrt-x86-64-rootfs-squashfs.img /mnt/openwrt
cd /mnt/openwrt/
tar zcf ~/openwrt/openwrt.tgz *
cd ~/openwrt
docker import openwrt.tgz openwrt
umount /mnt/openwrt
rm -r /mnt/openwrt

四、运行OpenWrt容器

docker network create -d macvlan --subnet=192.168.2.0/24 --gateway=192.168.2.1 -o parent=eth0 macvlan0 # 创建docker macvlan网络
docker run --restart=always --privileged --name='openwrt' --net=macvlan0 --ip=192.168.2.2 --detach=true openwrt /sbin/init # 运行openwrt容器
docker exec -it openwrt /bin/sh # 进入openwrt容器shell
vi /etc/config/network # 编辑openwrt网络配置
```
config interface 'lan'
        option type 'bridge'
        option ifname 'eth0'
        option proto 'static'
        option ipaddr '192.168.2.2'
        option netmask '255.255.255.0'
        option ip6assign '60'
        option gateway '192.168.2.1'
        option dns '192.168.2.1'
```
/etc/init.d/network restart # 重启网络

五、Docker宿主机(Debian)配置网络

注意:修改网络配置可能会让你失去对宿主机(Debian)的网络连接。

  • 临时配置网络(重启后失效)
# 添加macvlan桥接网卡,并将192.168.2.8分配到该网卡
ip addr del 192.168.2.8/24 dev eth0; \
ip link add macvlan link eth0 type macvlan mode bridge; \
ip addr add 192.168.2.8/24 dev macvlan; \
ip link set macvlan up; \

# 替换默认路由到macvlan网卡
ip route del 192.168.2.0/24 dev eth0; \
ip route del default; \
ip route add 192.168.2.0/24 dev macvlan; \
ip route add default via 192.168.2.1 dev macvlan;
  • 永久配置网络(重启也能生效)

宿主机(Debian)修改网络配置:vi /etc/network/interface

将:

auto eth0
iface eth0 inet static
  address 192.168.2.8
  broadcast 192.168.2.255
  netmask 255.255.255.0
  gateway 192.168.2.1
  dns-nameservers 192.168.2.1

修改为:

auto eth0
iface eth0 inet manual

auto macvlan
iface macvlan inet static
  address 192.168.2.8
  netmask 255.255.255.0
  gateway 192.168.2.1
  dns-nameservers 192.168.2.1
  pre-up ip link add macvlan link eth0 type macvlan mode bridge
  post-down ip link del macvlan link eth0 type macvlan mode bridge

修改完后重启网络systemctl restart networking或者重启系统查看效果。

六、打开Openwrt管理页面

此时,如果配置正常的话,在局域网中就可以访问 http://192.168.2.2/ 来打开OpenWrt的管理页面了,一般情况下root密码为password

蜗牛星际折腾记录

几个月前入手了一台蜗牛星际C款单网口,现将折腾过程记录一下。

一、硬件改造

蜗牛星际自带了不靠谱的内存、SSD和电源,我用以前笔记本拆下来的内存替代了内置的,然后插了一块1T的硬盘。

蜗牛星际自带的CPU风扇以及电源风扇声音都特别大,这里我采用的0成本改造方案是按什么值得买上一篇帖子说的把电源和CPU风扇串接到一个USB或者SATA的5V供电口(原本是12V),这样总算安静了。

有个坑要注意一下:主板上只有一个SATA口,四个盘位的SATA线是连接到主板的一个芯片转接出来的四个SATA口。如果把系统安装到硬盘开机不能识别启动,解决方法是要么把系统装到U盘或者mSATA SSD,要么把硬盘的SATA线接到主板内存旁边的SATA口。

二、黑群晖

什么值得买上有大量教程,按着教程来就可以。

本来装了黑群晖用了很久,还算比较稳,只有一次网口假死,只能强行重启。后来我突然觉得主板上的HDMI接口浪费了,而且我发现我只用群晖里的Docker和虚拟机套件,Docker里跑了frpc、rtorrent、jellyfin和ocserv,虚拟机里跑了Openwrt做科学上网旁路由。Docker和虚拟机其实不用群晖也能跑,因此我有了替代群晖的打算。

三、Proxmox(PVE)

安装PVE可以参考这篇教程。PVE可以看作基于网页端操作的虚拟机主机系统,很好用。我在PVE中装了Openwrt以及OpenMediaVault(OMV)。Openwrt还是做科学上网旁路由,OMV可以方便的实现一些NAS的功能,而且也有Docker插件。然后我开始研究让HDMI接口发挥作用,让核显直通到OMV,结果是J1900这款CPU不支持vt-d,无法直通显卡。

四、OpenMediaVault(OMV)

后来我又给蜗牛星际装了OMV。其实OMV与PVE都基于Debian,OMV是一个NAS系统,现在有不少N1等矿渣刷armbian让后装OMV当NAS的教程。

在OMV安装完成后还可以安装XFCE、Kodi,这样HDMI接上显示器可以播放视频,蜗牛星际又可以当HTPC用(教程链接)。虽然J1900性能差,但是播放一般画质的视频还凑合。

要在OMV里跑Openwrt就不好弄了,开始我用OMV里的VirtualBox插件,但是后来发现VirtualBox性能差,空载占用CPU高,遂放弃。然后研究OMV里装KVM虚拟机来跑Openwrt,总算跑起来了,但是卡在配置桥接网卡这一步了。为啥难搞呢?因为需要手动配置网络,一不小心网就连不上了,蜗牛星际就失联了,还得把键盘鼠标显示器接上搞让人十分抓狂。而且手动修改网络配置可能与OMV自动配置网络冲突。

五、LibreELEC

LibreElec的标语是“Just enough OS for KODI”,这是一个专门用来运行Kodi的系统。我也装到蜗牛星际上试了一下,可以播放画质一般的视频。这个与OMV相比,系统资源占用应该更低一些。另外这个系统还有Docker插件。怎么跑openwrt没有研究。

六、Windows 10

不装Windows Server的原因是对显卡声卡支持较差,而且Windows 10也够用。但是最好装精简版的,因为J1900性能较差。整体上J1900跑Win10略卡,但是凑合用也没问题。由于Win10在机械硬盘上运行较卡,我又买了一块128G mSATA SSD准备把Win10迁移过去。

我给Win10开启了局域网共享(记得开启SMB 1.0),然后安装了:

  • Teamviewer Host —— 远程桌面控制
  • uTorrent —— 挂PT
  • Plex Media Server —— 自动收集整理媒体库
  • Hyper-V —— 跑虚拟机

Hyper-V里跑了一个Debian,一个Openwrt,都是设置使用外部网络(桥接)。然后在Debian里跑Docker容器,我目前跑了ocserv和frpc。

后来我发现Docker也可以跑Openwrt,这样就可以少运行一个虚拟机。我会在下一篇文章介绍方法。

在群晖Docker中使用Sakura Frp客户端

2019年8月24日更新:Sakura Frp已支持原版Frpc连接,详见官网。

Sakura Frp 网址:https://www.natfrp.org

命令参考:

mkdir ~/sakura_frp
cd ~/sakura_frp
wget https://cdn.tcotp.cn:4443/client/Sakura_frpc_linux_amd64.tar.gz
tar zxvf Sakura_frpc_linux_amd64.tar.gz
chmod +x Sakura_frpc_linux_amd64

root@NAS:~/sakura_frp# cat Dockerfile
FROM alpine
RUN apk upgrade && apk add --no-cache ca-certificates
ADD Sakura_frpc_linux_amd64 /
ADD run_sakurafrp.sh /
ENTRYPOINT ["/run_sakurafrp.sh"]

root@NAS:~/sakura_frp# cat run_sakurafrp.sh
#!/bin/sh
/Sakura_frpc_linux_amd64 << EOF
{{用户名}}
{{密码}}
{{服务器ID}}
EOF


docker stop sakura_frp
docker rm -f sakura_frp
docker rmi sakura_frp

chmod +x run_sakurafrp.sh
docker build . -t sakura_frp
docker run -d --restart=always --net=host --name sakura_frp sakura_frp
docker logs -f sakura_frp

群晖使用Docker搭建AnyConnect VPN教程

本来我是用群晖自带的VPN Server搭建OpenVPN服务端来访问家里内网。由于家里没有公网IP,通过国外VPS搭建frp做端口映射,但是如此一来OpenVPN连接就会被墙检测到协议并阻断,可以通过再搭建一个SS(R)或者其他代理作为OpenVPN前置代理解决,但是太过麻烦。ocserv (AnyConnect VPN服务端) 属于SSL VPN,协议特征与HTTPS类似,因此不会被检测并阻断。下文介绍在群晖使用Docker搭建ocserv并设置只访问内网。

使用的Docker镜像:
https://hub.docker.com/r/vimagick/ocserv/
GitHub地址:
https://github.com/vimagick/dockerfiles/tree/master/ocserv

SSH登录群晖,输入sudo -i然后输入密码进入ROOT;
输入docker pull vimagick/ocserv拉取镜像;
输入mkdir ocserv创建文件夹;
输入cd ocserv进入文件夹;
输入vi docker-compose.yml创建docker-compose配置文件;
输入:set paste使vi进入粘贴模式,可让粘贴内容不自动对齐;
i键输入以下内容:

ocserv:
   image: vimagick/ocserv
   ports:
     - "4443:443/tcp"
     - "4443:443/udp"
   environment:
     - VPN_DOMAIN=vpn.easypi.pro
     - VPN_NETWORK=10.20.30.0
     - VPN_NETMASK=255.255.255.0
     - LAN_NETWORK=192.168.0.0
     - LAN_NETMASK=255.255.0.0
     - VPN_USERNAME=username
     - VPN_PASSWORD=password
   cap_add:
     - NET_ADMIN
   restart: always

修改vpn.easypi.pro为将来访问群晖的域名,username为用户名,password为密码,其他端口设置也可修改,修改完成后按Esc键然后输入两个大写Z保存退出。

输入docker-compose up -d启动容器;
下载AnyConnect客户端
在客户端服务器地址中输入[群晖的域名或IP]:4443,点击连接,然后输入用户名密码就可以访问群晖了。
说明:
1. 提示证书错误是因为服务端没有使用有效证书,解决方法是要么配置有效证书,要么在客户端设置里面允许不安全的服务器证书。
2. 如果要用frp做端口映射,需要将群晖4443端口转发,然后AnyConnect客户端连接地址改为frp服务器地址就可以了。

此时搭好的VPN默认会让所有流量走VPN,下面介绍如何只走内网流量:
进入ocserv容器shell:docker-compose exec ocserv sh

如需修改VPN用户密码执行ocpasswd -c /etc/ocserv/ocpasswd usernameusername为用户名。

修改ocserv.confcd /etc/ocserv/; vi ocserv.conf
修改以下片段:

修改路由配置,让192.168.0.0/255.255.0.0通过VPN访问:

# Routes to be forwarded to the client. If you need the
# client to forward routes to the server, you may use the
# config-per-user/group or even connect and disconnect scripts.
#
# To set the server as the default gateway for the client just
# comment out all routes from the server, or use the special keyword
# 'default'.

#route = 10.10.10.0/255.255.255.0
route = 192.168.0.0/255.255.0.0
#route = fef4:db8:1000:1001::/64
#route = default

# Subsets of the routes above that will not be routed by
# the server.

#no-route = 192.168.0.0/255.255.0.0

修改DNS配置,禁止转发DNS请求:

# Whether to tunnel all DNS queries via the VPN. This is the default
# when a default route is set.
tunnel-all-dns = false

# The advertized DNS server. Use multiple lines for
# multiple servers.
# dns = fc00::4be0
#dns = 8.8.8.8

ocserv配置文件参考:http://ocserv.gitlab.io/www/manual.html