Configure Intranet penetration service

Introduction

ssh是我们常用的工具,然而借助ssh的端口转发的特性,我们可以

  • 动态端口转发,基于国内的服务器,搭建简易的Sock5代理来改变网络路由
  • 远程端口转发,实现内网穿透,并将其配置成linux系统服务
  • 本地端口转发,借助ssh访问防火墙限制的端口

Symbol

主机 ip 定位
A1 192.168.0.1 本地主机
A2 192.168.0.2 本地主机
B1 222.201.187.247 云服务器
B2 192.168.59.2 云服务器

SSH Port Forwarding

动态端口转发

轻量级socks5代理。

动态端口转发,就是开启一个类似于SSR一样的socks4或者socks5代理,由于只要一条命令就可以实现代理,所以十分的方便。但同样这样的socks5 proxy并不具有混淆机制,流量特征明显,一般不适用于国外的服务器。

ssh  -D 本地网卡地址:本地端口  username@ip

事实上,我们常用的会省略本地网卡地址,并加上-N -T参数,如要后台运行也可以加上-f参数。

ssh -NTD 23334 root@222.201.187.247

远程端口转发

学校的电脑因为学校防火墙,校外不可访问,利用远程端口转发,借助云服务器做桥梁,实现内网穿透。

所谓远程端口转发,就是将发送到远程服务器端口的请求,转发到本地的端口。这样,就可以通过访问服务器的远程端口,来访问本地端口的服务。使用-R属性,就可以指定需要转发的端口,语法是这样的:

-R 远程网卡地址:远程端口:目标地址:目标端口

例如,本地主机A1要实现内网穿透,可以配置端口转发到一台ip为222.201.187.247的公网服务器B1上。
这时,通过远程端口转发,可以将发送到远程云主机B1端口2000的请求,转发到本地主机A1端口3000。

# 在本地主机A1登陆远程云主机B1,并进行远程端口转发
ssh -R 0.0.0.0:2000:localhost:3000 root@222.201.187.247

同理,远程网卡地址可以省略,目标地址也可以是其他主机地址。假设本地主机A2的局域网IP地址为192.168.0.2。

# 在本地主机A1登陆远程云主机B1,并进行远程端口转发
ssh -R 2000:192.168.0.2:3000 root@222.201.187.247

远程端口转发可以用来做网络穿透。

本地端口转发

当云服务器只允许ssh端口登录,其余端口被防火墙限制时使用ssh转发来访问其他端口的服务。
这里把本地端口转发放最后,是因为动态端口转发可以解决本地端口转发的问题,动态端口转发更为强大。

所谓本地端口转发,就是将发送到本地端口的请求,借助SSH,转发到目标端口。这样,就可以通过访问本地端口,来访问目标端口的服务。使用-L属性,就可以指定需要转发的端口,语法是这样的:

-L 本地网卡地址:本地端口:目标地址:目标端口

通过本地端口转发,可以将发送到本地主机A1端口2000的请求,转发到远程云主机B1的3000端口。

# 在本地主机A1登陆远程云主机B1,并进行本地端口转发
ssh -L localhost:2000:localhost:3000 root@222.201.187.247

这样,在本地主机A1上可以通过访问http://localhost:2000来访问远程云主机B1上的3000端口的服务。

实际上**,-L选项中的本地网卡地址是可以省略的**,这时表示2000端口绑定了本地主机A1的127.0.0.1.

另外,-L选项中的目标地址也可以是其他主机的地址。假设远程云主机B2的局域网IP地址为192.168.59.2,则可以这样进行端口转发:

# 在本地主机A1登陆远程云主机B1,并进行本地端口转发。请求被转发到远程云主机B2上
ssh -L 2000:192.168.59.2:3000 root@222.201.187.247

链式端口转发

本地端口转发与远程端口转发结合起来使用,可以进行链式转发。假设A主机在公司,B主机在家,C主机为远程云主机。A主机上运行了前文的Node.js服务,需要在B主机上访问该服务。由于A和B不在同一个网络,且A主机没有独立公共IP地址,所以无法直接访问服务。

可以A主机远程转发给C,B主机本地转发给C,只要C的端口一致,就能访问呢。

SSH Tunnel & Systemd

Create a new Service File

/etc/systemd/system下添加服务文件ssh-tunnel.service
其中{cloud_server_ip}{username}是自定义项目

[Unit]
Description=ssh port forward
After=network.target[Service]
ExecStart=/usr/bin/ssh -C -N -o ExitOnForwardFailure=yes -o ServerAliveInterval=15 -o IdentityFile=/home/{username}/.ssh/id_rsa -R 0.0.0.0:20000:localhost:22 sshtunnel@{cloud_server_ip}
User={username}
Restart=always
RestartSec=1min[Install]
WantedBy=multi-user.target

Systemctrl Enable Start Status and Log

执行以下命令

systemctl enable ssh-tunnel
systemctl start ssh-tunnel
systemctl status ssh-tunnel
journalctl -u ssh-tunnel

