利用SSH隧道让内网机器上互联网的方法
网上那些问完问题就消失的人最无耻了,连个基本的谢谢都没,删帖放blog里。
背景是这样的:某局域网里有一台Linux机子,不能访问外网,但防火墙(路由器)留了一个可以从外网访问内网的端口(ssh或者vpn都可以)。
目的:利用这个单向端口,配合外网的一台Linux主机,让内网的Linux主机可以访问外网,进一步还可以让整个局域网都能访问外网。
发信人: oicu (Oh! I see you!), 信区: LinuxApp
标 题: Re: 求让内网机器可以上互联网的方案
发信站: 水木社区 (Tue Jan 20 17:47:42 2015), 站内
不需要反向ssh,用VPN over SSH,需要root权限。
【环境】
outerB:Deepin 2013,eth0 192.168.1.100
模拟网关:Windows 7,eth0 192.168.1.101
innerA:CentOS 6.4,eth0 192.168.19.128
【模拟VPN连入内网】
1、Windows7安装VMware11。
2、安装innerA虚拟机,用host网络模拟不能上外网。
3、Win7通过netsh设置端口映射到innerA,比如6022端口映射到22:
1 | netsh interface portproxy add v4tov4 ^ |
我这里实际只是模拟路由器端口映射的方式,懒得折腾VPN,只需innerA不能上网即可。
【配置服务器】
先设置innerA的sshd_config配置:
1 | PermitRootLogin yes |
/etc/init.d/sshd restart
在outerB和innerA都安装tunctlyum install tunctl
或者sudo apt-get install uml-utilities
可以先sftp把包传到innerA,dpkg或者rpm安装。
On the outerB:
1 | sudo ssh -NTCf -w 0:1 'root@192.168.1.101 -p 6022' |
On the innerA:
1 | ip addr show tun1 |
最后这个网关ip用10.0.0.100也可~
innerA可以上网了,那内网其他电脑也不成问题,innerA再加一条iptables规则:iptables -t nat -A POSTROUTING -s 192.168.19.0/32 -o eth0 -j MASQUERADE
其他电脑把网关改为innerA的局域网IP即可,添加路由也可以。
这种情况当然不用考虑改路由器的设置了,要给你上网还何必有这些麻烦?
【 在 oolong (乌龙茶) 的大作中提到: 】
所有机器都是 ubuntu linux 14.04
[需求]
一台内网的机器innerA,有固定的ip,但没有外网连接
一台外网的机器outerB,有固定的公网ip,通过vpn连入内网,可以ssh到innerA
这样的设置,有没有可能让innerA正常访问到互联网?
[目前解决方案]
- 先建立反向tunnel
outerB$ ssh -NfR 0.0.0.0:7001:localhost:2 innerA- 在innerA上建立socks
innerA$ ssh -NfD 3128 -p 7001 localhost- 使用tsocks可以上网,如果命令需要sudo,则需要使用root账号
方案的问题在于1.DNS,2.cron job都没法执行,比如ntp什么的
[尝试过但失败的sshuttle方案]- 建立反向tunnel
outerB$ ssh -NfR 0.0.0.0:7001:localhost:2 innerA- sshuttle
innerA$ sshuttle –dns -r localhost:7001 0/0
这时候所有到innerA的ssh连线都断了,无法使用。奇怪的是曾经在 outerB 和
outerC(as innerA) 上测试过,outerC 可以完全使用outerB的网络
求大神指点目前情况下的解决方案!