2020年11月29日星期日

Debian安装docker及常用操作

 1、安装准备:

删除以前版本,如果有:

sudo apt-get remove docker docker-engine docker.io

udo timedatectl set-timezone Asia/Shanghai #时区设置,非必须

安装准备插件:

sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent lsb-release software-properties-common

安装腾讯源:

curl -fsSL https://mirrors.cloud.tencent.com/docker-ce/linux/debian/gpg | sudo apt-key add -

sudo add-apt-repository "deb [arch=amd64] https://mirrors.cloud.tencent.com/docker-ce/linux/debian/ $(lsb_release -cs) stable"

2、安装docker:

sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io

使用脚本自动安装:

curl -fsSL get.docker.com -o get-docker.sh

sudo sh get-docker.sh --mirror Aliyun

启动docker:

sudo systemctl enable docker

sudo systemctl start docker

3、建立用户和用户组

sudo useradd -m docker -g docker -d /home/docker -s /bin/bash

sudo passwd docker #设置密码

回到root,赋予docker账户管理权限

(1)为sudoers增加写入权限

sudo chmod +w /etc/sudoers

sudo vim /etc/sudoers

(2)为用户docker添加读写权限

root ALL=(ALL:ALL) ALL

docker ALL=(ALL:ALL) ALL    // 这一行为新添加的代码

(3)将sudoers文件的操作权限改为只读模式

 sudo chmod -w /etc/sudoers

 回到docker,将用户docker归到docker组,docker组系统已经默认建立

su docker

sudo usermod -aG docker $USER

4、测试:

docker run hello-world 

5、创建网络:

sudo ip link set eth0 promisc on #打开网卡混杂模式

docker network create -d bridge openwrt_lede #创建名为openwrt_lede的桥连网络

docker network create -d macvlan --subnet=192.168.2.0/24 --gateway=192.168.2.1 -o parent=eth0 macnet #创建有配置的网络

网络相关:https://www.yiibai.com/docker/network_connect.html

6、镜像文件导入容器:

cd /mnt/openwrt #进入镜像文件

tar zcf /home/docker/openwrt.tgz *  #将该所有文件打包

cd /home/docker

docker import openwrt.tgz openwrt_lede  #到达该目录,导入镜像命名为openwrt_lede

docker image ls #查看已有镜像

7、启动容器:

docker run --restart always --name openwrt_cup -d --network my-bridge-network --privileged openwrt_lede /sbin/init #openwrt_cup为运行中的容器名称


 

编译Openwrt lede路由器固件

 1、Ubuntu新建用户,不使用root

sudo useradd -m vibit -d /home/vibit -s /bin/bash #新建账户指定文件夹

sudo passwd vibit #创建密码

2、回到root,赋予vibit账户管理权限

(1)为sudoers增加写入权限

sudo chmod +w /etc/sudoers

sudo vim /etc/sudoers

(2)为用户XXX添加读写权限

root ALL=(ALL:ALL) ALL

vibit ALL=(ALL:ALL) ALL    // 这一行为新添加的代码

(3)将sudoers文件的操作权限改为只读模式

 sudo chmod -w /etc/sudoers

 3、系统更新,安装组件,配置固件

sudo apt-get update

sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch python3 python2.7 unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion flex uglifyjs git-core gcc-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint device-tree-compiler g++-multilib antlr3 gperf wget curl swig rsync #安装必要组件

su vibit #更换用户名

cd /home/vibit

git clone https://github.com/coolsnowwolf/lede.git

cd lede

./scripts/feeds update -a 

./scripts/feeds install -a

make menuconfig 

 4、下载dll库,开始编译

make -j8 download V=s 下载dl库(国内请尽量全局科学上网)

make -j1 V=s (-j1 后面是线程数。第一次编译推荐用单线程)

5、查找固件和插件

 lede/bin/targets/路由器架构/64/目录下查看固件

bin/packages/路由器架构/base/目录下查看插件

参考:

https://github.com/coolsnowwolf/lede

https://imgki.com/archives/openwrt-lean.html


2020年11月27日星期五

Debian建立共享文件夹并挂载

 服务端安装:

apt install samba

客户端安装:

apt install samba-client cifs-utils


服务端配置文件:

/etc/samba/smb.conf (无密码指定IP访问)

[global]

        workgroup = MYGROUP

        unix charset = UTF-8

        interfaces = 172.0.0.0/24 eth0

        hosts allow = 172.0.0.3

        bind interfaces only = yes

        netbios name = mini

        log file = /home/samba/%m.log

        max log size = 1000

