没有什么能够阻挡,你对自由的向往。

场景:

我有一台设备Server100,在某一个f复杂的内网里,需要多次ssh跳转可以访问到。但是它不能直接访问internet。

我现在需要在我的ssh路径上,搭一条链路出来,让倒霉的设备Server100通过我笔记本上网。

方法:

第一步:通过多次建立端口转发隧道,把Server100的22端口映射出来。让我的笔记本可以直接ssh进Server100。

  第一跳:

┬─[tong@T7:~/VM/nlb]─[05:01:28 PM]
╰─>$ ssh -L127.0.0.1:60022:100.64.224.20:22 t36
┬─[tong@T7:~/VM/nlb]─[:: PM]
╰─>$ ss -l -t -p - |grep
LISTEN 127.0.0.1: 0.0.0.0:* users:(("ssh",pid=,fd=))

  第二跳:

原理同上,如果有的话。我。。没有了。。。[撒花][撒花]

第二步:在server100和笔记本上,分别建立两个tunnel device。为步骤三做准备。

server100上:

[root@nlb-tong- ~]# ip tuntap add mod tun
[root@nlb-tong- ~]# ip link show tun0
: tun0: <POINTOPOINT,MULTICAST,NOARP> mtu qdisc noop state DOWN mode DEFAULT group default qlen
link/none

配IP:

[root@nlb-tong- ~]# ip link set dev tun0 up
[root@nlb-tong- ~]# ip addr add 1.1.1.1/ dev tun0

笔记本上:

同server100

第三步:在Server100的sshd上,开启tunnel转发功能。

把 PermitTunnel改成yes,并重启sshd

[root@nlb-tong- ~]# cat /etc/ssh/sshd_config |grep Tun
#PermitTunnel no
[root@nlb-tong- ~]# systemctl restart sshd

第四步:通过步骤一中最后搭建出的的ssh链接,做一条设备转发隧道,将步骤二中的两个tunnel device打通。

┬─[tong@T7:~/VM/nlb]─[:: PM]
╰─>$ ssh -p60022 -w0: root@127.0.0.1

查看两端的tunnl设备的状态,由NO-CURRIER变成POINTOPOINT

: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu  qdisc pfifo_fast state UP group default qlen
link/none
inet 1.1.1.1/ scope global tun0
valid_lft forever preferred_lft forever

两端添加路由

sudo ip r add 2.1.1.1/ via 2.1.1.2 dev tun0  ##笔记本
ip r add 2.1.1.2/ via 2.1.1.1 dev tun0 ## server

ping一下,验证一下。

[root@nlb-tong- ~]# ip r add 1.1.1.2/ via 1.1.1.1 dev tun0
[root@nlb-tong- ~]# ping 1.1.1.1
PING 1.1.1.1 (1.1.1.1) () bytes of data.
bytes from 1.1.1.1: icmp_seq= ttl= time=0.163 ms
bytes from 1.1.1.1: icmp_seq= ttl= time=0.080 ms
^C

第五步:为两个device配置IP,路由。把Server100的公网流量全部转到笔记本的公网出口上去。

在server100上加路由:

其中第二条用来保证我当前的管理链接可以正常使用。

default via 1.1.1.1 dev tun0
10.0.0.0/ via 10.0.0.1 dev eth0

这个时候,在笔记本上,已经可以收到从1.1.1.1过来的公网包了。

┬─[tong@T7:~/VM/nlb]─[:: PM]
╰─>$ sudo tcpdump -i tun0 -nn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size bytes
::19.436430 IP 1.1.1.1 > 114.114.114.114: ICMP echo request, id , seq , length
::20.451450 IP 1.1.1.1 > 114.114.114.114: ICMP echo request, id , seq , length
::21.475726 IP 1.1.1.1 > 114.114.114.114: ICMP echo request, id , seq , length
::22.435967 IP 1.1.1.1 > 114.114.114.114: ICMP echo request, id , seq , length

然后再在笔记本上进行设置,让这些包,给外网送出去,可用的方法有很多。

最简单的就是bridge。

下面,是用iptables的做法。

# 先,让二层包能相互转发
sudo iptables -A FORWARD -i tun0 -o wlan0 -j ACCEPT
sudo iptables -A FORWARD -o tun0 -i wlan0 -j ACCEPT
# 再,配个SNAT
sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

好了, 通了

[root@client-tong- ~]# curl -q www.baidu.com
<!DOCTYPE html>

第六步:开心的上网。

[root@client-tong- ~]# yum search epel-release

还有还有:

其实,除了tunnel设备,tap设备也是可以的,详见下文:

https://www.taos.com/wp-content/uploads/2015/10/Taos-White-Paper_Advanced-SSH-Tunneling.pdf

大概是这样的:

ssh -o Tunnel=ethernet -f -w : root@remotehost.example.com true

完。

