GaGa's Blog

One GaGa, One World !

目的

通过隧道实现访问私域目标服务。

1.新增隧道认证用户

groupadd tunnel  # 新增隧道组
useradd u03
 
su  - u03
ssh-keygen   # 生成密钥对

cp .ssh/id_rsa.pub  .ssh/authorized_keys
chmod 600 .ssh/authorized_keys

exit
usermod -s /sbin/nologin u03  # 修改禁止登录
usermod -aG tunnel u03  # 添加组
Read more »

net.ipv4.ip_local_port_range(出站端口范围)

  • 作用:定义内核在为本地客户端连接自动分配临时端口(ephemeral port)**时,可以使用的端口范围。

  • 默认值:
    一般是 32768 60999(在 Linux 3.x/4.x),在一些发行版上可能是 49152 65535(符合 IANA 建议)。

  • 影响场景:
    当进程调用 connect() 发起出站连接(没指定源端口时),内核会从这个范围里挑选一个可用端口。

  • 调优点:

    • 如果服务器并发出站连接特别多(如反向代理、NAT 网关),需要扩大范围避免 “cannot assign requested address (EADDRNOTAVAIL)” 错误。

    • 修改命令:

      1
      sysctl -w net.ipv4.ip_local_port_range="1024 65535"

net.ipv4.ip_local_reserved_ports(监听端口范围)

  • 作用:指定一组不能分配给临时端口的保留端口(黑名单)。

  • 配置格式:

    • 逗号分隔(如 8080,3306,5432)
    • 范围(如 5000-5100)
    • 可以混合(如 8080,3306,5432,5000-5100)
  • 应用场景:

    • 有些服务监听在高位端口(例如 8080),如果不排除它,内核可能会把 8080 分配给临时出站连接,造成 端口冲突。
    • 适合 应用监听端口和临时端口范围冲突 时使用。
  • 注意事项:

    • 只会影响 自动分配的 ephemeral port,不会阻止你手动 bind() 到这些端口。
    • 保留端口太多会缩小可用范围,导致连接数受限。
    • 建议只保留真正有冲突风险的端口。
Read more »

用 openjdk:22-jdk-oraclelinux8 镜像运行 java -jar 时,如果没有显式指定堆内存参数(-Xms, -Xmx),Java 会根据容器环境来动态计算堆大小,但这在容器里有几个坑。

1. 默认行为

  • Java 10+(包括 22)默认支持 容器感知(JEP 351)。会根据容器的 cgroups 限制来分配堆内存,而不是宿主机物理内存。
  • 默认情况下,堆大小上限大概是 容器可用内存的 1/4,初始堆(Xms)大约是 1/64。

举例:容器限制 --memory=2g,那:

Read more »

1. autossh 是什么

autossh 是一个用来 自动重启 SSH 会话和隧道 的工具。
它主要解决 ssh 建立的端口转发/隧道在 网络抖动、超时、掉线 等情况下不会自动恢复的问题。

  • 它不是 SSH 的替代品,而是 SSH 的封装增强工具。
  • 底层依然调用 ssh,只是在会话失效时帮你自动重连。

Read more »

批量建立这些隧道

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/bash

# 配置部分
KEY="private_key_tunnel02"
USER="tunnel_user"
HOST="10.1.1.1"
SSH_PORT=2323
REMOTE_HOST="10.2.2.2"
REMOTE_PORT=5555

START_PORT=20001
END_PORT=25000

for PORT in $(seq $START_PORT $END_PORT); do
echo "建立隧道: 本地 $PORT -> $REMOTE_HOST:$REMOTE_PORT"
ssh -i "$KEY" \
-L ${PORT}:${REMOTE_HOST}:${REMOTE_PORT} \
${USER}@${HOST} -p $SSH_PORT \
-o ServerAliveInterval=30 -o ServerAliveCountMax=2 -o RekeyLimit=4G,2h \
-Nf
done

说明:

  • -N 不执行远程命令,只建隧道
  • -f 后台运行
  • seq 会从 20001 到 25000 依次建立隧道
  • 每条命令会独立生成一个 ssh 进程
Read more »

日志信息

/var/log/secure

Aug 27 00:01:27 gaga sshd[18197]: User u01 not allowed because account is locked
Aug 27 00:01:27 gaga sshd[18197]: input_userauth_request: invalid user u01 [preauth]
Aug 27 00:01:27 gaga sshd[18197]: Connection reset by 192.168.3.33 port 52153 [preauth]

日志分析

Read more »

ssh 命令参数(客户端),也就是你在终端执行 ssh user@host 时能用的各种选项。


ssh 命令常用参数整理

1. 基本连接

Read more »

1. 基础配置

参数 说明 示例/推荐
Port SSH 服务监听端口 默认 22,推荐改成高位端口,如 2222
ListenAddress 指定监听地址 例如 0.0.0.0 或指定内网地址
Protocol SSH 协议版本 默认 2(SSH1 已废弃)

2. 身份验证与安全

Read more »

SSH隧道基本原理

  • SSH 隧道构建于 SSH 安全协议之上,利用加密和身份验证机制,保证通信安全。
  • 建立连接后,可在此加密连接内部“开通”新通道,用于转发数据。

1.搭建 SSH 隧道前的准备

Read more »
0%