[box]

        comment = share all

        path = /home/box

        writable = yes

        guest ok = yes

        guest only = yes

        create mode = 0777

        directory mode = 0777

客户端运行:

 mount -t cifs -o guest,vers=2.0 //172.0.0.2/box /home/box

sudo apt install nfs-common cifs-utils #如提示格式出错需安装这两个组件

两个box文件夹赋予777权限

2020年11月10日星期二

借Frp实现IPLC逆向访问

一、在外网服务器搭建Frps。

二、在内网服务器搭建SSR客户端。

apt install git

wget https://raw.githubusercontent.com/the0demiurge/CharlesScripts/master/charles/bin/ssr

chmod +x ssr
cp ssr /usr/local/bin/ssr
apt install jq

按照说明,执行 ssr install ,无法执行可以运行如下命令代替。 

git clone https://github.com/shadowsocksrr/shadowsocksr.git /root/.local/share/shadowsocksr

/root/.local/share/shadowsocksr配置文件
ssr start
ssr config #查询配置,开启服务

*三、在内网服务器安装privoxy。
apt install privoxy
echo 'forward-socks5 / 127.0.0.1:1080 .' >> /etc/privoxy/config
export http_proxy=http://127.0.0.1:8118
export https_proxy=http://127.0.0.1:8118
export ALL_PROXY=http://127.0.0.1:8118(全端口走代理,上两条可以没有)

使系统保持export代理的方法:

编辑root下的.bashrc添加export ALL_PROXY=http://127.0.0.1:8118

然后运行source ~/.bashrc

*不安装Privoxy,直接运行export all_proxy=socks5://127.0.0.1:1080 也可达到效果。

四、内网服务器搭建SSR服务端和Frpc。

五、在内网搭建Frps还可以实现双SSR二级(前置)代理。

2020年11月3日星期二

笔记:WireGuard 隧道组建大内网和UDP转TCP

 

一、安装 WireGuard

最近我在使用 Ubuntu 18.04 LTS (Bionic),所以这边也是给出两种安装教程。

1、直接从软件仓库安装

执行下面的命令,从软件仓库安装 WireGuard:

sudo add-apt-repository ppa:wireguard/wireguard
sudo apt-get update
sudo apt-get install wireguard

二、生成公钥密钥对

在 Server 和 Client 上进入 /etc/wireguard/ 目录,然后执行下面的命令生成自己机器的公私钥对:

wg genkey | tee privateKey | wg pubkey > publicKey

这样在每台主机上都会有两个文件:privateKey 和 publicKey。


三、网络规划介绍

WireGuard 是通过创建一个虚拟接口的方式来转发流量的,这里我们暂停一下,明确一下我们的网络规划。
Host
wg0 Address
Wireguard 
内部使用
eth0 Address
服务商给的公网 IP
Server
10.0.0.1/24
1.1.1.1
Client
10.0.0.2/24
2.2.2.2

四、文件配置(基于上面的网络规划)

Server 上开放 51820 端口(或其他端口,可在Server配置文件中修改,但切记是 UDP)用于 Client 连接,在每台机器上 /etc/wireguard/ 目录下创建一个名为 wg0.conf 的文件,内容分别如下:

在 Server 上的 wg0.conf:

[Interface]
Address = 10.0.0.1/24
SaveConfig = true
ListenPort = 51820
PrivateKey = < 这里填写 Server 上 privatekey 的内容 >

PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

SaveConfig = true

 


# Client
[Peer]
PublicKey = < 这里填写 Client 上 publickey 的内容 >
AllowedIPs = 10.0.0.1/24

在 Client 上的 wg0.conf:

[Interface]
PrivateKey = < 这里填写 Client 上 privatekey 的内容 >
Address = 10.0.0.2/24

# Server
[Peer]
PublicKey = < 这里填写 Server 上 publickey 的内容 >
Endpoint = 1.1.1.1:51820
AllowedIPs = 10.0.0.1/24

然后在双方主机上各自 wg-quick up wg0 即可。

五、配置检验

通过 wg 指令即可查看目前接口使用情况。下面给出一个参考输出:

interface: wg0
  public key: < Client 上的 publicKey >
  private key: (hidden)
  listening port: 12345

peer: < Server 上的 publickey >
  preshared key: (hidden)
  endpoint: 1.1.1.1:51820
  allowed ips: 10.88.88.0/24
  latest handshake: 1 minute, 43 seconds ago
  transfer: 120.32 MiB received, 608.10 MiB sent

       此时隧道已经建立,双方主机已经可以通过内网 IP (这里的例子中是 10.0.0.1 和 10.0.0.2 )进行加密地通讯了。特别是当TCP在特定情况下受阻的情况下,可以使用 WireGuard UDP 方式在 Internet 上工作,有效的提升网络效率和稳定性。对于UDP QoS过分的地方,也可以试着加一个 udp2raw,整体上看效果会有不错的提升。

