Friday, November 11, 2011

Tunneling everything with SSH... or how to make VPNs...

In cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 previous three posts I described how to use OpenSSH to tunnel traffic for different applications. What all those three techniques had in common was that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y tunneled only TCP traffic and that every time cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 connection was initiated from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 local machine, i.e. in a way it was not possible for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 machine on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r side to transfer data to us (actually, it is possible to circumwent some of those restrictions, but more about those techniques in some ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r post!). Furcá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rmore, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 implicit assumption was that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is only one TCP connection from your host to remote host. In case cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are multiple connections opened on different ports, you'll need to run ssh as many times as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are those connections.

In this post I'm going to describe how to tunnel all traffic, regardless of it's type, from one machine to some ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r. In a way, I'll show how to create VPN networks using SSH. Actually, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are three ways to do that:
  • Tunneling using ppp protocol on top of SSH
  • Tunneling using tun devices natively supported by newer versions of ssh on, at least, Linux.
  • Tunneling using Ecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rnet-like tap devices, also supported on a Linux OS.
In all of those cases you'll need to have administrative privileges in order to implement cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m. In cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 end, whichever path you decide to take (i.e. ppp or tun/tap) you'll end up configuring network parameters and firewall. So, I'm going to break down cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 description into more posts. The first post I'll deal with link layer setup (ppp/tun/tap) and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following posts I'll describe network layer configuration for different scenarios.

Link-layer setup

The basic goal of this step is to provide network device on which network layer will work.

Using ppp program and protocol

For this method cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is a very good small howto document. Here I'll only repeat some relevant bits in case you don't want to read cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 whole document. First, you have to configure passwordless aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ntication to a remote host. This is easy to do and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are a plenty of references on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Internet. Later, maybe I write one, too. :) Anyway, in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following text I'll assume that you are using root account on both machines, i.e. you are root on a local machine and you are connecting to a remote machine under cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 username root. Beware that this is very bad security practice, but for a quick test or in a lab environment it'll do.

Ok, after you configured passwordless login for a root user, run cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following command (note: this is a single line up to and including IP addresses) but it is broken into more lines because of a formatting in a browser!):
# pppd updetach noauth passive pty 'ssh REMOTE_HOST -o Batchmode=yes /usr/sbin/pppd nodetach notty noauth' 10.0.0.1:10.0.0.2
Using interface ppp0
Connect: ppp0 <--> /dev/pts/12
Deflate (15) compression enabled
local  IP address 10.0.0.1
remote IP address 10.0.0.2
#
As you can see, you got some information about interface and your prompt is immediately back. You need to have ppp package installed on both machines, if it is not cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re will be an error message, something like command not found, and no connection will be established. Anyway, in this case everything was successful and we are notified that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 remote side has address 10.0.0.2 and local side has address 10.0.0.1. To verify that everything works, try to ping remote side:
# ping -c 3 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_req=1 ttl=64 time=19.3 ms
64 bytes from 10.0.0.2: icmp_req=2 ttl=64 time=17.5 ms
64 bytes from 10.0.0.2: icmp_req=3 ttl=64 time=18.7 ms

--- 10.0.0.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 17.503/18.534/19.380/0.777 ms
If you see cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 output like cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 one above, that means that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 link is working and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 next thing to do is to setup network layer parameters (apart from IP addresses).

So, what happened? SSH created a communication channel between cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 two machines. This channel is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n used by pppd processes on both ends to create ppp interfaces (one per each side). Then, this interface is used to transfer IP packets via protocol PPP. What we are (mis)using here is that pppd requires direct link between two points and through this link it cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n sends IP packets. Direct link is some sort of a serial interface, for example direct cable, UMTS/EDGE or similar connection, etc. The exact means by which two endpoints communicate is unimportant from pppd's perspective, what only matters is that whatever is sent on one end is received by ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r, and vice versa. So, because of this we could place SSH between two pppd processes.

