SSH隧道

需求1:我们ServerA在内外,ClientB和ServerB不能直接访问它,ClientB可以访问公网的ServerB,我希望ClientB访问ServerB的8080端口相当于访问到ServerA的80端口。 
解释ssh参数:

-N:不执行何指令

-f:后台执行

-R:建立reverse tunnel 
ServerA上执行:


  1. ssh -C -f -N -g -R 8080:127.0.0.1:80 [email protected].2.1.33
  2. # 外网端口:本地地址:本地端口 外网用户名@外网地址

需求2:ServerA希望把所有到自己80端口的数据包转发到ServerB的8080。 
ServerA上面执行:


  1. ssh -C -f -N -g -L 80:88.2.1.33:8080 [email protected].2.1.33
  2. #本机端口:目标地址:目标端口 目标用户名@目标地址

需求3:我希望使用ServerB作为代理服务器访问其它服务器。 
ServerB上面执行:


  1. ssh -N -f -D 8000

然后就可以将127.0.0.1:8000作为sock代理


执行SSH隧道之后,要在外网服务器中配置Nginx反向代理指定端口的数据


  1. server {
  2. listen 80;
  3. server_name www.xxx.com;
  4. client_max_body_size 100m;
  5. location / {
  6. proxy_pass http://127.0.0.1:9090;
  7. proxy_set_header Host $host;
  8. proxy_set_header X-Real-IP $remote_addr;
  9. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  10. index index.html index.htm;
  11. }
  12. }

学习SSH之隧道应用 
https://yq.aliyun.com/articles/43268

SSH隧道