本帖最后由 lqph3387 于 2012-3-7 17:51 编辑
内网的朋友苦于没有合法 ip,不能对外提供 internet 服务。解决方案很多,可以通过在网关做端口映射等手段,如果网管不给做呢。
本文介绍两种比较简单实用的方法,利用 ssh 这个强大的工具。
案例一、
内网主机 A ,开了 http,ftp ,http ,vnc,sshd,等服务。无合法 ip 地址。
外网主机 B ,开了 sshd 服务。有合法 ip : 218.xxx.xxx.xxx
我们的目的是让 B 能访问 A 上的各种服务。
步骤:
1、A 知道 B ip 后,先用 ssh client 连上 B,命令如下:
ssh -R 1234:localhost:21 -l root 218.xxx.xxx.xxx
解释:
关于 ssh 的参数,请看 ssh --help
-L listen-port:host:port Forward local port to remote address
-R listen-port:host:port Forward remote port to local address
-L local (本地) -R :remote (远程)
-R 1234:localhost:21 其实做了个“端口转发(forward)"。
意思是主机 A 把本地的 21端口(对应ftp服务)映射为 B 的1234 端口(任意未被占用),同时 A 监听 B 的1234 端口。
在 B 上用 netstat -al | grep 1234 ,你能看到这个监听连接。
任何发送到 B 1234 端口的请求将被传送到 A的 21 端口。
2、B 用 ftp 工具(任意,如gftp) 连本地的 1234 端口,输入 A 的 ftp 用户和密码。
ftp localhost 1234
千万不要觉的奇怪,为什么连的是本地的地址。
举个不恰当例子,相当于 A 在 B 的房间里装了个窃听器(监听端口),那么 B 在房间里说的话就通过窃听器传送到了 A。
3、推广:
如果 B 没占用 21 端口的话,那么可以写成:
A使用: ssh -R 21:localhost:21 -l root 218.xxx.xxx.xxx
B使用: ftp localhost
如果你想使用 A 上的 http 或其他服务,只需改变服务端口:
http服务 :
A使用:ssh -R 1234:localhost:80 -l root 218.xxx.xxx.xxx
B使用:w3m http://localhost:1234
sshd服务:
A使用:ssh -R 1234:localhost:22 -l root 218.xxx.xxx.xxx
B使用:ssh localhost -p 1234
vnc 服务:
A使用:ssh -R 1234:localhost:5901(其他) -l root 218.xxx.xxx.xxx
B使用:vncviewer localhost:1
这里是否一定要用 root ,涉及到权限问题,具体还得靠大家来总结经验。
案例二、
部分朋友会问了,这样的话只是两台机器的互相通讯,如何让广域网的人都能访问呢?
内网主机 A ,开了 http,ftp ,http ,vnc,sshd等服务。无合法 ip 地址。
外网主机 B ,开了 sshd 服务。有合法 ip : 218.xxx.xxx.xxx
我们的目的是让 internet 上的任何主机能访问 A 上的各种服务。
步骤:
1、首先,B 的sshd 服务端做点小小的设置:
vi /etc/ssh/sshd.config
加入 GatewayPorts yes
然后重启 sshd 服务: /etc/init.d/sshd restart
(解释:
不加,默认会把监听端口绑定在 localhost 或 lo(127.0.0.1),这样除了 B自身别人是没法访问监听端口的。
加入 GatewayPorts yes,把监听端口绑定到 0.0.0.0 ,这样外部的所有机器都能访问到这个监听端口。
主要是考虑安全性问题,默认情况,只允许本地访问。
2、A 知道 B ip 后,先用 ssh client 连上 B,命令如下:
ssh -R 21:localhost:21 -l root 218.xxx.xxx.xxx
(事先确定 B 的21 端口未被占用)
3、分布在 internet 的其它客户机使用 ftp 工具(任意),连 B 21端口。
ftp 218.xxx.xxx.xxx 21
你会发现自己连上了内网 A 的ftp 服务。
此法和案例一完全一样。
internet --------->> B 21 端口----------->>A 21端口
可以叫做端口转发,或隧道技术,B机器我们也可以称之为跳板或中转机
总结:文章是摘抄的,不是我写的,看到的朋友不妨想想这2个案例在我们的实际工作中什么情况下会用到?案例一和案例二的好处是什么?是否还有更好的办法可以解决此类问题。
PS:我这有更好的方法解决工作中遇到的此类问题,如有需要请私信,欢迎拍砖。
内网的朋友苦于没有合法 ip,不能对外提供 internet 服务。解决方案很多,可以通过在网关做端口映射等手段,如果网管不给做呢。
本文介绍两种比较简单实用的方法,利用 ssh 这个强大的工具。
案例一、
内网主机 A ,开了 http,ftp ,http ,vnc,sshd,等服务。无合法 ip 地址。
外网主机 B ,开了 sshd 服务。有合法 ip : 218.xxx.xxx.xxx
我们的目的是让 B 能访问 A 上的各种服务。
步骤:
1、A 知道 B ip 后,先用 ssh client 连上 B,命令如下:
ssh -R 1234:localhost:21 -l root 218.xxx.xxx.xxx
解释:
关于 ssh 的参数,请看 ssh --help
-L listen-port:host:port Forward local port to remote address
-R listen-port:host:port Forward remote port to local address
-L local (本地) -R :remote (远程)
-R 1234:localhost:21 其实做了个“端口转发(forward)"。
意思是主机 A 把本地的 21端口(对应ftp服务)映射为 B 的1234 端口(任意未被占用),同时 A 监听 B 的1234 端口。
在 B 上用 netstat -al | grep 1234 ,你能看到这个监听连接。
任何发送到 B 1234 端口的请求将被传送到 A的 21 端口。
2、B 用 ftp 工具(任意,如gftp) 连本地的 1234 端口,输入 A 的 ftp 用户和密码。
ftp localhost 1234
千万不要觉的奇怪,为什么连的是本地的地址。
举个不恰当例子,相当于 A 在 B 的房间里装了个窃听器(监听端口),那么 B 在房间里说的话就通过窃听器传送到了 A。
3、推广:
如果 B 没占用 21 端口的话,那么可以写成:
A使用: ssh -R 21:localhost:21 -l root 218.xxx.xxx.xxx
B使用: ftp localhost
如果你想使用 A 上的 http 或其他服务,只需改变服务端口:
http服务 :
A使用:ssh -R 1234:localhost:80 -l root 218.xxx.xxx.xxx
B使用:w3m http://localhost:1234
sshd服务:
A使用:ssh -R 1234:localhost:22 -l root 218.xxx.xxx.xxx
B使用:ssh localhost -p 1234
vnc 服务:
A使用:ssh -R 1234:localhost:5901(其他) -l root 218.xxx.xxx.xxx
B使用:vncviewer localhost:1
这里是否一定要用 root ,涉及到权限问题,具体还得靠大家来总结经验。
案例二、
部分朋友会问了,这样的话只是两台机器的互相通讯,如何让广域网的人都能访问呢?
内网主机 A ,开了 http,ftp ,http ,vnc,sshd等服务。无合法 ip 地址。
外网主机 B ,开了 sshd 服务。有合法 ip : 218.xxx.xxx.xxx
我们的目的是让 internet 上的任何主机能访问 A 上的各种服务。
步骤:
1、首先,B 的sshd 服务端做点小小的设置:
vi /etc/ssh/sshd.config
加入 GatewayPorts yes
然后重启 sshd 服务: /etc/init.d/sshd restart
(解释:
不加,默认会把监听端口绑定在 localhost 或 lo(127.0.0.1),这样除了 B自身别人是没法访问监听端口的。
加入 GatewayPorts yes,把监听端口绑定到 0.0.0.0 ,这样外部的所有机器都能访问到这个监听端口。
主要是考虑安全性问题,默认情况,只允许本地访问。
2、A 知道 B ip 后,先用 ssh client 连上 B,命令如下:
ssh -R 21:localhost:21 -l root 218.xxx.xxx.xxx
(事先确定 B 的21 端口未被占用)
3、分布在 internet 的其它客户机使用 ftp 工具(任意),连 B 21端口。
ftp 218.xxx.xxx.xxx 21
你会发现自己连上了内网 A 的ftp 服务。
此法和案例一完全一样。
internet --------->> B 21 端口----------->>A 21端口
可以叫做端口转发,或隧道技术,B机器我们也可以称之为跳板或中转机
总结:文章是摘抄的,不是我写的,看到的朋友不妨想想这2个案例在我们的实际工作中什么情况下会用到?案例一和案例二的好处是什么?是否还有更好的办法可以解决此类问题。
PS:我这有更好的方法解决工作中遇到的此类问题,如有需要请私信,欢迎拍砖。
编辑回复