六、UDP受干扰转TCP

源码下载地址:https://github.com/wangyu-/udp2raw-tunnel/releases

工具运行

假设你的UDP已被屏蔽,假设你的服务器IP为44.55.66.77,你有一个服务在监听udp端口7777。

# Run at server side:
./udp2raw_amd64 -s -l0.0.0.0:4096 -r 127.0.0.1:7777    -k "passwd" --raw-mode faketcp -a

# Run at client side
./udp2raw_amd64 -c -l0.0.0.0:3333  -r44.55.66.77:4096  -k "passwd" --raw-mode faketcp -a
       此时,已成功通过TCP端口4096在客户端和服务器端之间建立了一条经过加密的通信隧道。在客户端通过UDP端口3333连接,等同于在服务器端连接端口7777

转载自:
https://www.xiaox.link/2019/12/wireguard-vps.html
https://nova.moe/deploy-wireguard-on-ubuntu-bionic/
https://www.freebuf.com/sectool/187069.html

2020年4月1日星期三

笔记: 使用电信 TR069 内网架设 WireGuard 隧道异地组网


序言

TR069 内网是运营商用于下发光猫管理网络的内网,同一运营商同一省份的内网中所有光猫互通,并且可以跑到链路速度。
TR069 内网用于架设异地组网隧道不占用宽带带宽,是同一运营商同一省份异地组网的比较好的选择。虽然光猫只有 1 个千兆网口,但是即便使用光猫的百兆口进行架设,也能跑到 100 Mbps 的速度,享受专线一般的待遇。
本文选用 WireGuard 来作为异地组网方案,是因为 WireGuard 支持在内核角度配置 FwMark 参数直接为 WireGuard 的数据流量打上连接标记,以简化相关路由表的配置。

需求

每个节点需要:
  • 电信千兆光猫(百兆猫也可能可以实现,但是没有测试)
  • 内网1台双网卡的Linux系统的服务器(经过测试的系统有CentOS 7 & 8,Debian 10,Ubuntu 18.04)
  • 相同运营商相同省份的宽带(经过测试的有电信和联通宽带)
  • 用于配置 DDNS 的域名,使用 Cloudflare 或阿里云解析
  • 宽带拨号地址采用公网或 CGN 内网 IP 均可

搭建教程

本方案的大致配置思路如下。接下来为具体操作步骤。
  1. 在光猫配置好 TR069 内网与网口的桥接。
  2. 使用网线连上桥接后的光猫网口与内网服务器,使用 DHCP 获取 IP 地址,并屏蔽 DHCP 默认网关与 DNS 服务器的获取。
  3. 配置 DDNS ,读取服务器使用的连接 TR069 的网卡 IP 并更新 Cloudflare 或阿里云的 DNS 解析配置。
  4. 使用守护进程动态更新路由表的默认网关。
  5. 配置 WireGuard ,使用 Fwmark 选项为流量打上连接标记,以此做策略路由,让 WireGuard 发往其他节点的流量从 TR069 内网的网卡出。

光猫配置

首先,获取电信光猫的超级管理员密码。大部分地区的电信光猫的超级管理员用户名密码为:用户名 telecomadmin 密码 telecomadmin 。若这个密码不可用或是其他运营商的宽带,请自行在网上搜索获取超级管理员密码的方式,这里本文不再叙述。
若之前光猫是路由模式,直接在浏览器输入 http://192.168.1.1 即可访问光猫后台。若光猫是桥接模式(即使用路由器进行 PPPoE 拨号),则需要使用一台电脑,用网线插在光猫的任意网口上面,并设置 IP 地址为 192.168.1.0/24 网段内的地址进行操作。



进入光猫后台界面之后,进入网络—连接界面,找到连接名称含有 TR069 字样的连接。记录下来这里的 VLAN ID 与 802.1p 数值,并新建一个连接。设置如下:



  • 封装类型:IPoE
  • 业务类型:其他
  • 连接模式:桥接
  • 启用VLAN:是
  • VLAN ID:上面记录的VLAN ID
  • 802.1p优先级策略:使用指定值
  • 802.1p:上面记录的数值
  • LAN端口绑定:选1个没用的口,不要选IPTV口。 如果没有可选项的话去检查一下拨号的连接是否占满全部端口,是的话取消1个
