0°

Linux常用工具命令之使用SSH建立VPN

自4.3版开始,OpenSSH可以使用tun/tap27设备来加密一个隧道.其非常类似于基于TLS的VPN解决方案(像OpenVPN).对于SSH的一个优势是,她不需要安装和配置额外的软件.另外隧道使用SSH认证(像共享密钥).

其缺点是,对于一个缓慢的连接,其传输效率较低.并且这个隧道依赖于单个(易断的)TCP链接.这个技术对于快速设置一个基于IP的VPN来说非常有用.她对于用单个TCP端口转发没有限制,并且在所有3/4层协议像ICMP、TCP/UDP等上都可用.
不管怎么样,下面这些选择在sshd_conf文件中是必须的:

PermitRootLogin yes
PermitTunnel yes

6.1 单个P2P连接

这里,我们用点对点隧道连接hclient和hserver两个主机.这个连接是从hclient开始到hserver的,并且是用root来做.这个通道的连接点是10.0.1.1(服务端)和10.0.1.2(客户端),然后我们创建设备tun5(当然也可以是其它数字).这个过程非常简单:

1. 使用SSH的通道选项-w来连接
2. 设置隧道的IP地址.服务端和客户端各一次.
连接到服务端
连接始于客户端,然后再服务端执行命令.
Linux上的服务端

cli># ssh -w5:5 root@hserver
srv># ifconfig tun5 10.0.1.1 netmask 255.255.255.252	//在服务端shell上执行

FreeBSD上的服务端

cli># ssh -w5:5 root@hserver
srv># ifconfig tun5 10.0.1.1 10.0.1.2	//在服务端shell上执行

连接到客户端
在客户端上执行命令:

cli># ifconfig tun5 10.0.1.2 netmask 255.255.255.252	//Linux上的客户端
cli># ifconfig tun5 10.0.1.2 10.0.1.1	//FreeBSD上的客户端

现在两个主机都连上了,并且可以在任何3/4层协议上使用此通道IP地址透明的通讯.

6.2 连接两个网络

除上面的p2p设置外,一个更有用的是SSH VPN用两个gate连接两个私有网络.假设有这样一个例子,netA为192.168.51.0/24还有netB为192.168.16.0/24.设置过程同上面相似,我们只需要添加routing.如果gate不同于默认网关,那在私有网络接口上必须开启NAT.
192.168.51.0/24(netA)|gateA <-> gateB|192.168.16.0/24(netB)

1. 使用隧道选项-w连接SSH.
2. 配置隧道的IP地址.服务端和客户端各一次.
3. 为两个网络添加routing.
4. 如果需要,在gate的私有网络接口上开启NAT.
设置是从netA中的gasteA开始的
连接gateA到gateB
连接从gateA开始,命令执行于gateB.
Linux上的gateB

gateA># ssh -w5:5 root@gateB
gateB># ifconfig tun5 10.0.1.1 netmask 255.255.255.252	//在gateB的shell中执行
gateB># route add -net 192.168.51.0 netmask 255.255.255.0 dev tun5
gateB># echo 1 > /proc/sys/net/ipv4/ip_forward	//如果不是默认网关
gateB># iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

FreeBSD上的gateB

gateA># ssh -w5:5 root@gateB	//创建tun5设备
gateB># ifconfig tun5 10.0.1.1 10.0.1.2	//在gateB的shell中执行
gateB># route add 192.168.51.0/24 10.0.1.2
gateB># sysctl net.inet.ip.forwarding=1	//如果不是默认网关
gateB># natd -s -m -u -dynamic -n fxp0	//看NAT(page 17)
gateA># sysctl net.inet.ip.fw.enable=1

配置gateA
在gateA上执行命令:
Linux上的gateA

gateA># ifconfig tun5 10.0.1.2 netmask 255.255.255.252
gateA># route add -net 192.168.16.0 netmask 255.255.255.0 dev tun5
gateA># echo 1 > /proc/sys/net/ipv4/ip_forward
gateA># iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

FreeBSD上的gateA

gateA># ifconfig tun5 10.0.1.2 10.0.1.1
gateA># route add 192.168.16.0/24 10.0.1.2
gateA># sysctl net.inet.ip.forwarding=1
gateA># natd -s -m -u -dynamic -n fxp0	//看NAT(page 17)
gateA># sysctl net.inet.ip.fw.enable=1

现在两个私有网络都可以通过SSH VPN来透明的连接.如果gate不是默认网关,那么IP转发和NAT设置都是必须的.在这种情况下,客户端将不知道在哪里转发响应(response),并且NAT必须是开启的.

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论