基于Web服务器搭建DoH服务器

本次配置DNS over HTTPS采用Ubuntu 20系统,需要安装dns-over-https和nginx

首先是dns-over-https的安装,在此使用在服务器编译安装的方法:

//安装golang
apt update
sudo apt install golang-1.22

//为go配置bash
sudo vim ~/.bashrc

//在文件末尾添加并:wq保存:
export PATH=$PATH:/usr/lib/go-1.22/bin

//应用新的bash配置文件
source ~/.bashrc

//更换go的代理(可选的)
go env -w GOPROXY=https://goproxy.cn

//清理go mod缓存(可选的)
go clean -modcache && go mod tidy

//安装git(可选的)
sudo apt install git

//克隆dns-over-https源代码并进入目录
git clone https://github.com/m13253/dns-over-https.git
cd dns-over-https

//编译并安装
make
sudo make install

//编辑dns-over-https配置文件并:wq保存
sudo vim /etc/dns-over-https/doh-server.conf
/*
在配置文件中,需要注意的是listen的端口,在此使用默认的8053端口;
此外还有http的路径,在此使用默认的"/dns-query";
需要修改的是upstream地址,即doh的上游服务器地址,在此使用"udp:127.0.0.53:53"(即Linux内建的DNS缓存,地址前端必须添加"udp:"前缀)。
特别的是,由于构建本DoH服务器的主要目的是规避DNS污染,而不是防追踪,所以Ubuntu系统的DNS上游直接采用了阿里云提供的内网DNS服务器,以最优化响应速率和稳定性。
*/

//启动doh-server并检查运行状态
sudo systemctl start doh-server
sudo systemctl status doh-server.service

//安装nginx
apt install nginx

//配置nginx.conf并:wq保存
sudo vim /etc/nginx/nginx.conf

关于nginx.conf的配置,在此详细描述。本次搭建的DoH服务与Web服务共生,虽然二者都采用443端口进行HTTPS通信,但可以通过路径做区分。

首先,在http块中添加转发上游:

upstream dns-backend {
    server 127.0.0.1:8053;
}

接着配置server做转发,在已经可以访问的server块(即已经配置好ssl和文件路径等的web server)中添加:

location /dns-query {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_redirect off;
        proxy_set_header        X-Forwarded-Proto $scheme;
        proxy_read_timeout 86400;
        proxy_pass http://dns-backend/dns-query ;
        }

关于nginx的ssl的配置及ssl证书的签发,在本文就不多讲解了,可自行了解。也可查看结尾的参考教程。

配置完成后,启动nginx即可:

sudo service nginx start

之后可以在设备上测试DoH解析,最终的地址为:https://yourdomain.com/dns-query

参考:

Ubuntu更新高版本MariaDB

备份数据库:

mysqldump -u root dbname > dbname_backup.sql

添加官方repo:

wget https://r.mariadb.com/downloads/mariadb_repo_setup

echo "935944a2ab2b2a48a47f68711b43ad2d698c97f1c3a7d074b34058060c2ad21b  mariadb_repo_setup" \
       | sha256sum -c -

chmod +x mariadb_repo_setup

sudo ./mariadb_repo_setup

强制升级:

sudo apt update
sudo apt -u dist-upgrade

Ubuntu部署nginX

通过APT安装nginx

sudo apt update
sudo apt upgrade
sudo apt install nginx

编辑nginx的配置文件

//nginx配置的主文件
sudo vim /etc/nginx/nginx.conf
//nginx.conf默认引用了/etc/nginx/conf.d/中的所有.conf文件,所以建议以在conf.d中添加文件的形式添加web服务配置
sudo vim /etc/nginx/conf.d/vm.conf

以基本的web服务为例,vm.conf的配置内容可以是:

server {

    # 使用的端口,及是否作为默认服务
    listen    16666 default_server;

    # 服务器名称,同一个IP的同一个端口可以设置为不同的域名,nginx可以根据用户访问的域名的不同      提供不同的网站服务。
    server_name yttj.f3322.net:16666;

    # 文件的位置
    location / {

        # 文件根目录
        root     /usr/share/nginx/html;

        # 主页文件名
        index    index.html;
    }
}

配置完成后,即可启动nginx

sudo systemctl start nginx
#启用开机自动启动
sudo systemctl enable nginx

Ubuntu的防火墙默认开启,还应设置防火墙开放服务的端口

sudo ufw allow 16666

Jupyter Notebook安装于虚拟机或云服务器

系统为Ubuntu Server 22.04.2。

pip install jupyter
jupyter notebook --generate-config
vim ~/.jupyter/jupyter_notebook_config.py

在ipython,用jupyter自带的密码生成器生成哈希密码,复制最终的out结果

ipython
>>> from notebook.auth import passwd
>>> passwd()

修改配置文件中的配置(必须要修改ip才能在外网访问)

c.NotebookApp.ip = 'xxx.xxx.xx.xx'
c.NotebookApp.open_browser = False
c.NotebookApp.password = ''  #此处应为前文中复制的哈希密码
c.NotebookApp.port = 8888
c.NotebookApp.allow_remote_access = True

防火墙开放8888端口

sudo ufw allow 8888

启动Jupyter Notebook

jupyter notebook

外网访问IP:8888即可

(notebook中的python环境可能与系统的环境不一致,进而出现找不到依赖库的情况,最简单的方法是直接在notebook中安装包,从根源上解决就得给notebook配置kernel)

! pip install numpy    #在jupyter notebook 中直接安装库

Ubuntu 20修改网络配置

原有的/etc/network/interfaces方法已经不适用,现需要:

sudo vi /etc/netplan/00-installer-config.yaml

yaml格式的样本:

# This is the network config written by 'subiquity'
network:
  ethernets:
    ens160:
      dhcp4: false
      addresses: [192.168.3.18/24]
      gateway4: 192.168.1.1
      nameservers:
        addresses: [223.5.5.5,119.29.29.29]

  version: 2

修改完成后,应用配置:

sudo netplan apply

Ubuntu下WireGuard的常用操作

Wireguard的配置文件位置:

/etc/wireguard/wg0.conf

不中断服务更新配置文件:

wg syncconf wg0<(wg-quick strip wg0)

重启服务:

systemctl restart wg-quick@wg0.service

显示状态:

wg show

生成密钥对:

wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey

启动与停止某端口:

wg-quick up wg0
wg-quick down wg0

初次安装需要开启内核的转发功能:

echo 1 > /proc/sys/net/ipv4/ip_forward

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

sysctl -p

Ubuntu下配置MariaDB

先确定root已设置密码;

sudo passwd root

安装mariadb-server;

sudo apt install mariadb-server

mariadb初始配置;

sudo mysql_secure_installation

修改配置文件,以允许远程连接;

sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf
→#bind-address 127.0.0.1

重启mariadb-server;

systemctl restart mariadb.service

登录mariadb;

sudo mariadb -u root -p

配置远程访问用户权限;


select User, host from mysql.user;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
FLUSH PRIVILEGES;

尝试远程连接。

Ubuntu配置ROS环境

添加 sources.list(设置你的电脑可以从 packages.ros.org 接收软件.)

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

添加 keys

wget http://packages.ros.org/ros.key -O - | sudo apt-key add -

更新软件包索引

sudo apt update

安装桌面完整版 : 包含ROS、rqt、rviz、机器人通用库、2D/3D 模拟器、导航以及2D/3D感知

sudo apt install ros-noetic-desktop-full python-rosinstall
//可能需要换源,ubuntu官方源较为老旧,可能存在兼容问题,无法安装。

必须在使用ROS的每个bash终端中获取此脚本的源代码。

source /opt/ros/noetic/setup.bash

环境配置

echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc