服务端与客户端均要求Linux系统
- 
客户端证书准备
创建相关目录,这里以
~/sshtunnel为例进入
~/sshtunnel目录创建证书
ssh-keygen -t ecdsa创建
known_hosts文件touch known_hosts - 
服务器端帐号准备
建立名为
sshtunnel的帐号,用于连接服务器sudo useradd -s /bin/false -d /home/sshtunnel -m sshtunnel将用户添加到
netdev组sudo usermod -a -G netdev sshtunnel添加私钥
sudo mkdir /home/sshtunnel/.ssh
sudo vi /home/sshtunnel/.ssh/authorized_keys
sudo chown -R sshtunnel:sshtunnel /home/sshtunnel/修改
/etc/ssh/sshd_config允许该帐号创建 tunnel追加:
Match User sshtunnel PermitTunnel yes - 
网络规划
服务器与客户端之间使用 tun 设备通信,这是一种点对点通信设备,只允许两个 IP 之间进行通信,一个为本机 IP,另一个为对端 IP (Point-to-Point 地址)。
我们假设:
- 服务器端使用 
tun0设备,客户端使用tun1设备。实际使用中两个设备名称可以相同,这里为方便介绍。 - 服务端 IP 为 
10.30.0.1,客户端 IP 为10.30.0.2。我们建议网关角色使用奇数 IP。 - 由原理可知,服务器方对端 IP 应设置为 
10.30.0.2,客户方对端 IP 应设置为10.30.0.1 - 服务器及客户端子网掩码均设置为 
255.255.255.255 
 - 服务器端使用 
 - 
服务器端准备 tun 设备
如果此时客户端进行连接,由于我们的帐号并非 root 权限,无法创建 tun 设备。如果 ssh 连接时使用
-v参数,会看到open failed: administratively prohibited: open failed错误。假设我们本地及服务器端均使用
tun0设备sudo ip tuntap add dev tun0 mode tun user sshtunnel group netdev然后我们可以预先配置一下网络参数
在
/etc/network/interfaces中添加以下内容auto tun0 iface tun0 inet static address 10.30.0.1 netmask 255.255.255.255 pointopoint 10.30.0.2