The way cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 things are exectuted is as follows:
  1. Local pppd starts (cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first pppd in a line), without aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ntication phase (option noauth), in a passive mode (option passive) meaning it is waiting for someone to connect. It also allocates one master/slave pty (option pty) pair in which he controls master side, while slave side is connected to ssh proces (argument to pty option). There are also two ip addresses at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 end of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 command line that are actually arguments to this instance of PPP. They instruct local ppp process to assign to itself address 10.0.0.1 and to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 remote end 10.0.0.2 address.
  2. ssh process connects to REMOTE_HOST in batch mode (option -o BatchMode=yes). Basically batch mode tells ssh not to use password/passphrase because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is no user to enter necessary parameters. The rest of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 command until closing single quote is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 command that ssh has to execute after successfully connecting to remote host.
  3. ssh that connected to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 remote machine runs cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re second pppd process. The options instruct that pppd process to use stdin/stdout instead of a termina (option notty), to not detach from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 controlling terminal (option nodetach), and to not require aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ntication (option noauth).
And that's it. Quite simple as you can see. But as I said, it is not good security practice to allow root login from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 network! Locally, you can run this command directly from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 root account! So, for some production deployment you'll need to three two additional things:
  1. Create separate account that will be used to connect to a remote machine.
  2. Configure sudo so that it allows that new account to run pppd binary without entering cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 password.
  3. Modify invocation of ssh command so that remote user is specified and pppd program is executed via sudo command.
Using tun with Ecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rnet like functionality

For this mode you need to have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following directive in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server configuration (/etc/ssh/sshd_config):
Tunnel any
After cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 change don't forget to reload ssh configuration. What this configuration option tells ssh deamon is to allow tunneling using tun and tap devices. In ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r words, we can make our tunnel looks like ecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rnet interface, or like point-to-point interface on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 3rd (network) layer. Option any allows both. In case you want to restrict to a certain kind use eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r ecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rnet or point-to-point, depending on which one you need.

In this case we want Ecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rnet-like functionality, so assuming that you provided eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r any or ecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rnet parameter to Tunnel option, as a root user run ssh client as follows:
ssh -f -N -w any -o Tunnel=ecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rnet root@remotehost
change remotehost part with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 host name (or IP address) you are connecting to. It is necessary to specify Tunnel option in ssh command because default value is point-to-point. The -w option requests from ssh to do tunneling using tap or tun device (depending on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 value of Tunnel option) and in our case it is tap. After successfully logging to a remote machine, check interfaces with ip command (of ifconfig). You should see on both hosts that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is tap0 interface. If you already had tap interfaces, than cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 new ones will probably have highest number. Options -f and -N cause ssh to go into background after performing aucá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ntication, since command line is not necessary for tunneling.

To stop tap device, send a SIGTERM signal to ssh (using kill command, of course).

Using tun with only network layer functionality

As with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rnet like functionality, you have to enable this mode in sshd configuration file, and also, you need to do this as a root on both sides of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 connection.

The procedure to create point-to-point tunnels is similar to creating cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Ecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rnet ones, only cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 argument is point-to-point instead of ecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rnet. Since point-to-point type is default, you don't have to specify Tunnel option, i.e.
ssh -f -N -w any root@remotehost
After logging into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 remote host, ssh will go into background and you'll see new tun device created.

4 comments:

song said...

Hi
I create an ssh command in ubuntu to make tap interface , but it away make tun interface . Can you give me some advice , here is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 command :

ssh -o Tunnel=ecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rnet -w 1:1 ServerIP

Unknown said...

Is it possible to send UDP broadcast through this tunnel?

Stjepan Groš (sgros) said...

@song: How do you know that you've got a tun type interface? Based on what? Note that if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 interface is called tun it doesn't have to mean it has a type tun. Also, check server configuration, maybe it is prohibiting a client to create tap interface.

@Unguran: I don't know, even though I suspect that it doesn't allow. Basically, it boils down to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 question if Ecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rnet broadcasts are forwarded, and I think not because of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ARP. Anyway, have you tried it? You can also try to ping broadcast network address, that is essentially cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same situation (-b option to ping). Currently, I don't have a setup to try this.

Tom said...

Note that in recent versions of SSH, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 line:

Tunnel any

is spelled like this:

PermitTunnel yes

About Me

scientist, consultant, security specialist, networking guy, system administrator, philosopher ;)

Blog Archive