If configuration modified, Reload and Restart

如果出现服务启动失败的情况,修改配置文件以后,需要重新加载配置文件,然后重新启动相关服务。

# 重新加载配置文件
$ sudo systemctl daemon-reload# 重启相关服务
$ sudo systemctl ssh-tunnel

Reference

Systemd 入门教程:命令篇 - 阮一峰
Systemd 入门教程:实战篇 - 阮一峰
SSH 端口转发
玩转SSH端口转发

[Configure Intranet penetration service] - ssh port foward ssh tunnel systemd相关推荐

  1. 图解再谈ssh port forwarding-ssh隧道技术

    https://www.ramkitech.com/2012/04/how-to-do-ssh-tunneling-port-forwarding.html https://www.cnblogs.c ...

  2. SSH Tunnel扫盲(ssh port forwarding端口转发)

    2019独角兽企业重金招聘Python工程师标准>>> SSH的的Port Forward,中文可以称为端口转发,是SSH的一项非常重要的功能.它可以建立一条安全的SSH通道,并把任 ...

  3. 第1章 ssh命令和SSH服务详解

    基础服务类系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 本文对SSH连接验证机制进行了非常详细的分析,还详细介绍了ssh客户端工具的各种 ...

  4. 【转】linux下安装ssh服务器端及ssh的安全配置

    一.在服务器上安装ssh的服务器端. $ sudo apt-get install openssh-server 2. 启动ssh-server. $ /etc/init.d/sshrestart 3 ...

  5. linux内核开启ssh,linux开启ssh服务

    本文概略:1)ubuntu发行版开启ssh.2)centos发行版开启ssh 1.ubuntu发行版安装/开启ssh服务 1.1 安装ssh服务端 sudo apt-get install opens ...

  6. hosts多个ip对应一个主机名_一个简单的Web应用程序,用作连接到ssh服务器的ssh客户端...

    WebSSH 一个简单的Web应用程序,用作连接到ssh服务器的ssh客户端.它是用Python编写的,基于tornado,paramiko和xterm.js. 特征 支持SSH密码验证,包括空密码. ...

  7. linux ubuntu 开启ssh服务,开启SSH服务远程登录ubuntu

    Ubuntu系统(14.04 LTS) ssh–secure shell,提供安全的远程登录.从事嵌入式开发搭建linux开发环境中,ssh的服务的安装是其中必不可少的一步.ssh方便一个开发小组中人 ...

  8. linux ssh注册码,linux ssh -l 命令运用

    ssh是远程登录命令,-l选项是最常用的选项,下面是我的一些总结 远程登录:ssh  -l  userName  ip # 远程登录到 10.175.23.9 ssh -l root2 10.175. ...

  9. linux ssh 域,Linux SSH 与 SCP命令简述

    SSH SSH为建立在应用层和传输层基础上的安全协议 sshd服务使用SSH协议进行远程控制,或在计算机之间传送文件.而实现此功能的telnet(远程桌面) 是不安全的,使用明文传送密码 ssh ss ...

最新文章

  1. MXNet动手学深度学习笔记:线性回归
  2. SSH 远程连接原理及故障排错详解
  3. ML之FE:数据处理—特征工程之稀疏特征的简介、如何处理、案例应用之详细攻略
  4. 【原创】设置头文件路径, gcc -I 选项写法
  5. 物体成瘾性_科技成瘾使我们不那么快乐。 那是一个市场机会。
  6. cvi中c语言只保留两位小数,CVI编程常见问题与错误-2012.9
  7. 深度模型压缩论文(01)- Meta Filter Pruning to Accelerate Deep Convolutional Neural Networks
  8. 5-10多分支网络结构
  9. CMS漏洞(发货100CMS、SHECMS、ZHCMS、MACCMS)详解实战
  10. 论文精读 清华ERNIE:Enhanced Language Representation with Informative Entities
  11. 应用计算机测定伏安特性实验,实验25应用计算机测电阻伏安特性.doc
  12. 软件测试的就业前景到底怎么样?
  13. 结构体中元素引用—— “.“ 与 “->“
  14. Python中动态编译函数compile(source, filename, mode, ......)参数filename的作用是什么?...
  15. dubbo+zookeper实现分布式服务部署实例
  16. 贪心的奇巧淫技-Join the Strings
  17. 哈哈~ 开心死了 厚厚
  18. 手把手教你如何推广博客网站
  19. 淘宝客网站推广(一)
  20. 只看不敲,神也学不好C---------嵌入式经典书籍经验分享

热门文章

  1. CS231n学习笔记二
  2. C++ 数字三角形(动态规划)
  3. c语言 三角形三边abc,C语言代码输入abc三个数,求一这3个数为边长的三角形面积...
  4. git提示modified,但diff无内容
  5. 什么是 SAP ABAP? 类型、ABAP 完整形式和含义
  6. uwsgi概念和作用
  7. rtmp 点播系统之播放器篇
  8. VideoView介绍
  9. 推荐一款免费实用的报表工具
  10. 【mktime】mktime函数使用