[daily] 比端口转发更高级的ssh device tunnel转发的更多相关文章

  1. ssh端口转发(之kettle ssh方式连接数据库)

    ssh参数解释 格式 ssh  [user@]host [command] 选项: -1:强制使用ssh协议版本1: -2:强制使用ssh协议版本2: -4:强制使用IPv4地址: -6:强制使用IP ...

  2. Linux渗透+SSH内网转发

    http://www.jb51.net/hack/58514.html http://blog.chinaunix.net/uid-756931-id-353243.html http://blog. ...

  3. OPNsense防火墙搭建实验环境,MSF与SSH进行流量转发

    OPNsense防火墙搭建实验环境,MSF与SSH进行流量转发 摘要: 记录实验过程中踩到的坑.介绍OPNsense防火墙的安装配置并搭建实验环境,利用msf的模块及ssh进行流量转发(LAN向DMZ ...

  4. [转]使用ping钥匙临时开启SSH:22端口,实现远程安全SSH登录管理就这么简单

    原文链接:使用ping钥匙临时开启SSH:22端口,实现远程安全SSH登录管理就这么简单 这个留待后面玩一下,还是有安全隐患,非核心业务 临时用一下可以. 设置防火墙策略时,关于SSH:22访问权限, ...

  5. [转帖]使用ping钥匙临时开启SSH:22端口,实现远程安全SSH登录管理就这么简单

    使用ping钥匙临时开启SSH:22端口,实现远程安全SSH登录管理就这么简单 https://www.cnblogs.com/martinzhang/p/5348769.html good good ...

  6. DDGScreenShot--iOS 图片裁剪,切圆角,加边框,你还用cornerRadius,还有更高级的用法

    写在前面 我们肯定做过这样的需求,给一个图片切圆角, 当然我们大多采用简单粗暴的方法 myIcon.layer.cornerRadius = 16.5 myIcon.layer.masksToBoun ...

  7. Qt 事件系统浅析 (用 Windows API 描述,分析了QCoreApplication::exec()和QEventLoop::exec的源码)(比起新号槽,事件机制是更高级的抽象,拥有更多特性,比如 accept/ignore,filter,还是实现状态机等高级 API 的基础)

    事件系统在 Qt 中扮演了十分重要的角色,不仅 GUI 的方方面面需要使用到事件系统,Signals/Slots 技术也离不开事件系统(多线程间).我们本文中暂且不描述 GUI 中的一些特殊情况,来说 ...

  8. [实战] SSH 图形化转发

    [实战] SSH 图形化转发 一.介绍 Unix Like操作系统不是只能进行服务器的架设而已,在美编.排版.制图.多媒体应用上也是有其需要的.这些需求都需要用到图形介面(Graphical User ...

  9. nginx 1.15.10 前端代理转发 将多个地址,代理转发到一个地址和端口 多系统公用一个cookie 统一token

    nginx 1.15.10 前端代理转发 将多个地址,代理转发到一个地址和端口 多系统公用一个cookie 统一token 注意: proxy_pass http://192.168.40.54:22 ...

随机推荐

  1. celery --分布式任务队列

    一.介绍 celery是一个基于python开发的分布式异步消息任务队列,用于处理大量消息,同时为操作提供维护此类系统所需的工具. 它是一个任务队列,专注于实时处理,同时还支持任务调度.如果你的业务场 ...

  2. yaf项目将500错误打印到页面上

    一般在yaf项目调试的时候,如果代码有错误,页面只会响应500错误,但看不到哪里报了什么错误,通过开启yaf的一个配置可以将错误信息显示在页面上. 打开项目的index.php入口文件,在开头加入如下 ...

  3. docker的/var/lib/docker/overlay文件夹突然占满了硬盘

    场景描述 事情是这样的,前两天客户的服务器突然断电了,导致用docker部署的服务也挂了.昨天去现场,重启了docker,同时准备更新一下服务.结果发现有一台节点硬盘满了- 还是觉得有些奇怪的,毕竟d ...

  4. [Git] 将本地分支与远程分支关联

    . . . . . 在本地工程中添加Git,并将其与远程的空库关联起来,只需如下几步. 1. 创建空库 $ git init Initialized empty Git repository in D ...

  5. JDK 自带的观察者模式源码分析以及和自定义实现的取舍

    前言 总的结论就是:不推荐使用JDK自带的观察者API,而是自定义实现,但是可以借鉴其好的思想. java.util.Observer 接口源码分析 该接口十分简单,是各个观察者需要实现的接口 pac ...

  6. 字符集之在UTF-8中,一个汉字为什么需要三个字节?

    (一)在UTF-8中,一个汉字为什么需要三个字节? UNICODE是万能编码,包含了所有符号的编码,它规定了所有符号在计算机底层的二进制的表示顺序.有关Unicode为什么会出现就不叙述了,Unico ...

  7. mac 上使用 zip 版的mysql

    1. 下载: 2. 解压,然后复制到需要的目录下 3. 修改 /usr/local/mysql的所有者为mysql: chown -R mysql:mysql mysql (这一步我是没做,爱做不做. ...

  8. Groovy和Java互调

    Scala和Java为静态语言,Groovy为动态语言 Scala: 函数式编程,同时支持面向对象 Groovy: jvm上的脚本,较好兼容java语法,Groovy加强了Java集成. 可配置化的优 ...

  9. SQUAD的rnet复现踩坑记

    在港科大rnet(https://github.com/HKUST-KnowComp/R-Net) 实现的基础上做了复现 采用melt框架训练,原因是港科大实现在工程上不是很完美,包括固定了batch ...

  10. Qt编写自定义控件2-进度条标尺

    前言 进度条标尺控件的应用场景一般是需要手动拉动进度,上面有标尺可以看到当前进度,类似于qslider控件,其实就是qslider+qprogressbar的杂交版本,不过我才用的是纯qpainter ...