二级proxy部署

2015-11-24

shadowsocks:

apt-get update
apt-get install -y python-pip python-m2crypto
pip install shadowsocks

Debian / Ubuntu:

apt-get install python-pip
pip install shadowsocks

CentOS:

yum install python-setuptools && easy_install pip
pip install shadowsocks

启动:

ssserver -p 3000 -k password -m aes-128-cfb -d start

停止:

ssserver -d stop

二级COW架设源码:https://github.com/cyfdecyf/cow

安装过程:

curl -L git.io/cow | bash

配置文件路径:

vim ~/.cow/rc

手工安装:

http://dl.chenyufei.info/cow/0.9.6/cow-linux64-0.9.6.gz

配置文件:

https://raw.github.com/cyfdecyf/cow/0.9.6/doc/sample-config/rc /root/.cow/rc

二级proxy部署 第二篇

上面写的是shadowsocks+cow实现二级proxy,接下来用一种简单的方式来实现二级proxy:

首先,一级proxy开启ssh服务。

二级proxy上用SSH端口转发:

ssh -N -f -D 0.0.0.0:8888 username@ssh.malu.me

输入密码,这段命令意思是连接远程主机ssh.malu.me,然后在本地0.0.0.0地址、端口8888上开启socket5监听。

这样只要访问二级proxy上的socket5代理就能穿过两层代理了。

二级proxy部署 自动脚本

相关参数根据实际修改

#!/usr/bin/expect -f
set timeout 30
set host ssh.malu.me
set name root
set passwd userpasswd
set port 22
set lisenport 8888
spawn sudo /etc/init.d/ssh start
expect "*#"
spawn killall ssh
expect "*#"
spawn ssh -NfR 1234:localhost:2222 $host -l $name -p $port
expect {
	"yes/no" { send "yes\r"; exp_continue }
	"password:" { sleep 1;send "$passwd\r" }
}
expect "*#"
spawn ssh $host -l $name -p $port
expect {
	"yes/no" { send "yes\r"; exp_continue }
	"password:" { sleep 1;send "$passwd\r" }
}
expect "]$"
sleep 1
send "ssh -N -f -D 0.0.0.0:$lisenport root@localhost -p1234\r"
expect {
	"yes/no" { send "yes\r"; exp_continue }
	"password:" { sleep 1;send "$passwd\r" }
}
expect  "]$"
sleep 1
send "exit\r" 
expect eof
exit

二级proxy部署 - 直连windows

windows下安装openssh

下载地址:https://github.com/PowerShell/Win32-OpenSSH/releases

1.解压OpenSSH-Win64.zip到C:\Program Files\OpenSSH目录下,在DOS窗口进入OpenSSH目录

2.安装SSH host keys

.\ssh-keygen.exe -A

3.打开防火墙22端口

4.安装SSHD服务并在服务窗口找到名为“SSHD”的服务,右键将其启动,并设置为随操作系统自动启动

.\sshd.exe install

也可以直接启动:

.\sshd.exe

5.查看启动端口,如果需要监听外网,可以修改当前目录sshd_config文件

netstat -ant

sshd_config:

ListenAddress 0.0.0.0

内网穿透

根据二级proxy的原理,实质上是在两台服务器之间实现端口转发。

那么对应内网的服务器,只要能访问外网,那么利用SSH隧道端口映射就能实现内网穿透。

首先需要一台能远程登录的外网服务器。

然后内网服务器上执行:

ssh -gCNfR 80:localhost:8080 ssh.malu.me -l root -p 22

g:在-L/-R/-D参数中,允许远程主机连接到建立的转发的端口,如果不加这个参数,只允许本地主机建立连接。

(-g参数如果不生效,其实这是ssh默认的安全策略所致,需要在服务端/etc/ssh/sshd_config 添加 gatewayports yes 重启sshd即可)

C:压缩数据传输。

N:不执行脚本或命令,通常与-f连用。

f:后台认证用户/密码,通常和-N连用,不用登录到远程主机。

-R 本地端口:目标IP:目标端口

将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口. 工作原理是这样的, 远程主机上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转向出去, 同时本地主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有用 root 登录远程主机才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport

-L 本地端口:目标IP:目标端口

将本地机(客户机)的某个端口转发到远端指定机器的指定端口. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 同时远程主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有 root 才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport

-D IP:port

指定一个本地机器 “动态的’’ 应用程序端口转发. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 根据应用程序的协议可以判断出远程主机将和哪里连接. 目前支持 SOCKS4 协议, 将充当 SOCKS4 服务器. 只有 root 才能转发特权端口. 可以在配置文件中指定动态端口的转发.