首先在linux vps上搭建rust环境:
curl https://sh.rustup.rs -sSf | sh # -s -- --channel=nightly
(必须是nightly版。不要安装stable版,即不要运行:
curl https://sh.rustup.rs -sSf | sh
否则下面安装"stunnel"会遇到错误)
运行命令后,显示:
...
install: creating uninstall script at /usr/local/lib/rustlib/uninstall.sh
install: installing component 'rustc'
install: installing component 'rust-docs'
install: installing component 'cargo'
Rust is ready to roll.
则表明安装成功。参见http://briteming.blogspot.com/2015/11/rust.html
或者这样安装rust环境也可:
wget https://static.rust-lang.org/dist/rust-nightly-x86_64-unknown-linux-gnu.tar.gz
tar zxvf rust-nightly-x86_64-unknown-linux-gnu.tar.gz
cd rust-nightly-x86_64-unknown-linux-gnu
然后,
git clone https://github.com/airtrack/stunnel rust-stunnel
cd rust-stunnel
root@RegalMusty-VM:~/rust-stunnel# ls
Cargo.toml README.md src
root@RegalMusty-VM:~/rust-stunnel# cargo build --release
root@RegalMusty-VM:~/rust-stunnel# ls
Cargo.lock Cargo.toml README.md src target
(生成了target目录)
root@RegalMusty-VM:~/rust-stunnel# cd target
root@RegalMusty-VM:~/rust-stunnel/target# ls
release
root@RegalMusty-VM:~/rust-stunnel/target# cd release
root@RegalMusty-VM:~/rust-stunnel/target/release# ls
build incremental native stunnel_server
deps libstunnel.d stunnel_client stunnel_server.d
examples libstunnel.rlib stunnel_client.d
root@RegalMusty-VM:~/rust-stunnel/target/release#
然后运行:
sytemctl start
这样,服务器端就搭建好了。
git clone https://github.com/airtrack/stunnel rust-stunnel
cd rust-stunnel
build libstunnel.d stunnel_client.d
deps libstunnel.rlib stunnel_server
examples native stunnel_server.d
incremental stunnel_client
yudeMacBook-Air:release brite$ ./stunnel_client -s my-vps-ip:7288 -k my-key -c 2 -l 127.0.0.1:3080
curl https://sh.rustup.rs -sSf | sh # -s -- --channel=nightly
(必须是nightly版。不要安装stable版,即不要运行:
curl https://sh.rustup.rs -sSf | sh
否则下面安装"stunnel"会遇到错误)
运行命令后,显示:
...
install: creating uninstall script at /usr/local/lib/rustlib/uninstall.sh
install: installing component 'rustc'
install: installing component 'rust-docs'
install: installing component 'cargo'
Rust is ready to roll.
则表明安装成功。参见http://briteming.blogspot.com/2015/11/rust.html
或者这样安装rust环境也可:
wget https://static.rust-lang.org/dist/rust-nightly-x86_64-unknown-linux-gnu.tar.gz
tar zxvf rust-nightly-x86_64-unknown-linux-gnu.tar.gz
cd rust-nightly-x86_64-unknown-linux-gnu
root@ar:~/rust-nightly-x86_64-unknown-linux-gnu# ls
COPYRIGHT rls-preview
LICENSE-APACHE rust-analysis-x86_64-unknown-linux-gnu
LICENSE-MIT rust-docs
README.md rust-installer-version
cargo rust-std-x86_64-unknown-linux-gnu
components rustc
git-commit-hash rustfmt-preview
install.sh version
root@ar:~/rust-nightly-x86_64-unknown-linux-gnu# chmod 755 install.sh
root@ar:~/rust-nightly-x86_64-unknown-linux-gnu# ./install.sh
这样,rust环境就装好了。
root@ar:~# which cargo
/usr/local/bin/cargo
root@ar:~# which rustc
/usr/local/bin/rustc
root@ar:~#
(参考https://www.rust-lang.org/zh-CN/other-installers.html)
然后,
git clone https://github.com/airtrack/stunnel rust-stunnel
cd rust-stunnel
root@RegalMusty-VM:~/rust-stunnel# ls
Cargo.toml README.md src
root@RegalMusty-VM:~/rust-stunnel# cargo build --release
root@RegalMusty-VM:~/rust-stunnel# ls
Cargo.lock Cargo.toml README.md src target
(生成了target目录)
root@RegalMusty-VM:~/rust-stunnel# cd target
root@RegalMusty-VM:~/rust-stunnel/target# ls
release
root@RegalMusty-VM:~/rust-stunnel/target# cd release
root@RegalMusty-VM:~/rust-stunnel/target/release# ls
build incremental native stunnel_server
deps libstunnel.d stunnel_client stunnel_server.d
examples libstunnel.rlib stunnel_client.d
root@RegalMusty-VM:~/rust-stunnel/target/release#
./stunnel_server -l 0.0.0.0:7288 -k my-key
这不是以daemon方式运行。我们可以利用systemd,来把以上命令运行为service:
nano /etc/systemd/system/rust-stunnel.service
其内容为:
[Unit]
After=network.target
[Service]
ExecStart=/root/rust-stunnel/target/release/stunnel_server -l 0.0.0.0:7288 -k my-password
Restart=always
[Install]
WantedBy=multi-user.target
然后运行:
sytemctl start
rust-stunnel
sytemctl enable
rust-stunnel
这样,服务器端就搭建好了。
在客户机器上。
作者未提供windows下的客户端程序。只能在linux桌面系统下或mac下,自己编译rust环境。
brew install curl (ubuntu桌面系统下,为apt-get install curl)
curl -sSf https://static.rust-lang.org/rustup.sh | sh -s -- --channel=nightly
(必须是nightly版。不要安装stable版,即不要运行:
curl -sf -L https://static.rust-lang.org/rustup.sh | sh )
运行命令后,显示:
...
install: creating uninstall script at /usr/local/lib/rustlib/uninstall.sh
install: installing component 'rustc'
install: installing component 'rust-docs'
install: installing component 'cargo'
Rust is ready to roll.
则表明安装成功。
然后,(必须是nightly版。不要安装stable版,即不要运行:
curl -sf -L https://static.rust-lang.org/rustup.sh | sh )
运行命令后,显示:
...
install: creating uninstall script at /usr/local/lib/rustlib/uninstall.sh
install: installing component 'rustc'
install: installing component 'rust-docs'
install: installing component 'cargo'
Rust is ready to roll.
则表明安装成功。
git clone https://github.com/airtrack/stunnel rust-stunnel
cd rust-stunnel
yudeMacBook-Air:rust-stunnel brite$ ls
README.md src
Cargo.toml
yudeMacBook-Air:rust-stunnel brite$ cargo build --release
yudeMacBook-Air:rust-stunnel brite$ ls
Cargo.lock README.md target
Cargo.toml src
(生成了target目录)
yudeMacBook-Air:rust-stunnel brite$ cd target/release
yudeMacBook-Air:release brite$ lsbuild libstunnel.d stunnel_client.d
deps libstunnel.rlib stunnel_server
examples native stunnel_server.d
incremental stunnel_client
yudeMacBook-Air:release brite$ ./stunnel_client -s my-vps-ip:7288 -k my-key -c 2 -l 127.0.0.1:3080
(这里7288是我的vps的端口号。my-key为我自己设置的一个字符串,跟服务器上所设置的my-key的值要一致。"-c"的值要最小设为1,我设为了2)
这样客户端就搭建好了。
然后设置浏览器的socks5代理为127.0.0.1:3080,即可翻墙。
然后设置浏览器的socks5代理为127.0.0.1:3080,即可翻墙。
项目地址:https://github.com/airtrack/stunnel/
注意:这个stunnel跟著名的stunnel.org毫无关系,只是同名而已。
本帖就是用本文的方法翻墙后发表的。
---------------
程序作者解释的原理:
本帖就是用本文的方法翻墙后发表的。
---------------
程序作者解释的原理:
编译和使用
编译完成得到两个可执行文件,分别是:client和server。server启动在服务器上,client启动在本机并绑定到地址127.0.0.1:1080,浏览器由代理插件通过SOCKS v5协议连接这个地址即可。
Tunnel逻辑结构
下面是逻辑图:
. | .
. f .
. i .
port1 ------| r |------ port1
| e |
| | |
port2 ---client---------------- tunnel ----------------server--- port2
| | |
| w |
port3 ------| a |------ port3
. l .
. l .
. | .
Client和Server之间通过一条TCP链接相连,客户端每收到一个TCP请求就开一个port处理,同时在Server上有一个port与之对应,这样就在Client和Server之间建立了一个会话层,这个TCP链接的数据全部都在对应的port里传输。
Tunnel本身跟SOCKS v5不相关,为了让浏览器代理能连上,Client提供了SOCKS v5中最简单的NO AUTHENTICATION TCP方法,即无用户名和密码的TCP代理。
from http://airtrack.me/posts/2015/02/03/用Rust写了一个Tunnel/
--------
安装 rustup 之后,会默认安装 Rust的stable版本
如果你需要安装nightly版本,运行:
将 nightly 设置为默认 Rust 环境:
更新所有 Rust,运行:
检查 rustup 自身是否有更新:
但是这一步操作在新版中似乎不需要做了,因为更新 Rust 的时候,貌似也会检查自身是否有更新:
卸载 rustup:
Rust 所有工具链都被安装在了
Rust 插件已经被官方接手了,不知道之后会不会出面向 Rust 的独立 IDE。
如果你买不起正版,又有强迫症无法接受 idea 授权方面的问题,可以试一下 Atom(或者 VSCode)+ 插件的方案,也可以接受。
--------
安装 rustup 之后,会默认安装 Rust的stable版本
如果你需要安装nightly版本,运行:
|
|
|
|
|
|
|
|
|
|
|
|
添加 Rust 源代码
rustup 可也以安装配套的源代码,这样你就不需要自己配置了,方法:
|
|
~/.rustup/toolchains/
目录下面。如果你需要配置就在这里面找。配置 Rust 编辑环境
目前所有编辑器方案,idea + rust 插件体验是最好的。你自己试一下就知道了。Rust 插件已经被官方接手了,不知道之后会不会出面向 Rust 的独立 IDE。
如果你买不起正版,又有强迫症无法接受 idea 授权方面的问题,可以试一下 Atom(或者 VSCode)+ 插件的方案,也可以接受。
-----------------
related post:
https://briteming.blogspot.com/2016/06/shadowsocks-rust.html