使用ssh反向代理+shadowsocks实现内网穿透

在外网访问学校服务器以及其他资源,例如下载论文等,均可以通过此方法实现。要求有一台具有公网ip的服务器。下文命令行中用到的地址定义如下:
公网服务器ip地址:server_ip
内网机器ip地址:local_ip

1、在本地机器上安装autossh:

1
sudo apt install autossh 

2、云服务器安装openssh-server:

1
sudo apt install openssh-server 

3、更改本地服务器的配置文件:

1
sudo vim /etc/ssh/sshd_config 

设置PermitRootLoginwithout-password,并在末尾添加:GatewayPorts yes
4、更改云服务器的配置文件:

1
sudo vim /etc/ssh/sshd_config 

在末尾添加:GatewayPorts yes
5、重启本地以及云服务器的ssh服务:

1
2
service ssh restart #本地
service ssh restart #云服务器

6、制作免密码登录,输入命令后一直确认即可

1
ssh-keygen 

7、将本地生产的公匙放到远程服务器上:

1
ssh-copy-id server_user@server_ip 

确认后要输入云服务器的登录密码
8、开启反向代理:

1
autossh -M 30000 -o "StrictHostKeyChecking=false" -o "ServerAliveInterval 10" -o "ServerAliveCountMax 3" -NR 8980:local_ip:22 server_user@server_ip 

命令行中8980是将服务器端的8980端口映射到本地的22端口,即为默认的ssh端口。若只需要ssh访问,至此就完成了。若是需要用shadowsocks代理,需要将上一步中的22端口号修改,本文修改为4396

9、在本地机器安装shadowsocks

1
pip install shadowsocks

10、启动shadowsocks

1
ssserver -s local_ip -p 4396 -k password --fast-open

上面命令中的local_ip为本地机器的ip地址,不能直接写localhost,4396对应上面映射的地址,password为设置的密码。
11、shadowsocks客户端连接地址
ip为云服务器的ip,端口为8980,加密方式默认为aes-256-cfb,可以ssh与shadowsocks二者共存,将对应的命令设置开机自启即可。