source: etherws/trunk/README.rst @ 156

Revision 156, 4.0 KB checked in by atzm, 12 years ago (diff)
  • server cert verification support
  • Property svn:keywords set to Id
RevLine 
[141]1Introduction
2============
3etherws is an implementation of Ethernet over WebSocket tunnel
4based on Linux Universal TUN/TAP device driver.
5
[152]6How to Use
7==========
8For example, if you want to make virtual ethernet link for *VM1* and *VM2*
9whose hypervisor's broadcast domains were split by router *R*::
[141]10
11  +------------------+            +------------------+
12  | Hypervisor1      |            |      Hypervisor2 |
13  |  +-----+         |            |         +-----+  |
14  |  | VM1 |         |            |         | VM2 |  |
15  |  +--+--+         |            |         +--+--+  |
16  |     | (vnet0)    |            |    (vnet0) |     |
17  |  +--+--+         |            |         +--+--+  |
18  |  | br0 |         |            |         | br0 |  |
19  |  +--+--+         |            |         +--+--+  |
20  |     |            |            |            |     |
21  | (ethws0)  (eth0) |            | (eth0)  (ethws0) |
22  +----||--------+---+            +----+-------||----+
23       ||        |        +---+        |       ||
24       ||   -----+--------| R |--------+-----  ||
25       ||                 +---+                ||
26       ||                                      ||
27       ``======================================''
28            (Ethernet over WebSocket tunnel)
29
[152]30then you can use following commands.
[141]31
[152]32on *Hypervisor1*::
[141]33
34  # etherws server
35  # brctl addbr br0
36  # brctl addif br0 vnet0
37  # brctl addif br0 ethws0
38  # ifconfig br0 up
39
[152]40on *Hypervisor2*::
[141]41
42  # etherws client --uri ws://<Hypervisor1's IP address>/
43  # brctl addbr br0
44  # brctl addif br0 vnet0
45  # brctl addif br0 ethws0
46  # ifconfig br0 up
47
[152]48If connection through the tunnel is unstable, then you may fix it
49by changing VM's MTU to under 1500, e.g.::
[146]50
[152]51  # ifconfig eth0 mtu 1400
[144]52
[156]53Using SSL/TLS
54=============
55etherws supports SSL/TLS connection.
[152]56If you want to encrypt the tunnel, then you can use following options.
[144]57
[156]58on *Hypervisor1*::
[152]59
[144]60  # etherws server --keyfile ssl.key --certfile ssl.crt
61
[156]62*ssl.key* is a server private key, and *ssl.crt* is a server certificate.
[144]63
[156]64Now you also can test SSL/TLS connection by following command::
[144]65
[152]66  # openssl s_client -connect <Hypervisor1's IP address>:443
67
[156]68on *Hypervisor2*::
69
70  # etherws client --uri wss://<Hypervisor1's IP address>/ --cacerts ssl.crt
71
72Here, URI scheme was just changed to *wss*, and CA certificate to verify
73server certificate was specified.
74
75By the way, client verifies server certificate by default.
76So, for example, client will die with error messages if your server uses
77self-signed certificate and client uses another CA certificate.
78
79If you want to just encrypt the tunnel and do not need to verify
80certificate, then you can use following option::
81
82  # etherws client --uri wss://<Hypervisor1's IP address>/ --insecure
83
84Note: see `<http://docs.python.org/library/ssl.html#certificates>`_
85for more information about certificates.
86
[152]87Client Authentication
88=====================
89etherws supports HTTP Basic Authentication.
90It means you can use etherws as simple L2-VPN server/client.
91
92On server side, etherws requires user information in Apache htpasswd
93format (and currently supports SHA-1 digest only). To create this file::
94
95  # htpasswd -s -c filename username
96
97If you do not have htpasswd command, then you can use python one-liner::
98
99  # python -c 'import hashlib; print("username:{SHA}" + hashlib.sha1("password").digest().encode("base64"))'
100
101To run server with this::
102
103  # etherws server --htpasswd filename
104
105You also can test by following command::
106
107  # telnet <address> 80
108  GET / HTTP/1.1
109
110It will return *401 Authorization Required*.
111
112On client side, etherws requires username as option, and password from
113stdin::
114
115  # etherws client --uri ws://<address>/ --user username
116  Password:
117
118If authentication did not succeed, then it will die with some error messages.
119
120Note that you should not use HTTP Basic Authentication without SSL/TLS
121support, because it is insecure in itself.
122
[141]123History
124=======
[152]1250.3 (2012-05-17 JST)
126  - client authentication support
127
[144]1280.2 (2012-05-16 JST)
129  - SSL/TLS connection support
130
1310.1 (2012-05-15 JST)
[141]132  - First release
Note: See TracBrowser for help on using the repository browser.