Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/izuolan/pshell

ICMP/IP tunnel manager for Linux.
https://github.com/izuolan/pshell

docker hans icmp ptunnel shell socks tunnel

Last synced: 3 months ago
JSON representation

ICMP/IP tunnel manager for Linux.

Awesome Lists containing this project

README

        

这是一个 ICMP/IP 隧道管理脚本,从服务器到本地的全部操作,都可以通过这个脚本完成,目前完美支持主流 Linux 发行版(能运行最新版本 Docker 即可)。

#### 可以用来做什么

* 内网穿透(从外网访问内网的主机,比如在家里访问学校内网的资源)
* 绕过认证(绕过一般的网络认证,比如绕过学校网络认证直接上网)
* 网络代理(又双叒叕一个翻墙姿势,比如服务端放在海外就可以翻墙了)

#### 功能

* 支持服务器自动部署并启动,服务端遇到意外可以自动重启。
* 支持本地自动部署并启动,支持 ICMP/IP 双协议隧道。
* 支持断线自动重连。
* 提供直观的监视器,可以实时查看连接状态。
* 支持指定网卡分享 socks5 代理给他人。
* 支持 socks5 转发为 http 代理。
* 支持 TCP-BBR 算法,极大提高网速(需要内核支持)。
* 密码认证。
* 自动更新脚本。

#### 待添加/修复功能

* 支持自动修复 http 代理并允许指定 http 端口。
* 自动启用负载均衡。
* TCP-BBR 算法自动启用。
* 添加 DNS Tunnel 功能。
* **proxy.list 文件最后一行不是空行会执行失败**。

```shell
$ ./Pshell.sh -h
------------------------------------------------------------------------------
___ ____ __ __ ____ _____ ____ ____ _ _ _
|_ _/ ___| \/ | _ \ / /_ _| _ \ / ___|| |__ ___| | |
| | | | |\/| | |_) / / | || |_) | \___ \| '_ \ / _ \ | |
| | |___| | | | __/ / | || __/ ___) | | | | __/ | |
|___\____|_| |_|_| /_/ |___|_| |____/|_| |_|\___|_|_|
Email: [email protected] Blog: https://zuolan.me
一个隧道部署与代理管理的脚本。不加参数直接运行脚本即可连接。
------------------------------------------------------------------------------
可选参数 - 说明
------------------------------------------------------------------------------
-d (driver) - 指定网卡(enp3s0|wlp2s0|eth0|wlan0),默认全部。
-e (edit) - 编辑配置列表。
-f (fast) - 快速模式(切换为 IP 协议隧道,速度更快,安全性降低)。
-h (help) - 显示帮助信息。更详细说明请阅读 README 文件。
-k (kill) - 杀死 autossh 和 sshd 进程(当连接长时间中断时使用)。
-l (local) - 安装本地守护容器。
-m (monitor) - 查看代理与容器运行的情况。
-n (net) - 统计代理端口的流量(-n set/unset 开启/重置流量统计)。
-p (port) - 选择本地 HTTP 代理端口(默认配置/etc/privoxy/config)。
-s (server) - 安装服务器守护进程。
-u (update) - 检测版本以及更新脚本。
------------------------------------------------------------------------------
```

# 安装

## 第零步、ssh 免密码设置

在本地生成一对密钥(邮箱替换为你的邮箱):

```shell
ssh-keygen -t rsa -b 4096 -C "[email protected]"
```

把公钥(id_rsa.pub)内容复制粘贴到服务器的 `~/.ssh/authorized_keys` 文件中:

```shell
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
```

## 第一步、服务器安装

执行 `sudo ./Pshell.sh --server` 即可自动安装并启动。服务器就一句话。

## 第二步、填写本地配置文件

现在回到本地,在运行脚本连接之前需要填写配置文件,模板如下。打开 `proxy.list`,然后按照下面的模板填写你的配置。

```shell
节点名称:容器名称:容器端口:Socks5端口:服务器IP:密码:密钥
```

例如:

