Wikipedia: SSH Tunneling[2]
O’Reilly: Using SSH Tunneling[3]
Ssh.com: Tunneling Explained[4]
Ssh.com: Port Forwarding[5]
SecurityFocus: SSH Port Forwarding[6]
Red Hat Magazine: SSH Port Forwarding[7]
externo1 $ netstat -ltn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
...
Tcp 0 0 127.0.0.1:7900 0.0.0.0:* LISTEN
...
externo1 $ netstat -ltn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
...
Tcp 0 0 0.0.0.0:7900 0.0.0.0:* LISTEN
...
interno1 $ netstat -lnt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
...
Tcp 0 0 127.0.0.1:7900 0.0.0.0:* LISTEN
...
如果我们没有修改服务器配置的权限,我们将不能使用该方案来进行端口转发。这是因为如果没有其他的限制,用户可以开启一个端口(> 1024)来监听来自外部的请求并转发到 localhost:7900。
参照这个案例:netcat[13] ( Debian # 310431: sshd_config should warn about the GatewayPorts workaround.[14] )
所以我们修改 /etc/ssh/sshd_config,添加如下内容:
GatewayPorts clientspecified
然后,我们使用如下命令来重载修改后的配置文件(在 Debian 和 Ubuntu 上)。
sudo /etc/init.d/ssh reload
我们确认一下现在 interno1 节点上存在 7900 端口的监听程序,监听来自不同 IP 的请求:
interno1 $ netstat -ltn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
...
Tcp 0 0 0.0.0.0:7900 0.0.0.0:* LISTEN
...