正文
关于linux通过命令打隧道的信息
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
如何通过反向 SSH 隧道访问 NAT 后面的 Linux 服务器?
除了SSH端口转发外,另一个办法就是SSH反向隧道。SSH反向隧道这个概念其实很简单。为此,你需要在限制性家用网络外面有另一个主机,即所谓的“中继主机”(relay host),你可以从所在地方通过SSH连接到该主机。你可以使用带公共IP地址的虚拟专用服务器(VPS)实例来建立中继主机。然后要做的就是建立一条持久性SSH隧道,从你家用网络的服务器通向公共中继主机。有了这条隧道,你就可以从中继主机“连回”到家用服务器(这就是为什么它叫“反向”隧道)。无论你人在什么地方,或者你家用网络中的NAT或防火墙限制多严格,只要你可以连接到中继主机,就可以连接到家用服务器。
在Linux上建立SSH反向隧道
不妨看看我们如何可以建立并使用一条SSH反向隧道。我们假设下列设置。我们将建立一条从家用服务器(homeserver)到中继服务器(relayserver)的SSH反向隧道,那样我们就可以从另一台名为clientcomputer的计算机,通过中继服务器以SSH的方式连接到家用服务器。中继服务器的公共IP地址是1.1.1.1。
在家用服务器上,打开通向中继服务器的SSH连接,如下所示。
homeserver~$ ssh -fN -R 10022:localhost:22 relayserver_user@1.1.1.1
这里的端口10022是你可以选择的任何随意的端口号。只要确保该端口没有被中继服务器上的其他程序所使用就行。
“-R 10022:localhost:22”选项定义了反向隧道。它通过中继服务器的端口1022,将流量转发到家用服务器的端口22。
若使用“-fN”选项,一旦你成功验证了身份、登录到SSH服务器,SSH就会径直进入后台。如果你不想在远程SSH服务器上执行任何命令,只想转发端口,就像在本文的示例中,这个选项很有用。
运行上述命令后,你将直接回到家用服务器的命令提示符。
登录进入到中继服务器,核实127.0.0.1:10022绑定到sshd。如果是这样,那意味着反向隧道已正确建立起来。
relayserver~$ sudo netstat -nap | grep 10022
tcp 0 0 127.0.0.1:10022 0.0.0.0:* LISTEN 8493/sshd
现在可以从其他任何计算机(比如clientcomputer),登录进入到中继服务器。然后访问家用服务器,如下所示。
relayserver~$ ssh -p 10022 homeserver_user@localhost
需要注意的一个地方就是,你为localhost输入的SSH登录信息/密码应该适用于家用服务器,而不是适用于中继服务器,因为你是通过隧道的本地端点登录进入到家用服务器。所以别为中继服务器输入登录信息/密码。成功登录后,你就接入到了家用服务器。
通过SSH反向隧道,直接连接到NAT后面的服务器
虽然上述方法让你可以连接到NAT后面的家用服务器,但是你需要登录两次,先登录到中继服务器,然后登录到家用服务器。这是由于中继服务器上SSH隧道的端点绑定到回送地址(127.0.0.1)。
但实际上,只要单次登录到中继服务器,就可以直接连接到NAT后面的家用服务器。为此,你需要让中继服务器上的sshd不仅可以从回送地址转发端口,还可以从外部主机转发端口。这可以通过在中继服务器上运行的sshd里面指定GatewayPorts选项来实现。
打开中继服务器的/etc/ssh/sshd_conf,添加下面这一行。
relayserver~$ vi /etc/ssh/sshd_conf
GatewayPorts clientspecified
重启sshd。
基于Debian的系统:
relayserver~$ sudo /etc/init.d/ssh restart
基于红帽的系统:
relayserver~$ sudo systemctl restart sshd
现在不妨从家用服务器开始建立SSH反向隧道,如下所示。
homeserver~$ ssh -fN -R 1.1.1.1:10022:localhost:22 relayserver_user@1.1.1.1
登录进入到中继服务器,用netstat命令核实SSH反向隧道已成功建立起来。
relayserver~$ sudo netstat -nap | grep 10022
tcp 0 0 1.1.1.1:10022 0.0.0.0:* LISTEN 1538/sshd: dev
不像之前的情况,隧道的端点现在是1.1.1.1:10022(中继服务器的公共IP地址),而不是127.0.0.1:10022。这意味着,可以从外部主机连接到隧道端点。
现在可以从其他任何计算机(比如clientcomputer),输入下列命令,访问NAT后面的家用服务器。
clientcomputer~$ ssh -p 10022 homeserver_user@1.1.1.1
在上述命令中,虽然1.1.1.1是中继服务器的公共IP地址,但homeserver_user必须是与家用服务器关联的用户帐户。这是由于,你实际登录进入的主机是家用服务器,而不是中继服务器。后者只是将你的SSH流量中继转发到家用服务器而已。
在Linux上建立持久性SSH反向隧道
想必你已明白了如何建立一条SSH反向隧道,现在不妨让隧道具有“持久性”,那样隧道随时建立并运行起来(无论面对什么样的情况:暂时网络拥塞、SSH超时还是中继主机重启等)。毕竟,要是隧道没有始终建立起来,你也就无法可靠地连接到家用服务器。
为了建立持久性隧道,我要使用一款名为autossh的工具。顾名思义,万一SSH会话由于任何原因而断开,这个程序让你可以自动重启SSH会话。所以,让SSH反向隧道保持持久连接很有用。
第一步,不妨建立无需密码的SSH登录机制,从家用服务器登录到中继服务器。那样一来,autossh就能重启断开的SSH反向隧道,不需要用户干预。
下一步,将autossh安装到发起隧道的家用服务器上。
从家用服务器运行带下列变量的autossh,从而建立一条通向中继服务器的持久性SSH隧道。
homeserver~$ autossh -M 10900 -fN -o "PubkeyAuthentication=yes" -o "StrictHostKeyChecking=false" -o "PasswordAuthentication=no" -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -R 1.1.1.1:10022:localhost:22 relayserver_user@1.1.1.1
“-M 10900”选项指定了中继服务器上的一个监控端口,将用来交换测试数据,以监控SSH会话。该端口不应该被中继服务器上的任何程序所使用。
“-fN”选项传递给ssh命令,让SSH隧道可以在后台运行。
“-o XXXX”选项指令ssh执行下列操作:
•使用密钥验证,而不是密码验证。
•自动接受(未知的)SSH主机密钥。
•每60秒就交换持久连接(keep-alive)消息。
•最多发送3个持久连接消息,而不接受任何响应。
与SSH反向隧道有关的其余选项仍与之前一样。
如果你希望SSH隧道一启动就自动建立起来,可以在/etc/rc.local中添加上述的autossh命令。
求linux自带的ipv6隧道的配置命令(方法越多越好)
Redhat/Fedora Linux:
su -c 'yum install miredo'
su -c 'service miredo-client start'
如果经过上面的设置还无法连接linux通过命令打隧道,请继续往下看linux通过命令打隧道:
su -c 'dbus-launch gedit miredo.conf'
注释原来所有的 ServerAddress 段(在前面加上#号),然后增加下面的语句:
ServerAddress 服务器地址
然后重启miredo服务
su -c 'service miredo-client restart' 公共Teredo服务器地址列表
teredo.remlab.net / teredo-debian.remlab.net (法国) (Miredo 默认设置)
teredo.autotrans.consulintel.com (西班牙)
teredo.ipv6.microsoft.com (美国 雷蒙德) (Windows XP/2003/Vista/7/2008 系统默认设置)
teredo.ngix.ne.kr (韩国)
teredo.managemydedi.com (美国 芝加哥)
Linux 命令,隧道远程连接,ssh -p 21322 -CNg -L 3306:192.168.XX.XX:3306 root@ 221.226.XX.XX
-p 21312 221.226.xx.xxlinux通过命令打隧道的ssh端口是21312, 默认是22
-C 使用压缩
-N 告诉SSH客户端linux通过命令打隧道,这个连接不需要执行任何命令。仅仅做端口转发
-g 允许远程主机连接到建立linux通过命令打隧道的转发linux通过命令打隧道的端口
-L 端口转发linux通过命令打隧道的参数
如何配置 Linux ipv6 6RD隧道
linux 支持的 tunnel 有 ipip gre sit 其他非内核隧道这几种。ipip 需要内核模块 ipip.ko 下面的描述说出了ipip的特点。
简单之极!但是你不能通过IP-in-IP隧道转发广播或者IPv6数据包。你只是连接了两个一般情况下无法直接通讯的IPv4网络而已。至于兼容性,这部分代码已经有很长一段历史了,它的兼容性可以上溯到1.3版的内核。据我所知,Linux的IP-in-IP隧道不能与其他操作系统或路由器互相通讯。它很简单,也很有效。需要它的时候尽管使用,否则就使用GRE。
GRE 需要内核模块 ip_gre.ko
GRE是最初由CISCO开发出来的隧道协议,能够做一些IP-in-IP隧道做不到的事情。比如,你可以使用GRE隧道传输多播数据包和IPv6数据包。
还有一个 sit 我也不知道这个该不该算在隧道里面,他的作用是连接 ipv4 与 ipv6 的网络,这里也我也把他当作隧道的一种吧。
以上所有隧道都需要内核模块 tunnel4.ko 的支持。
关于Linux命令的介绍,看看《linux就该这么学》,具体关于这一章地址3w(dot)linuxprobe/chapter-02(dot)html在内核之外,还有很多实现隧道的方法,最闻名的当然要数PPP和PPTP,但实际上还有很多(有些是专有的,有些是安全的,有些甚至根本不用IP。
linux通过命令打隧道的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、linux通过命令打隧道的信息别忘了在本站进行查找喔。