配置完成之后,保存即可。之后使用1台设备用网线连接选择的网口进行测试,使用 DHCP 自动获取IP。如果能获取到 10.0.0.0/7 范围的地址(开头是10或11的地址均可),即算配置成功。

服务器网络配置

光猫配置完成之后,用网线连接光猫新的连接绑定的网口和服务器的1个网口。然后进行网络配置。这里的要点是使用 DHCP 获取 IP 地址,但是不使用 DHCP 的默认网关和 DNS 服务器。
以下将根据不同的操作系统分别讨论。本文假定连接光猫 TR069 内网的网卡为
eth1 ,请根据实际情况进行更改。

UBUNTU 18.04

这个操作系统最简单,编辑 /etc/netplan/50-cloud-init.yaml加入以下配置即可。
        eth1:
            dhcp4: true
            dhcp4-overrides:
                use-routes: false
                use-dns: false
                use-hostname: false
编辑完成后,sudo netplan try 敲2下回车确认即可。

CENTOS

编辑 /etc/sysconfig/network-scripts/ifcfg-eth1 ,并修改以下条目即可。若该文件不存在请自行创建。
BOOTPROTO="dhcp"
ONBOOT="yes"
DEFROUTE="no"
PEERDNS="no"
之后,使用 ifup eth1 启动网卡即可。

DEBIAN 或 UBUNTU 16.04 以下

首先编辑 /etc/network/interfaces 并增加以下条目。
auto eth1
iface eth1 inet dhcp
之后编辑 /etc/dhcp/dhclient.conf 并增加以下条目,使 DHCP 客户端只获取地址和网段,不获取其他信息。
interface "eth1" {
    request subnet-mask, broadcast-address;
}
编辑完成后,使用命令 ifup eth1 启动网卡即可。

配置 DDNS

由于 TR069 内网获得的 IP 地址不固定,我们需要 DDNS 来持续更新域名解析来获取对端地址来连接。和传统调用 API 获取 IP 地址的 DDNS 不同,我们这里需要获取网卡的 IP 地址进行上报。
使用以下命令安装 Python 环境以及本方案需要的所有包,并下载 DDNS 主程序代码。

CENTOS

yum -y install epel-release
yum copr enable jdoss/wireguard
yum -y install python3 git wireguard-dkms wireguard-tools subnetcalc
git clone https://github.com/NewFuture/DDNS /usr/src/DDNS

UBUNTU

add-apt-repository ppa:wireguard/wireguard
apt update
apt -y install python3 git wireguard resolvconf subnetcalc
git clone https://github.com/NewFuture/DDNS /usr/src/DDNS

DEBIAN

echo "deb http://mirrors.163.com/debian/ unstable main" > /etc/apt/sources.list.d/unstable.list
printf 'Package: *\nPin: release a=unstable\nPin-Priority: 90\n' > /etc/apt/preferences.d/limit-unstable
apt update
apt -y install python3 git wireguard resolvconf subnetcalc
git clone https://github.com/NewFuture/DDNS /usr/src/DDNS
我们需要使用一个脚本来获取某个网卡的 IP 地址。创建 /usr/bin/get-interface-ip 文件如下。
#!/bin/bash
ifconfig $1 | grep -oP 'inet ((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}' | sed 's/inet //g'
之后运行命令 chmod +x /usr/bin/get-interface-ip 赋予该脚本可执行权限。
接下来,创建 DDNS 的配置文件。本文使用 Cloudflare 进行示范。若使用AliDDNS或其他支持的DDNS,参考项目文档进行配置即可。创建文件 /usr/src/DDNS/config.json 如下。
{
  "$schema": "https://ddns.newfuture.cc/schema.json",
  "debug": false,
  "dns": "cloudflare",
  "id": "Cloudflare 邮箱地址",
  "index4": "shell:/usr/bin/get-interface-ip eth1",
  "index6": "default",
  "ipv4": [
    "example1.example.com"
  ],
  "ipv6": [],
  "proxy": null,
  "token": "Cloudflare 的 API KEY"
}
创建完成之后,使用命令 /usr/bin/python3 /usr/src/DDNS/run.py -c /usr/src/DDNS/config.json 测试是否可以正常上报 DDNS 。若成功,则在 /etc/crontab 中添加以下条目来添加 DDNS 的计划任务。
* * * * * /usr/bin/python3 /usr/src/DDNS/run.py -c /usr/src/DDNS/config.json

配置路由表守护进程

