通过ssh建立点对点的隧道,实现两个子网通信

简介: 查看ssh帮助文档是发现有个-w的参数,说明如下: -w local_tun[:remote_tun] Requests tunnel device forwarding with the specified tun(4) devices between the...

查看ssh帮助文档是发现有个-w的参数,说明如下:

     -w local_tun[:remote_tun]
             Requests tunnel device forwarding with the specified tun(4) devices between the client (local_tun) and the
             server (remote_tun).

             The devices may be specified by numerical ID or the keyword “any”, which uses the next available tunnel
             device.  If remote_tun is not specified, it defaults to “any”.  See also the Tunnel and TunnelDevice direc?
             tives in ssh_config(5).  If the Tunnel directive is unset, it is set to the default tunnel mode, which is
             “point-to-point”.

 

可以建立“point-to-point”的隧道,类似于pptp的作用

假设现在有北京和上网两个组网,内外网IP如下:

 准备工作:

服务端需要开启隧道参数(上图中的上海节点)

vim /etc/ssh/sshd_config;
------------------------------------------------------------------------------
PermitRootLogin yes
PermitTunnel yes
------------------------------------------------------------------------------
service ssh restart#重启sshd服务(ubuntu)

 

 

登录北京的机器操作:

 

ssh -o TCPKeepAlive=yes -o ServerAliveInterval=60 -f -w 10:10  2.2.2.2 true

 

 TCPKeepAlive ServerAliveInterval 两个参数是为了保持连接,防止网络抖动是ssh隧道断掉

-f表示后台运行

-w 10:10 表示两边用于隧道通信的网卡名字为 tun10 ,如果0:0,那两边网卡就是tun0

注意:不要混淆了Linux下面名为tunl0的预设Tunnel界面,请用 ip addr show 命令检查。

执行完成这一步之后连边会同时增加一个tun10名的网卡

此时隧道已经建立,但是两边暂时还不能通信,需要制定两边网卡的ip和启动网卡

#北京
ip addr add 10.1.1.1 peer 10.1.1.2 dev tun10
ip link set tun10 up

#上海

ip addr add 10.1.1.2 peer 10.1.1.1 dev tun10
ip link set tun10 up

 

执行完成上面命令之后 两边已经可以相互ping通了,

如果需要两个子网通信需要指定路由和利用iptables做snat

例如上海访问北京:

上海:
route add -net 192.168.10.0/24 dev tun10#网段为对端(北京)的网段 172.16.10.4上执行
如果需要上海的同一子网的其他机器访问的话需要以下操作
iptables -t nat -A POSTROUTING -s 172.16.10.0/24 -d 192.168.10.0/24 -j SNAT --to 10.1.1.2  # 172.16.10.4上执行
子网内其他机器增加路由
route add -net 192.168.10.0/24 gw 172.16.10.4
 
 

北京:
iptables -t nat -A POSTROUTING -s 10.1.1.2  -d 192.168.10.0/24  -j SNAT --to 192.168.10.4

 

 执行完成后在上海的子网 已经可以和北京的子网内其他机器通信了

 

如果需要北京子网也访问上海子网的话

根据上面修改即可;

ssh 隧道还有个有点就是只需要服务端有公网IP就行,客户端不需要有公网IP,只要可以访问服务端的公网IP即可

目录
相关文章
|
安全 关系型数据库 MySQL
Mysql SSH隧道连接使用方法
Mysql SSH隧道连接使用方法
1638 0
|
网络协议 网络安全 数据安全/隐私保护
三种不同类型的ssh隧道
想通过ssh隧道连接远端机器的VNC服务,对ssh -L命令不太熟悉,man ssh后发现3组与隧道(turnnel)相关的参数:ssh -D,ssh -L,ssh -R,一下子就搞糊涂了,所有下决心仔细研究一番。 何谓SSH隧道 隧道是一种把一种网络协议封装进另外一种网络协议进行传输的技术。这里我们研究ssh隧道,所以所有的网络通讯都是加密的。又被称作端口转发,因为ssh隧道通常会绑定一个本地端口,所有发向这个端口端口的数据包,都会被加密并透明地传输到远端系统。 SSH隧道的类型 ssh隧道有3种类型: 动态端口转发(Socks 代理) 本地端口转发 远端端口转发 动态端口转发
633 0
|
4月前
|
安全 网络安全 数据安全/隐私保护
ansible 建立ssh信任并分发到各个机器
ansible 建立ssh信任并分发到各个机器
119 0
|
4月前
|
安全 Linux 网络安全
|
3月前
|
网络协议 安全 Linux
【内网安全】隧道技术&SSH&DNS&ICMP&SMB&上线通讯Linux&Mac
【内网安全】隧道技术&SSH&DNS&ICMP&SMB&上线通讯Linux&Mac
|
4月前
|
Ubuntu 网络安全 数据安全/隐私保护
使用SSH隧道将Ubuntu云服务器Jupyter Notebook端口映射到本地
这样,你就成功地将Ubuntu云服务器上的Jupyter Notebook端口映射到本地,使你能够通过本地浏览器访问并使用Jupyter Notebook。
308 1
|
运维 大数据 Shell
【大数据开发运维解决方案】做SSH免密通信后仍需输入密码问题解决
同事对分配的三台服务器服务器a、b、c三台机器做ssh免密通信,但是b机器做ssh免密通信后访问c节点仍需输入密码,需要解决!!!
【大数据开发运维解决方案】做SSH免密通信后仍需输入密码问题解决
|
安全 网络安全
SSH隧道端口转发详解
需要在目标主机修改如下配置文件内容
299 0
|
安全 网络安全 Python
Python建立SSH连接与使用方法
paramiko是一个Python实现的SSH协议库,可以用来建立SSH连接、传输文件等。你可以在Python环境中使用pipan
Python建立SSH连接与使用方法
|
域名解析 网络协议 安全
【内网安全-隧道技术】SMB、ICMP、DNS隧道、SSH协议
【内网安全-隧道技术】SMB、ICMP、DNS隧道、SSH协议
865 0
【内网安全-隧道技术】SMB、ICMP、DNS隧道、SSH协议