分类 技术分享 下的文章

首先你需要有一个完全开放25端口的服务器(几十块钱一年的渣渣vps就行)
然后vps与搭建邮箱服务器的主机进行组网(zerotier或者wireguard都行),想懒省事就用zerotier
组网成功后记住vps与主机的内网ip,比如vps的内网ip为10.0.0.1、主机的内网ip为10.0.0.2
vps上安装需要postfix,其它系统安装命令请自行百度
apt install postfix
安装成功后编辑 /etc/postfix/main.cf 文件找到 mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 在后面添加主机的内网ip,比如:mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 10.0.0.2/32
注意每个ip中间有个空格别漏了,如果想批量添加多台主机可以将10.0.0.2/32改为10.0.0.0/24,直接添加/24整个网段
重启Postfix:systemctl restart postfix
vps配置好之后主机也安装postfix
编辑 /etc/postfix/main.cf 文件找到 relayhost 在后面添加vps的内网ip 10.0.0.1,比如:relayhost = 10.0.0.1
重启Postfix:systemctl restart postfix
以后主机发送邮件都会通过vps中继,适合主机25端口被封无法发送邮件的人使用,一般大厂服务器都不给开放25端口,我的主机通过宝塔面板的邮件服务器插件搭建了邮箱服务器,但是发现只能收邮件 通过SMTP发送邮件失败,我通过这种方式成功复活了SMTP发信功能,理论上是支持多台主机的,这是通过IP白名单的方式进行中继,还有一种方式是使用SASL认证,因为太麻烦了就没弄

首先先安装acme.sh

curl https://get.acme.sh | sh -s email=my@example.com

安装完成后,执行以下命令使acme.sh生效

source ~/.bashrc

可以执行以下命令查看是否安装成功,看到版本号即可

acme.sh --version

现在acme.sh就安装完成了
在宝塔面板中创建一个新的站点,域名填写服务器的公网IP地址,其他配置可以默认,确保浏览器输入ip可以直接访问站点
在终端中执行以下命令,使用acme.sh申请IP证书,将这里8.8.8.8替换为你的服务器公网IP地址

acme.sh --issue --cert-profile shortlived  -d 8.8.8.8 --webroot /www/wwwroot/8.8.8.8/

申请下来的证书默认保存在/root/.acme.sh/ 文件夹下,例如:/root/.acme.sh/8.8.8.8_ecc文件夹里的fullchain.cer和key文件
alpine系统安装acme.sh,需要先安装curl和socat

apk add --no-cache curl socat

安装过程与上面一样,如果安装后报错:-ash: acme.sh: not found 可以使用 /root/.acme.sh/.acme.sh 命令执行,例如:/root/.acme.sh/acme.sh --version
也可以为你的公网IPV6申请SSL证书
首先需要确定你的公网IPV6支持外网80端口访问
然后在宝塔面板站点配置里ServerAlias后面添加你的公网IPV6地址,注意:域名和IP之间都要有个空格,宝塔面板域名管理无法直接绑定IPV6只能通过这种方法绑定,最后别忘记保存配置。
确保浏览器输入公网IPV6可以直接访问站点
在终端中执行以下命令,使用acme.sh申请公网IPV6证书,将这里2001:db8::1替换为你的服务器公网IP地址、将/www/wwwroot/blog.freenn.com/ 替换为你的站点路径 如果不知道就看一下宝塔面板站点配置里 DocumentRoot 后面显示的路径

acme.sh --issue --cert-profile shortlived  -d 2001:db8::1 --webroot /www/wwwroot/blog.freenn.com/

1.服务器A安装WireGuard:

apk add wireguard-tools-wg-quick ip6tables

2.生成密钥(在/etc/wireguard目录可以看到)

wg genkey | tee privatekey | wg pubkey > publickey

3.创建/etc/wireguard/wg0.conf:

[Interface]
Address = fd00:1::1/64
PrivateKey = A_PRIVATE_KEY
ListenPort = 51820
PostUp = ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -A FORWARD -o %i -j ACCEPT
PostDown = ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -D FORWARD -o %i -j ACCEPT

[Peer]
PublicKey = B_PUBLIC_KEY
AllowedIPs = fd00:1::2/128, 2001:470:abcd:1::/64

4.在/etc/network/interfaces添加wg0以开机启动:

auto wg0
iface wg0 inet manual
    pre-up wg-quick up wg0
    post-down wg-quick down wg0

rc-service networking restart

5.服务器B安装WireGuard:

apk add wireguard-tools-wg-quick

6.创建/etc/wireguard/wg0.conf:

[Interface]
Address = fd00:1::2/64
PrivateKey = B_PRIVATE_KEY
PostUp = ip -6 route add default via fd00:1::1 dev wg0

[Peer]
PublicKey = A_PUBLIC_KEY
Endpoint = 服务器A的ip:51820
AllowedIPs = ::/0
PersistentKeepalive = 25

7.在/etc/network/interfaces添加:

auto wg0
iface wg0 inet manual
    pre-up wg-quick up wg0
    post-down wg-quick down wg0

rc-service networking restart

1.在主机上创建一个目录,例如 my-alpine:

mkdir my-alpine
cd my-alpine

2.创建你的开机脚本文件 rc.start

cat > rc.start << 'EOF'
#!/bin/sh
# 在这里写你的命令

EOF

3.创建 Dockerfile:

FROM alpine:3.16

# 安装必要工具(根据你的脚本需求添加,例如 openvpn)
RUN apk add --no-cache openrc iproute2  # 如不需要可去掉

# 创建 local.d 目录并复制脚本
RUN mkdir -p /etc/local.d
COPY rc.start /etc/local.d/rc.start
RUN chmod +x /etc/local.d/rc.start

# 可选:如果想用完整 OpenRC
# RUN mkdir -p /run/openrc && touch /run/openrc/softlevel && rc-update add local default

# 保持原有权限
CMD ["/bin/sh", "-c", "/etc/local.d/rc.start && /bin/sh"]

4.构建镜像:(最后有个.别漏了)

docker build -t my-alpine-test .

5.可以直接运行容器

docker run -it \
  --cap-add=NET_ADMIN \
  --cap-add=SYS_ADMIN \
  --device=/dev/net/tun \
  my-alpine-test

由于架构问题导致官方教程无法使用,亲测以下代码可以使用,根据情况修改三个ip后写入/etc/network/interfaces

auto he-ipv6
iface he-ipv6 inet6 manual
    pre-up ip tunnel add he-ipv6 mode sit remote 209.51.161.14 local 10.10.10.2 ttl 255
    up ip link set he-ipv6 up
    up ip addr add 2001:470:470:470::2/64 dev he-ipv6
    up ip route add ::/0 dev he-ipv6
    down ip tunnel del he-ipv6