TR069 内网 DHCP 到的网段也并不固定,默认网关也与公网并不相通。因此在上面的步骤中我们没有让 DHCP 获取默认网关,避免损坏系统的路由表导致服务器与公网连接中断。而 TR069 内网的网关为 DHCP 到的网段的第1个可用地址。
我们利用这一点,使用 subnetcalc 工具计算网段第一个可用地址作为默认网关,并将其配置为 table 305 路由表的默认网关,在配置 WireGuard 的时候会用到。
创建脚本 /usr/bin/set-tr069-gateway ,内容如下。并使用命令 chmod +x /usr/bin/set-tr069-gateway 赋予可执行权限。
#!/bin/bash
IP_REGEXP='((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}'
LOCAL_IP=$(ifconfig $1 | grep -oP "inet $IP_REGEXP" | sed 's/inet //g')
LOCAL_MASK=$(ifconfig $1 | grep -oP "mask $IP_REGEXP" | sed 's/mask //g')
GATEWAY=$(subnetcalc $LOCAL_IP/$LOCAL_MASK -n | grep 'Host Range' | grep -oP $IP_REGEXP | head -n 1)
ROUTE_TXT="default via $GATEWAY dev $1 table 305" 
echo $ROUTE_TXT

bash -c "ip route replace $ROUTE_TXT || ip route add $ROUTE_TXT"
添加之后,输入 /usr/bin/set-tr069-gateway eth1 将该脚本运行一次。确认无误之后,在 /etc/crontab 中添加以下条目来添加该脚本的计划任务。
* * * * * root /usr/bin/set-tr069-gateway eth1

配置 WIREGUARD

完成上面的基础工作之后,我们就可以着手配置 WireGuard 了。首先,使用以下命令生成 WireGuard 的一对密钥。
wg genkey | tee /root/privatekey | wg pubkey > /root/publickey
之后,创建 WireGuard 配置文件 /etc/wireguard/wg0.conf 如下。这里我们使用了 FwMark 参数,使内核自动对 WireGuard 流量打上连接标记,而利用策略路由,将符合 TR069 网段并且打上连接标记的流量从 TR069 内网的网卡流出。
[Interface]
Address = 192.168.11.1/24
PrivateKey = <服务器私钥,/root/privatekey 的内容>
ListenPort = 22000
FwMark = 0x131
PostUp = ip rule add pref 305 to 10.0.0.0/7 fwmark 0x131 lookup 305
PostDown = ip rule del pref 305

[Peer]
PublicKey = <对端公钥,对方服务器的 /root/publickey 的内容>
AllowedIPs = 192.168.11.2/32
Endpoint = example2.example.com:22000
PersistentKeepalive = 25
这里 Address 字段为服务器 WireGuard 内网地址。每个 Peer 的内网地址写在对应的 AllowedIPs 字段下。Endpoint 为对端服务器的配置的 DDNS 域名。若对端服务器同时承载网络的网关,在网段不冲突的情况下,可以在 AllowedIPs 写上对方所在的网段,而让网段互通。
本文只演示两个节点的情况。若有多个节点,按照格式增加 Peer 即可。
配置完成后,使用以下命令启动 WireGuard,即可通过 TR069 内网连通对方服务器,享受 100Mbps 对等的专线连接。
wg-quick up wg0
systemctl enable wg-quick@wg0

写在最后

至此,我们已经实现了利用电信光猫 TR069 内网来搭建 WireGuard 隧道,实现服务器之间快速稳定的通信。
通信速度实际上受制于光猫的百兆网口的链路速度。事实上,如果不在意下行速度的话,完全可以把宽带移动到百兆口上,而用千兆口进行 TR069 内网通信,得到一条千兆对等隧道。一般而言,对于服务器的场景下,使用下行带宽不如上行带宽多,大多数情况下下行不会超过上行。深圳电信 500M 宽带就有 50M 的上行。
此外,这个方案并不需要宽带是开通的。只要宽带曾经开通过,即便被停机,仍然可以用这个方案架设隧道到其他能上网的地方来蹭网用。不过需要解决 DNS 的问题。这里在没有宽带的情况下,没有办法正常解析域名。可能需要一些其他的配置来解决这个问题。
希望大家喜欢恋恋这篇文章。

原文链接:https://nanahira.momobako.com/%E7%AC%94%E8%AE%B0-%E4%BD%BF%E7%94%A8%E7%94%B5%E4%BF%A1-tr069-%E5%86%85%E7%BD%91%E6%9E%B6%E8%AE%BE-wireguard-%E9%9A%A7%E9%81%93%E5%BC%82%E5%9C%B0%E7%BB%84%E7%BD%91/