huangcm
2024-12-18 9d29be7f7249789d6ffd0440067187a9f040c2cd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
How to use OpenSSH-based virtual private networks
-------------------------------------------------
 
OpenSSH contains support for VPN tunneling using the tun(4) network
tunnel pseudo-device which is available on most platforms, either for
layer 2 or 3 traffic.
 
The following brief instructions on how to use this feature use
a network configuration specific to the OpenBSD operating system.
 
(1) Server: Enable support for SSH tunneling
 
To enable the ssh server to accept tunnel requests from the client, you
have to add the following option to the ssh server configuration file
(/etc/ssh/sshd_config):
 
   PermitTunnel yes
 
Restart the server or send the hangup signal (SIGHUP) to let the server
reread it's configuration.
 
(2) Server: Restrict client access and assign the tunnel
 
The OpenSSH server simply uses the file /root/.ssh/authorized_keys to
restrict the client to connect to a specified tunnel and to
automatically start the related interface configuration command. These
settings are optional but recommended:
 
   tunnel="1",command="sh /etc/netstart tun1" ssh-rsa ... reyk@openbsd.org
 
(3) Client: Configure the local network tunnel interface
 
Use the hostname.if(5) interface-specific configuration file to set up
the network tunnel configuration with OpenBSD. For example, use the
following configuration in /etc/hostname.tun0 to set up the layer 3
tunnel on the client:
 
   inet 192.168.5.1 255.255.255.252 192.168.5.2
 
OpenBSD also supports layer 2 tunneling over the tun device by adding
the link0 flag:
 
   inet 192.168.1.78 255.255.255.0 192.168.1.255 link0
 
Layer 2 tunnels can be used in combination with an Ethernet bridge(4)
interface, like the following example for /etc/bridgename.bridge0:
 
   add tun0
   add sis0
   up
 
(4) Client: Configure the OpenSSH client
 
To establish tunnel forwarding for connections to a specified
remote host by default, use the following ssh client configuration for
the privileged user (in /root/.ssh/config):
 
   Host sshgateway
       Tunnel yes
       TunnelDevice 0:any
       PermitLocalCommand yes
           LocalCommand sh /etc/netstart tun0
 
A more complicated configuration is possible to establish a tunnel to
a remote host which is not directly accessible by the client.
The following example describes a client configuration to connect to
the remote host over two ssh hops in between. It uses the OpenSSH
ProxyCommand in combination with the nc(1) program to forward the final
ssh tunnel destination over multiple ssh sessions.
 
   Host access.somewhere.net
           User puffy
   Host dmzgw
           User puffy
           ProxyCommand ssh access.somewhere.net nc dmzgw 22
   Host sshgateway
           Tunnel Ethernet
           TunnelDevice 0:any
           PermitLocalCommand yes
           LocalCommand sh /etc/netstart tun0
           ProxyCommand ssh dmzgw nc sshgateway 22
 
The following network plan illustrates the previous configuration in
combination with layer 2 tunneling and Ethernet bridging.
 
+--------+       (          )      +----------------------+
| Client |------(  Internet  )-----| access.somewhere.net |
+--------+       (          )      +----------------------+
    : 192.168.1.78                             |
    :.............................         +-------+
     Forwarded ssh connection    :         | dmzgw |
     Layer 2 tunnel              :         +-------+
                                 :             |
                                 :             |
                                 :      +------------+
                                 :......| sshgateway |
                                      | +------------+
--- real connection                 Bridge ->  |          +----------+
... "virtual connection"                     [ X ]--------| somehost |
[X] switch                                                +----------+
                                                          192.168.1.25
 
(5) Client: Connect to the server and establish the tunnel
 
Finally connect to the OpenSSH server to establish the tunnel by using
the following command:
 
   ssh sshgateway
 
It is also possible to tell the client to fork into the background after
the connection has been successfully established:
 
   ssh -f sshgateway true
 
Without the ssh configuration done in step (4), it is also possible
to use the following command lines:
 
   ssh -fw 0:1 sshgateway true
   ifconfig tun0 192.168.5.1 192.168.5.2 netmask 255.255.255.252
 
Using OpenSSH tunnel forwarding is a simple way to establish secure
and ad hoc virtual private networks. Possible fields of application
could be wireless networks or administrative VPN tunnels.
 
Nevertheless, ssh tunneling requires some packet header overhead and
runs on top of TCP. It is still suggested to use the IP Security
Protocol (IPSec) for robust and permanent VPN connections and to
interconnect corporate networks.
 
   Reyk Floeter
 
$OpenBSD: README.tun,v 1.4 2006/03/28 00:12:31 deraadt Exp $