1021d409fSDag-Erling SmørgravHow to use OpenSSH-based virtual private networks 2021d409fSDag-Erling Smørgrav------------------------------------------------- 3021d409fSDag-Erling Smørgrav 4021d409fSDag-Erling SmørgravOpenSSH contains support for VPN tunneling using the tun(4) network 5021d409fSDag-Erling Smørgravtunnel pseudo-device which is available on most platforms, either for 6021d409fSDag-Erling Smørgravlayer 2 or 3 traffic. 7021d409fSDag-Erling Smørgrav 8021d409fSDag-Erling SmørgravThe following brief instructions on how to use this feature use 9021d409fSDag-Erling Smørgrava network configuration specific to the OpenBSD operating system. 10021d409fSDag-Erling Smørgrav 11021d409fSDag-Erling Smørgrav(1) Server: Enable support for SSH tunneling 12021d409fSDag-Erling Smørgrav 13021d409fSDag-Erling SmørgravTo enable the ssh server to accept tunnel requests from the client, you 14021d409fSDag-Erling Smørgravhave to add the following option to the ssh server configuration file 15021d409fSDag-Erling Smørgrav(/etc/ssh/sshd_config): 16021d409fSDag-Erling Smørgrav 17021d409fSDag-Erling Smørgrav PermitTunnel yes 18021d409fSDag-Erling Smørgrav 19021d409fSDag-Erling SmørgravRestart the server or send the hangup signal (SIGHUP) to let the server 20021d409fSDag-Erling Smørgravreread it's configuration. 21021d409fSDag-Erling Smørgrav 22021d409fSDag-Erling Smørgrav(2) Server: Restrict client access and assign the tunnel 23021d409fSDag-Erling Smørgrav 24021d409fSDag-Erling SmørgravThe OpenSSH server simply uses the file /root/.ssh/authorized_keys to 25021d409fSDag-Erling Smørgravrestrict the client to connect to a specified tunnel and to 26021d409fSDag-Erling Smørgravautomatically start the related interface configuration command. These 27021d409fSDag-Erling Smørgravsettings are optional but recommended: 28021d409fSDag-Erling Smørgrav 29021d409fSDag-Erling Smørgrav tunnel="1",command="sh /etc/netstart tun1" ssh-rsa ... reyk@openbsd.org 30021d409fSDag-Erling Smørgrav 31021d409fSDag-Erling Smørgrav(3) Client: Configure the local network tunnel interface 32021d409fSDag-Erling Smørgrav 33021d409fSDag-Erling SmørgravUse the hostname.if(5) interface-specific configuration file to set up 34021d409fSDag-Erling Smørgravthe network tunnel configuration with OpenBSD. For example, use the 35021d409fSDag-Erling Smørgravfollowing configuration in /etc/hostname.tun0 to set up the layer 3 36021d409fSDag-Erling Smørgravtunnel on the client: 37021d409fSDag-Erling Smørgrav 38021d409fSDag-Erling Smørgrav inet 192.168.5.1 255.255.255.252 192.168.5.2 39021d409fSDag-Erling Smørgrav 40021d409fSDag-Erling SmørgravOpenBSD also supports layer 2 tunneling over the tun device by adding 41021d409fSDag-Erling Smørgravthe link0 flag: 42021d409fSDag-Erling Smørgrav 43021d409fSDag-Erling Smørgrav inet 192.168.1.78 255.255.255.0 192.168.1.255 link0 44021d409fSDag-Erling Smørgrav 45021d409fSDag-Erling SmørgravLayer 2 tunnels can be used in combination with an Ethernet bridge(4) 46021d409fSDag-Erling Smørgravinterface, like the following example for /etc/bridgename.bridge0: 47021d409fSDag-Erling Smørgrav 48021d409fSDag-Erling Smørgrav add tun0 49021d409fSDag-Erling Smørgrav add sis0 50021d409fSDag-Erling Smørgrav up 51021d409fSDag-Erling Smørgrav 52021d409fSDag-Erling Smørgrav(4) Client: Configure the OpenSSH client 53021d409fSDag-Erling Smørgrav 54021d409fSDag-Erling SmørgravTo establish tunnel forwarding for connections to a specified 55021d409fSDag-Erling Smørgravremote host by default, use the following ssh client configuration for 56021d409fSDag-Erling Smørgravthe privileged user (in /root/.ssh/config): 57021d409fSDag-Erling Smørgrav 58021d409fSDag-Erling Smørgrav Host sshgateway 59021d409fSDag-Erling Smørgrav Tunnel yes 60021d409fSDag-Erling Smørgrav TunnelDevice 0:any 61021d409fSDag-Erling Smørgrav PermitLocalCommand yes 62021d409fSDag-Erling Smørgrav LocalCommand sh /etc/netstart tun0 63021d409fSDag-Erling Smørgrav 64021d409fSDag-Erling SmørgravA more complicated configuration is possible to establish a tunnel to 65021d409fSDag-Erling Smørgrava remote host which is not directly accessible by the client. 66021d409fSDag-Erling SmørgravThe following example describes a client configuration to connect to 67021d409fSDag-Erling Smørgravthe remote host over two ssh hops in between. It uses the OpenSSH 68021d409fSDag-Erling SmørgravProxyCommand in combination with the nc(1) program to forward the final 69021d409fSDag-Erling Smørgravssh tunnel destination over multiple ssh sessions. 70021d409fSDag-Erling Smørgrav 71021d409fSDag-Erling Smørgrav Host access.somewhere.net 72021d409fSDag-Erling Smørgrav User puffy 73021d409fSDag-Erling Smørgrav Host dmzgw 74021d409fSDag-Erling Smørgrav User puffy 75021d409fSDag-Erling Smørgrav ProxyCommand ssh access.somewhere.net nc dmzgw 22 76021d409fSDag-Erling Smørgrav Host sshgateway 77021d409fSDag-Erling Smørgrav Tunnel Ethernet 78021d409fSDag-Erling Smørgrav TunnelDevice 0:any 79021d409fSDag-Erling Smørgrav PermitLocalCommand yes 80021d409fSDag-Erling Smørgrav LocalCommand sh /etc/netstart tun0 81021d409fSDag-Erling Smørgrav ProxyCommand ssh dmzgw nc sshgateway 22 82021d409fSDag-Erling Smørgrav 83021d409fSDag-Erling SmørgravThe following network plan illustrates the previous configuration in 84021d409fSDag-Erling Smørgravcombination with layer 2 tunneling and Ethernet bridging. 85021d409fSDag-Erling Smørgrav 86021d409fSDag-Erling Smørgrav+--------+ ( ) +----------------------+ 87021d409fSDag-Erling Smørgrav| Client |------( Internet )-----| access.somewhere.net | 88021d409fSDag-Erling Smørgrav+--------+ ( ) +----------------------+ 89021d409fSDag-Erling Smørgrav : 192.168.1.78 | 90021d409fSDag-Erling Smørgrav :............................. +-------+ 91021d409fSDag-Erling Smørgrav Forwarded ssh connection : | dmzgw | 92021d409fSDag-Erling Smørgrav Layer 2 tunnel : +-------+ 93021d409fSDag-Erling Smørgrav : | 94021d409fSDag-Erling Smørgrav : | 95021d409fSDag-Erling Smørgrav : +------------+ 96021d409fSDag-Erling Smørgrav :......| sshgateway | 97021d409fSDag-Erling Smørgrav | +------------+ 98021d409fSDag-Erling Smørgrav--- real connection Bridge -> | +----------+ 99021d409fSDag-Erling Smørgrav... "virtual connection" [ X ]--------| somehost | 100021d409fSDag-Erling Smørgrav[X] switch +----------+ 101021d409fSDag-Erling Smørgrav 192.168.1.25 102021d409fSDag-Erling Smørgrav 103021d409fSDag-Erling Smørgrav(5) Client: Connect to the server and establish the tunnel 104021d409fSDag-Erling Smørgrav 105021d409fSDag-Erling SmørgravFinally connect to the OpenSSH server to establish the tunnel by using 106021d409fSDag-Erling Smørgravthe following command: 107021d409fSDag-Erling Smørgrav 108021d409fSDag-Erling Smørgrav ssh sshgateway 109021d409fSDag-Erling Smørgrav 110021d409fSDag-Erling SmørgravIt is also possible to tell the client to fork into the background after 111021d409fSDag-Erling Smørgravthe connection has been successfully established: 112021d409fSDag-Erling Smørgrav 113021d409fSDag-Erling Smørgrav ssh -f sshgateway true 114021d409fSDag-Erling Smørgrav 115021d409fSDag-Erling SmørgravWithout the ssh configuration done in step (4), it is also possible 116021d409fSDag-Erling Smørgravto use the following command lines: 117021d409fSDag-Erling Smørgrav 118021d409fSDag-Erling Smørgrav ssh -fw 0:1 sshgateway true 119021d409fSDag-Erling Smørgrav ifconfig tun0 192.168.5.1 192.168.5.2 netmask 255.255.255.252 120021d409fSDag-Erling Smørgrav 121021d409fSDag-Erling SmørgravUsing OpenSSH tunnel forwarding is a simple way to establish secure 122021d409fSDag-Erling Smørgravand ad hoc virtual private networks. Possible fields of application 123021d409fSDag-Erling Smørgravcould be wireless networks or administrative VPN tunnels. 124021d409fSDag-Erling Smørgrav 125021d409fSDag-Erling SmørgravNevertheless, ssh tunneling requires some packet header overhead and 126021d409fSDag-Erling Smørgravruns on top of TCP. It is still suggested to use the IP Security 127021d409fSDag-Erling SmørgravProtocol (IPSec) for robust and permanent VPN connections and to 128021d409fSDag-Erling Smørgravinterconnect corporate networks. 129021d409fSDag-Erling Smørgrav 130021d409fSDag-Erling Smørgrav Reyk Floeter 131021d409fSDag-Erling Smørgrav 132761efaa7SDag-Erling Smørgrav$OpenBSD: README.tun,v 1.4 2006/03/28 00:12:31 deraadt Exp $ 133