chisel是A fast TCP/UDP tunnel over HTTP, 使用HTTP传输的快速TCP/UDP隧道。

简单应用

img

例子

Background: 内网只开放了22端口以及8080,并且以http服务的形式开放出来,需要vpn才能连接,并且为容器环境,仅数据目录能持久化

内网端:

1
2
3
4
chisel server -p 9999 --reverse

# 开放该服务后,会生成一个http链接,假设为
# url = https://example.com/proxy/9999/

外网端:

1
2
# 使内网可以访问互联网
chisel client $url R:7890:127.0.0.1:7890 #7890为本机代理端口
1
2
# 使内网ssh服务可以通过访问外网服务器连接 <不用再通过http网页访问>
chisel client $url 1234:127.0.0.1:22

容器中创建用户

  1. 容器中的/home目录通常没有持久化,因此在新建用户时需要将目录放到挂载磁盘上
  2. 容器中的/etc等目录同样没有持久化,因此当容器重启后,用户便会消失,因此需要每次重启容器时重新创建用户
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# ▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼ 用户配置 ▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
USERNAME="user"
USER_UID="1001"
USER_GID="1001"
USER_PASSWORD="xxxxxx" # 符合复杂度要求的密码
USER_HOME="/data/home/$USERNAME"

# 创建用户组(确保组名和GID一致)
if ! getent group $USERNAME >/dev/null; then
echo "正在创建用户组 $USERNAME (GID: $USER_GID)..."
sudo groupadd -g $USER_GID $USERNAME || { echo "[错误] 无法创建用户组"; exit 1; }
fi

# 强制删除旧用户(避免残留冲突)
if id -u $USERNAME >/dev/null 2>&1; then
echo "删除旧用户 $USERNAME..."
sudo userdel -rf $USERNAME || { echo "[错误] 无法删除旧用户"; exit 1; }
fi

# 创建新用户
echo "创建用户 $USERNAME (UID: $USER_UID)..."
sudo useradd \
--uid $USER_UID \
--gid $USER_GID \
--home-dir "$USER_HOME" \
--shell /bin/bash \
--create-home \
$USERNAME || { echo "[错误] 无法创建用户"; exit 1; }

# 设置密码(使用加密哈希)
ENCRYPTED_PASS=$(openssl passwd -6 "$USER_PASSWORD")
echo "$USERNAME:$ENCRYPTED_PASS" | sudo chpasswd -e || { echo "[错误] 密码设置失败"; exit 1; }

# 修复权限
echo "设置目录权限: $USER_HOME"
sudo chown -R $USERNAME:$USERNAME "$USER_HOME"
sudo chmod 755 "$USER_HOME"
# ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲ 配置结束 ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲

将以上脚本想办法放到一个容器重启时便会执行的bash脚本中,从而使得它能够在容器启动时重启。