linux远程ipv6端口,SSH端口转发笔记(ipv6 与 端口映射)

  • Post author:
  • Post category:linux


91d3f65df380a0a4115651e9000992a1.gif

91d3f65df380a0a4115651e9000992a1.gif

端口转发概念

端口转发或隧道,是一种通过SSH转发本来不安全的TCP通信的安全保护罩。您可以保护例如POP3,SMTP和HTTP连接,否则可能是不安全的。网络上什么人都有!

有两种类型的端口转发:本地和远程转发。它们也分别被称作传出和传入隧道。

本地端口转发转发流量来本地端口到指定的远程端口。例如,所有流向客户机端口1234的流量可能被转发到服务器(主机)端口23上。

注:localhost的值是在ssh连接建立之后才确定——所以本地端口转发(传出隧道)时,localhost指您所连接的服务器(远程主机的电脑)。

远程端口转发则正好相反:其转发流向远程端口的流量到指定的本地端口。例如,所有的流量流向服务器(主机)上的1234端口可以被转发到客户端(本地主机)的端口23上。

端口转发实现

ssh的三个强大的端口转发命令:

转发到远端:ssh -C -f -N -g -L 本地端口:目标IP:目标端口 用户名@目标IP

转发到本地:ssh -C -f -N -g –R 本地端口:目标IP:目标端口 用户名@目标IP

动态转发:ssh -C -f -N -g -D listen_port user@Tunnel_Host

-C:压缩数据传输。

-f :后台认证用户/密码,通常和-N连用,不用登录到远程主机。

-N :不执行脚本或命令,通常与-f连用。

-g :在-L/-R/-D参数中,允许远程主机连接到建立的转发的端口,如果不加这个参数,只允许本地主机建立连接。

-L 本地端口:目标IP:目标端口: 将本地机(客户机)的某个端口转发到远端指定机器的指定端口. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 同时远程主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有 root 才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport

-R 本地端口:目标IP:目标端口: 将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口. 工作原理是这样的, 远程主机上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转向出去, 同时本地主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有用 root 登录远程主机才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport

-p :被登录的ssd服务器的sshd服务端口。

-D port: 指定一个本地机器 “动态的’’ 应用程序端口转发. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 根据应用程序的协议可以判断出远程主机将和哪里连接. 目前支持 SOCKS4 协议, 将充当 SOCKS4 服务器. 只有 root 才能转发特权端口. 可以在配置文件中指定动态端口的转发.

应用举例

1.将发往本机的80端口访问转发到174.139.9.66的8080端口

ssh -C -f -N -g -L 80:174.139.9.66:8080 master@174.139.9.66

2.将发往174.139.9.66的8080访问转发到本机的80端口

ssh -C -f -N -g -R 80:174.139.9.66:8080 master@174.139.9.66

任何人在你的本地子网中应该能够这样做是为了连接到本机的工作:

$ ssh root@192.168.10.10 -p 10000

补充

让远程端口转发可以让任何人使用

如果你想让每个在子网的人都能够SSH到自己家里的电脑,没有-g选项可以让远程端口转发能够让其他人使用,所以你需要改变远程主机的SSH配置,编辑/etc/ssh/sshd_config 增加以下这行:

GatewayPorts yes

就像以前一样连接:

home $ SSH user@work.example.org -R 10000:192.168.1.10:22

现在,它是监听的服务器在工作的所有接口:

work.example.org$ netstat -tunelp | grep 10000

tcp 0 0 0.0.0.0:10000 0.0.0.0:* LISTEN 0 73721060 4426/1

1

2

3

4

work.example.org$netstat-tunelp|grep10000

tcp000.0.0.0:100000.0.0.0:*LISTEN0737210604426/1

现在任何人可以通过服务器连接到自己家里的电脑:

anyone.example.org $ SSH anyone@work.example.org -p 10000

1

2

anyone.example.org$SSHanyone@work.example.org-p10000

ipv6 示例

基本上与ipv4相同,只是因为ipv6地址的形式中有冒号,所以为了清晰,需要在ipv6地址两端加[和] 例如:

ssh -g -L 8922:[2001:…:…:…:…:…:fe23:93e4]:22 id@2001:…:…:…:…:…:…:93e4

1

2

ssh-g-L8922:[2001:…:…:…:…:…:fe23:93e4]:22id@2001:…:…:…:…:…:…:93e4

注意

如果你想映射的端口<1024,您将需要root身份。

不要忘记,如果需要对端口进行映射,需要在相应防火墙中打开所需的端口。

然而,转发的端口只能运行TCP协议,但有另一种方法,通过SSH使用netcat可以用来转发UDP协议的内容。