```shell
广州:gz:8001:10001:123.45.67.89:pass1:~/.ssh/id_rsa.gz
香港:hk:8002:10002:123.45.67.89:pass1:~/.ssh/id_rsa.hk
青岛:qd:8003:10003:123.45.67.89:pass2:~/.ssh/id_rsa.qd
东京:to:8004:10004:123.45.67.89:password:~/.ssh/id_rsa.to
```

填完就可以进行下一步了,但如果你想更详细定义脚本变量可以在脚本头部中设置(不建议)。

## 第三步、本地电脑安装

执行 `./Pshell.sh --local` 即可自动安装并运行。

# 使用

下面方法任选其一。

## 一、基于 SSH 的 Socks5 代理

### 1. ICMP 模式(限速150KB/s)

使用 `./Pshell.sh` 直接运行脚本即为 ICMP 协议隧道,然后你可以使用配置文件中设置的 Socks5 端口(见安装步骤第二步)连接到外网。设置方法和普通 Socks5 端口使用一样。(例如 Google Chrome 中的插件 SwitchyOmega。)

### 2. IP 模式(不限速)

使用 `./Pshell.sh -f` 即可启用 IP 协议的隧道,相比使用 ICMP 协议的隧道而言,IP 协议的隧道速度更快(有可能被云服务提供商误判为DDos攻击)。启用之后使用方式和 ICMP 模式一样,连接 Socks5 端口即可。

## 二、基于 IP 协议的端口映射

由于 SSH 的连接不是非常稳定,即便加了自动重连的方法还是会出现短暂的断网现象(自动重连大概要零点几秒),对于下载、游戏等过程有比较大影响,所以建议设置端口映射,由于 ICMP 协议速度不快,我就不写 ICMP 的端口映射了,用 ICMP 刷个网页基本不会感受到断网的情况。

> 由于脚本尚未完善,目前仅支持一台服务器的端口映射,如果你列表中有多台服务器,只会连接列表中的第一台服务器。

以`广州:gz:8001:10001:123.45.67.89:pass1:~/.ssh/id_rsa.gz`为例,完成服务端和客户端的安装之后,在服务端启动一个代理(SS、SSR之类的你懂的软件),然后本地可以通过`10.1.2.1`这个地址连接到服务器的代理软件。

服务端完整示例:

```shell
# 安装 Pshell 服务端
$ ./Pshell.sh -s
# 安装 Shadowsocks 服务端
$ docker run -d --name ss -p 10001:10001 mritd/shadowsocks -s "-s 0.0.0.0 -p 10001 -k ss_password -m aes-256-cfb"
```

然后回到本地的电脑,安装好 Pshell 本地端之后(`./Pshell.sh -l`),打开 Shadowsocks 客户端,服务器地址为`10.1.2.1`,其他根据你的设置改变。

现在你可以使用 IP 协议稳定连接网络了。

# 扩展

## 一、Socks5 转 http

有些软件不支持 Socks5 代理协议,所以提供端口转换功。

使用 `./Pshell.sh -p ` 可以指定其中一个 socks5 端口转换为 http 端口(转换后 http 协议代理端口为 8118)。

> 端口转换功能是保存起来的,不需要每次运行都指定它,除非你想重新指定转换的 socks5 端口。

## 二、分享 Socks5 端口

如果你想分享代理给他人用,可以使用 `./Pshell.sh -d ` 参数指定网卡分享 Socks5 端口。

> 常用的网卡有 enp3s0|wlp2s0|eth0|wlan0 这些,使用 `ifconfig` 命令可以查看。

注意一点就是 Privoxy 的 8118 端口默认为仅 localhost 访问,如果需要他人访问,你还需要修改 localhost 为其他地址(例如 0.0.0.0),这样他人可以通过这个 http 端口访问外网。

## 三、重启 sshd 进程

在使用过程中可能会出现 sshd 进程崩溃的情况,这时候明明没有连接异常但死活连不上。

这个时候你可以使用 `./Pshell.sh -k` 参数来杀死崩溃 sshd 进程并手动执行 `./Pshell.sh` 重新启动 sshd 进程。

# 最后

使用 `alias` 指定脚本为特定命令即可更加方便启动。

其他功能自己发现(其实也没什么其他功能了),在脚本中可以看到全部可选参数。