{"_id":"mdm-tunnel","_rev":"37-f49f491f48a15c0bfdb22373ba298867","name":"mdm-tunnel","description":"Access network services behind a NAT","dist-tags":{"latest":"0.1.2"},"versions":{"0.0.0":{"name":"mdm-tunnel","version":"0.0.0","description":"ERROR: No README.md file found!","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":"","author":"","license":"BSD","dependencies":{"through":"~2.3.4","mux-demux":"~3.6.3","stream-combiner":"0.0.2","msgpack-stream":"0.0.3","httppp":"~0.1.2","debug":"~0.7.2","reconnect":"~1.2.1"},"bin":{"mdm-client":"./bin/client","mdm-server":"./bin/server"},"devDependencies":{"ecstatic":"~0.4.2","shoe":"0.0.10"},"readme":"# MuxDemux Tunnel\n\n## Expose network services behind a NAT via a public interface\n\n----\n","readmeFilename":"Readme.md","_id":"mdm-tunnel@0.0.0","dist":{"shasum":"545832d7b133cd555222edd586dfa184e85b9613","tarball":"https://registry.npmjs.org/mdm-tunnel/-/mdm-tunnel-0.0.0.tgz","integrity":"sha512-L7UZ3pqN7OVxK9lOk2Ap6f5KQg/FbcWWjiuQtGZ8DbWYaajVNWR4AUhuZpuchJEYLXDcecMRjDT5rTNRgOaJHw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAlJvFqR0J6tyCSUkaLCvRuaW2QFtoAZ85k/sBRovM9GAiEAqVRctyU51uxRJ6QV6QK5LiFhg1C20f7qVLC+glkjNzo="}]},"_from":".","_npmVersion":"1.2.18","_npmUser":{"name":"timoxley","email":"secoif@gmail.com"},"maintainers":[{"name":"timoxley","email":"secoif@gmail.com"}],"directories":{}},"0.0.1":{"name":"mdm-tunnel","version":"0.0.1","description":"ERROR: No README.md file found!","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":"","author":"","license":"BSD","dependencies":{"through":"~2.3.4","mux-demux":"~3.6.3","stream-combiner":"0.0.2","msgpack-stream":"0.0.3","httppp":"~0.1.2","debug":"~0.7.2","reconnect":"~1.2.1","commander":"~1.1.1"},"bin":{"mdm-client":"./bin/client","mdm-server":"./bin/server"},"devDependencies":{"ecstatic":"~0.4.2","shoe":"0.0.10"},"readme":"# MuxDemux Tunnel\n\n## Expose network services behind a NAT via a public interface\n\n----\n\n## Example Configuration\n\nExpose services running on local port 9000/9001 on domains\nhello-world.username.example.com & websockets.username.example.com.\n\nservices.config.json:\n\n```json\n{\n  \"hello-world\": 9000,\n  \"websockets\": 9001\n}\n```\n\n## Client Usage\n\n```\n  Usage: client [options]\n\n  Options:\n\n    -h, --help           output usage information\n    -V, --version        output the version number\n    -c, --config [file]  Config file to load [file]\n    -u, --user [user]    username to log in to server with\n    -p, --port [port]    port on host server\n    -h, --host [host]    address of host server\n    -v, --verbose        verbose output\n```\n\n## Server Usage\n```\n\n  Usage: server [options]\n\n  Options:\n\n    -h, --help                  output usage information\n    -V, --version               output the version number\n    -p, --port [port]           Port to listen for external connections on [port]\n    -c, --client-port [client]  Port to listen for client connections on [client]\n    -v, --verbose               verbose output\n\n```\n\n\n### Getting started\n\nOpen these in separate terminals or background:\n\n```sh\n# Boot the server\nmdm-server -v\n\n# Boot the client\nmdm-client -u tim -v\n\n# Boot some service\nnode examples/simple/server.js\n\n# Connect with browser\nopen http://hello-world.tim.localhost.dev:8000\n```\n\n### Websocket Example\n\n# Boot up the service\nnode examples/websockets/server.js\n\n# Connect with browser\nopen http://websockets.tim.localhost.dev:8000\n\n```\n\n\n#### A note on subdomains on OSX\n\nA good solution for managing local subdomains on OSX is [dnsmasq](http://www.thekelleys.org.uk/dnsmasq/doc.html). [These\ninstructions](http://www.echoditto.com/blog/never-touch-your-local-etchosts-file-os-x-again)\nseem to work fine.\n","readmeFilename":"Readme.md","_id":"mdm-tunnel@0.0.1","dist":{"shasum":"e4095c787ce9b910b46cee9906f5293a93558714","tarball":"https://registry.npmjs.org/mdm-tunnel/-/mdm-tunnel-0.0.1.tgz","integrity":"sha512-4D2I4+4lL1OOPGmRWJIKjeO9sHk26SgLkif8XlxE7EBANAGNJuf+3w5Zs4rha8jxEtYbpUVVz6zsyqytfLFKCw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBGD6rmXaWdho2z5UQb1feRLW/ZAQ2gE+Q/POgyWPyd+AiBL3lgF5s2aKzK5wD8XKzY8hxvNOm23PW8V1mWPMyyvoA=="}]},"_from":".","_npmVersion":"1.2.18","_npmUser":{"name":"timoxley","email":"secoif@gmail.com"},"maintainers":[{"name":"timoxley","email":"secoif@gmail.com"}],"directories":{}},"0.0.2":{"name":"mdm-tunnel","version":"0.0.2","description":"Access network services behind a NAT","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":"","author":"","license":"BSD","dependencies":{"through":"~2.3.4","mux-demux":"~3.6.3","stream-combiner":"0.0.2","msgpack-stream":"0.0.3","httppp":"~0.1.2","debug":"~0.7.2","reconnect":"~1.2.1","commander":"~1.1.1"},"bin":{"mdm-client":"./bin/client","mdm-server":"./bin/server"},"devDependencies":{"ecstatic":"~0.4.2","shoe":"0.0.10"},"readme":"# MuxDemux Tunnel\n\n## Expose network services behind a NAT via a public interface\n\n----\n\n## Example Configuration\n\nExpose services running on local port 9000/9001 on domains\nhello-world.username.example.com & websockets.username.example.com.\n\nservices.config.json:\n\n```json\n{\n  \"hello-world\": 9000,\n  \"websockets\": 9001\n}\n```\n\n## Client Usage\n\n```\n  Usage: client [options]\n\n  Options:\n\n    -h, --help           output usage information\n    -V, --version        output the version number\n    -c, --config [file]  Config file to load [file]\n    -u, --user [user]    username to log in to server with\n    -p, --port [port]    port on host server\n    -h, --host [host]    address of host server\n    -v, --verbose        verbose output\n```\n\n## Server Usage\n```\n\n  Usage: server [options]\n\n  Options:\n\n    -h, --help                  output usage information\n    -V, --version               output the version number\n    -p, --port [port]           Port to listen for external connections on [port]\n    -c, --client-port [client]  Port to listen for client connections on [client]\n    -v, --verbose               verbose output\n\n```\n\n\n### Getting started\n\nOpen these in separate terminals or background:\n\n```sh\n# Boot the server\nmdm-server -v\n\n# Boot the client\nmdm-client -u tim -v\n\n# Boot some service\nnode examples/simple/server.js\n\n# Connect with browser\nopen http://hello-world.tim.localhost.dev:8000\n```\n\n### Websocket Example\n\n# Boot up the service\nnode examples/websockets/server.js\n\n# Connect with browser\nopen http://websockets.tim.localhost.dev:8000\n\n```\n\n\n#### A note on subdomains on OSX\n\nA good solution for managing local subdomains on OSX is [dnsmasq](http://www.thekelleys.org.uk/dnsmasq/doc.html). [These\ninstructions](http://www.echoditto.com/blog/never-touch-your-local-etchosts-file-os-x-again)\nseem to work fine.\n","readmeFilename":"Readme.md","_id":"mdm-tunnel@0.0.2","dist":{"shasum":"407e89fe07b7730d4643bef447dc1879951909b0","tarball":"https://registry.npmjs.org/mdm-tunnel/-/mdm-tunnel-0.0.2.tgz","integrity":"sha512-0PCBUaQwO2IFtCJEf3FO6SxoDkRnXp2gVVFA4a3U+CAp6dhhCPJnDAwIUaz4m9dr9NvuVKkWhTsnCVhR1NcKCA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHHMhlfSr3kpzXp1VLeNxjuy03synhGL/b2m2+Q1PTMHAiEAsQRlRCpjr5dwyDfkYL+yOudwqJAlHg8XuCN/8No+8A8="}]},"_from":".","_npmVersion":"1.2.18","_npmUser":{"name":"timoxley","email":"secoif@gmail.com"},"maintainers":[{"name":"timoxley","email":"secoif@gmail.com"}],"directories":{}},"0.0.3":{"name":"mdm-tunnel","version":"0.0.3","description":"Access network services behind a NAT","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":"","author":"","license":"BSD","dependencies":{"through":"~2.3.4","mux-demux":"~3.6.3","stream-combiner":"0.0.2","msgpack-stream":"0.0.3","httppp":"~0.1.2","debug":"~0.7.2","reconnect":"~1.2.1","commander":"~1.1.1"},"bin":{"mdm-tunnel-client":"./bin/client","mdm-tunnel-server":"./bin/server"},"devDependencies":{"ecstatic":"~0.4.2","shoe":"0.0.10"},"readme":"# MuxDemux Tunnel\n\n## Expose network services behind a NAT via a public interface\n\n----\n\n## Example Configuration\n\nExpose services running on local port 9000/9001 on domains\nhello-world.username.example.com & websockets.username.example.com.\n\nservices.config.json:\n\n```json\n{\n  \"hello-world\": 9000,\n  \"websockets\": 9001\n}\n```\n\n## Client Usage\n\n```\n  Usage: mdm-tunnel-client [options]\n\n  Options:\n\n    -h, --help           output usage information\n    -V, --version        output the version number\n    -c, --config [file]  Config file to load [file]\n    -u, --user [user]    username to log in to server with\n    -p, --port [port]    port on host server\n    -h, --host [host]    address of host server\n    -v, --verbose        verbose output\n```\n\n## Server Usage\n```\n\n  Usage: mdm-tunnel-server [options]\n\n  Options:\n\n    -h, --help                  output usage information\n    -V, --version               output the version number\n    -p, --port [port]           Port to listen for external connections on [port]\n    -c, --client-port [client]  Port to listen for client connections on [client]\n    -v, --verbose               verbose output\n\n```\n\nWithout -v, these apps are totally silent.\n\n### Getting Started\n\n#### Boot your local service\n\ne.g.\n\n#### Create a $HOME/.tunnel-services.json file:\n\n\n{\n  \"hello-world\": 8000\n}\n\nOpen these in separate terminals or background them:\n\n```sh\n# Boot the server\nmdm-tunnel-server -v\n\n# Boot the client on your machine\nmdm-tunnel-client -u tim -v\n\n# Boot some service\nnode examples/simple/server.js\n\n# Connect with browser\nopen http://hello-world.tim.localhost.dev:8000\n```\n\n### Websocket Example\n\n# Boot up the service\nnode examples/websockets/server.js\n\n# Connect with browser\nopen http://websockets.tim.localhost.dev:8000\n\n```\n\n\n#### A note on subdomains on OSX\n\nA good solution for managing local subdomains on OSX is [dnsmasq](http://www.thekelleys.org.uk/dnsmasq/doc.html). [These\ninstructions](http://www.echoditto.com/blog/never-touch-your-local-etchosts-file-os-x-again)\nseem to work fine.\n","readmeFilename":"Readme.md","_id":"mdm-tunnel@0.0.3","dist":{"shasum":"04065f00be44784322e301a852bb35a5c344b271","tarball":"https://registry.npmjs.org/mdm-tunnel/-/mdm-tunnel-0.0.3.tgz","integrity":"sha512-IJHsCWGlwA7BkUlv17E4tXT97tJxl3/Cm36SyOe6nGe8D6IbjvFc7mbUq5hzK0puKNbj5u+/Hff/kie53MUG2A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDGjNs2qNB/Nae5Moz6dlz2By7OrwXhu2j0r8rNmn8Z/wIgJh/RVL6axSJOQZ6lbO8UjwVqoa6OSmq7n+sH0IZKN7A="}]},"_from":".","_npmVersion":"1.2.18","_npmUser":{"name":"timoxley","email":"secoif@gmail.com"},"maintainers":[{"name":"timoxley","email":"secoif@gmail.com"}],"directories":{}},"0.0.4":{"name":"mdm-tunnel","version":"0.0.4","description":"Access network services behind a NAT","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":"","author":"","license":"BSD","dependencies":{"through":"~2.3.4","mux-demux":"~3.6.3","stream-combiner":"0.0.2","msgpack-stream":"0.0.3","httppp":"~0.2.1","debug":"~0.7.2","reconnect":"~1.2.1","commander":"~1.1.1"},"bin":{"mdm-tunnel-client":"./bin/client","mdm-tunnel-server":"./bin/server"},"devDependencies":{"ecstatic":"~0.4.2","shoe":"0.0.10"},"readme":"# MuxDemux Tunnel\n\n## Expose network services behind a NAT via a public interface\n\n----\n\n## Example Configuration\n\nExpose services running on local port 9000/9001 on domains\nhello-world.username.example.com & websockets.username.example.com.\n\nservices.config.json:\n\n```json\n{\n  \"hello-world\": 9000,\n  \"websockets\": 9001\n}\n```\n\n## Client Usage\n\n```\n  Usage: mdm-tunnel-client [options]\n\n  Options:\n\n    -h, --help           output usage information\n    -V, --version        output the version number\n    -c, --config [file]  Config file to load [file]\n    -u, --user [user]    username to log in to server with\n    -p, --port [port]    port on host server\n    -h, --host [host]    address of host server\n    -v, --verbose        verbose output\n```\n\n## Server Usage\n```\n\n  Usage: mdm-tunnel-server [options]\n\n  Options:\n\n    -h, --help                  output usage information\n    -V, --version               output the version number\n    -p, --port [port]           Port to listen for external connections on [port]\n    -c, --client-port [client]  Port to listen for client connections on [client]\n    -v, --verbose               verbose output\n\n```\n\nWithout -v, these apps are totally silent.\n\n### Getting Started\n\n#### Boot your local service\n\ne.g.\n\n#### Create a $HOME/.tunnel-services.json file:\n\n\n{\n  \"hello-world\": 8000\n}\n\nOpen these in separate terminals or background them:\n\n```sh\n# Boot the server\nmdm-tunnel-server -v\n\n# Boot the client on your machine\nmdm-tunnel-client -u tim -v\n\n# Boot some service\nnode examples/simple/server.js\n\n# Connect with browser\nopen http://hello-world.tim.localhost.dev:8000\n```\n\n### Websocket Example\n\n# Boot up the service\nnode examples/websockets/server.js\n\n# Connect with browser\nopen http://websockets.tim.localhost.dev:8000\n\n```\n\n\n#### A note on subdomains on OSX\n\nA good solution for managing local subdomains on OSX is [dnsmasq](http://www.thekelleys.org.uk/dnsmasq/doc.html). [These\ninstructions](http://www.echoditto.com/blog/never-touch-your-local-etchosts-file-os-x-again)\nseem to work fine.\n","readmeFilename":"Readme.md","_id":"mdm-tunnel@0.0.4","dist":{"shasum":"f3d5fb7edc4247880df64077cdc1f07fec5da1c8","tarball":"https://registry.npmjs.org/mdm-tunnel/-/mdm-tunnel-0.0.4.tgz","integrity":"sha512-X9U0NeBiTPFNWagutDtvlkZ3cLIV7Q7UFQxQo/YsymshY8KUrCidY3lWxumq2Uy/9xkziWGBpKOB3EVMDEVfeQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE8aP0I4e5oyaa+lp7YL+nh6hOBNP7IPMkwXc6ZPiuyxAiAcXpWlaF8i5sIken4kwdKfsyM6W+cZX6MewUpoaeyMGw=="}]},"_from":".","_npmVersion":"1.2.18","_npmUser":{"name":"timoxley","email":"secoif@gmail.com"},"maintainers":[{"name":"timoxley","email":"secoif@gmail.com"}],"directories":{}},"0.0.5":{"name":"mdm-tunnel","version":"0.0.5","description":"Access network services behind a NAT","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1","start":"node server.js"},"repository":"","author":"","license":"BSD","dependencies":{"through":"~2.3.4","mux-demux":"~3.6.3","stream-combiner":"0.0.2","msgpack-stream":"0.0.3","httppp":"~0.2.1","debug":"~0.7.2","reconnect":"~1.2.1","commander":"~1.1.1","response-stream":"0.0.0"},"bin":{"mdm-tunnel-client":"./bin/client","mdm-tunnel-server":"./bin/server"},"devDependencies":{"ecstatic":"~0.4.2","shoe":"0.0.10","supertest":"~0.6.0"},"readme":"# MuxDemux Tunnel\n\n## Expose network services behind a NAT via a public interface\n\n----\n\n## Example Configuration\n\nExpose services running on local port 9000/9001 on domains\nhello-world.username.example.com & websockets.username.example.com.\n\n$HOME/.tunnel-services.json:\n\n```json\n{\n  \"hello-world\": 9000,\n  \"websockets\": 9001\n}\n```\n\n## Client Usage\n\n```\nUsage: mdm-tunnel-client [options]\n\nOptions:\n\n  -h, --help           output usage information\n  -V, --version        output the version number\n  -c, --config [file]  Config file to load [file]\n  -u, --user [user]    username to log in to server with\n  -p, --port [port]    port on host server\n  -h, --host [host]    address of host server\n  -v, --verbose        verbose output\n```\n\n## Server Usage\n```\nUsage: mdm-tunnel-server [options]\n\nOptions:\n\n  -h, --help                  output usage information\n  -V, --version               output the version number\n  -p, --port [port]           Port to listen for external connections on [port]\n  -c, --client-port [client]  Port to listen for client connections on [client]\n  -v, --verbose               verbose output\n```\n\nWithout -v, mdm-tunnel runs totally silent.\n\n### Examples\n\n\n#### Create a .tunnel-services.json file.\n\nBy default the client searches for `.tunnel-services.json` in your\n`$HOME` directory. Keys are service names (can be anything), values are\nlocal port numbers for those services.\n\n```json\n{\n  \"hello-world\": 9000,\n  \"websockets\": 9001\n}\n````\n#### Boot the mdm-tunnel server and client\n\nOpen these in separate terminals or background them.\n\nNote: You'll need to set up wildcard subdomains to test the server on your local\nmachine. On OSX, I recommend\n[dnsmasq](www.echoditto.com/blog/never-touch-your-local-etchosts-file-os-x-again).\n\n```sh\n# Boot the server\nmdm-tunnel-server -v\n\n# Boot the client on your machine\nmdm-tunnel-client -u tim -v\n\n# Boot some service\nnode examples/simple/server.js\n\n# Connect with browser\nopen http://hello-world.tim.localhost.dev:8000\n```\n\n#### Websocket Example\n\n```sh\n# Boot up the service\nnode examples/websockets/server.js\n\n# Connect with browser\nopen http://websockets.tim.localhost.dev:8000\n\n```\nTo change the available services, edit your\n`$HOME/.tunnel-services.json`.\n","readmeFilename":"Readme.md","_id":"mdm-tunnel@0.0.5","dist":{"shasum":"65c62bd8598eccb0299dfef484c3db8d7350d3e0","tarball":"https://registry.npmjs.org/mdm-tunnel/-/mdm-tunnel-0.0.5.tgz","integrity":"sha512-6TN5SKRiKvpnfV+2akCq0Gz7PzCtMNRuVLYhX0EBz/Z3LqUSyju/oezfWUdaTcqwIFEsTbwYx+bZMXqU0ZKjJg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDmwotSNoKPS76YbLmU3vGpODAPEunloDYUruZEujTkoAIgWSlBofYVwSu/RjUavcWDX29fU/x1UKGGvF8poJMr7FM="}]},"_from":".","_npmVersion":"1.2.18","_npmUser":{"name":"timoxley","email":"secoif@gmail.com"},"maintainers":[{"name":"timoxley","email":"secoif@gmail.com"}],"directories":{}},"0.0.6":{"name":"mdm-tunnel","version":"0.0.6","description":"Access network services behind a NAT","main":"index.js","scripts":{"test":"mocha test","start":"node server.js"},"repository":{"type":"git","url":"git://github.com/timoxley/mdm-tunnel.git"},"author":{"name":"Tim Oxley"},"license":"MIT","dependencies":{"through":"~2.3.4","mux-demux":"~3.6.3","stream-combiner":"0.0.2","msgpack-stream":"0.0.3","httppp":"~0.2.1","debug":"~0.7.2","reconnect":"~1.2.1","commander":"~1.1.1","response-stream":"0.0.0"},"bin":{"mdm-tunnel-client":"./bin/client","mdm-tunnel-server":"./bin/server"},"devDependencies":{"ecstatic":"~0.4.2","shoe":"0.0.10","supertest":"~0.6.0","mocha":"~1.10.0"},"readmeFilename":"Readme.md","gitHead":"924c9876abb3d8ea3d69b86d69865e0613865ae5","directories":{"example":"example","test":"test"},"keywords":["tcp","tunnel","streams","nat","traversal"],"contributors":[{"name":"Nexxy","email":"emily@contactvibe.com","url":"https://github.com/nexxy"}],"readme":"# MuxDemux Tunnel\n\n## Expose network services behind a NAT via a public interface\n\n----\n\n## Example Configuration\n\nExpose services running on local port 9000/9001 on domains\nhello-world.username.example.com & websockets.username.example.com.\n\n$HOME/.tunnel-services.json:\n\n```json\n{\n  \"hello-world\": 9000,\n  \"websockets\": 9001\n}\n```\n\n## Client Usage\n\n```\nUsage: mdm-tunnel-client [options]\n\nOptions:\n\n  -h, --help           output usage information\n  -V, --version        output the version number\n  -c, --config [file]  Config file to load [file]\n  -u, --user [user]    username to log in to server with\n  -p, --port [port]    port on host server\n  -h, --host [host]    address of host server\n  -v, --verbose        verbose output\n```\n\n## Server Usage\n```\nUsage: mdm-tunnel-server [options]\n\nOptions:\n\n  -h, --help                  output usage information\n  -V, --version               output the version number\n  -p, --port [port]           Port to listen for external connections on [port]\n  -c, --client-port [client]  Port to listen for client connections on [client]\n  -v, --verbose               verbose output\n```\n\nWithout -v, mdm-tunnel runs totally silent.\n\n### Examples\n\n\n#### Create a .tunnel-services.json file.\n\nBy default the client searches for `.tunnel-services.json` in your\n`$HOME` directory. Keys are service names (can be anything), values are\nlocal port numbers for those services.\n\n```json\n{\n  \"hello-world\": 9000,\n  \"websockets\": 9001\n}\n````\n#### Boot the mdm-tunnel server and client\n\nOpen these in separate terminals or background them.\n\nNote: You'll need to set up wildcard subdomains to test the server on your local\nmachine. On OSX, I recommend\n[dnsmasq](www.echoditto.com/blog/never-touch-your-local-etchosts-file-os-x-again).\n\n```sh\n# Boot the server\nmdm-tunnel-server -v\n\n# Boot the client on your machine\nmdm-tunnel-client -u tim -v\n\n# Boot some service\nnode examples/simple/server.js\n\n# Connect with browser\nopen http://hello-world.tim.localhost.dev:8000\n```\n\n#### Websocket Example\n\n```sh\n# Boot up the service\nnode examples/websockets/server.js\n\n# Connect with browser\nopen http://websockets.tim.localhost.dev:8000\n\n```\nTo change the available services, edit your\n`$HOME/.tunnel-services.json`.\n","_id":"mdm-tunnel@0.0.6","dist":{"shasum":"38bc8c48027cbadfa0d9309a4342f1eb20a13c21","tarball":"https://registry.npmjs.org/mdm-tunnel/-/mdm-tunnel-0.0.6.tgz","integrity":"sha512-Klq8e65ULPHK2mui4iWcjL6tFvBbBb4UQT4Mf1VsZ71PTgKc2kYDZQRAl45CYFOaD31nBVh72ftTW4lqVWgx9w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDbNfIibyMfU22MGLDTKB8rLKCtzF1NbsXzBti2J0cL1AIgIj4IX8oAoJyGdo+u6FqZiG2EEXNOoZ7E81VbwRJeVAY="}]},"_from":".","_npmVersion":"1.2.18","_npmUser":{"name":"timoxley","email":"secoif@gmail.com"},"maintainers":[{"name":"timoxley","email":"secoif@gmail.com"}]},"0.0.7":{"name":"mdm-tunnel","version":"0.0.7","description":"Access network services behind a NAT","main":"index.js","scripts":{"test":"mocha test","start":"node server.js"},"repository":{"type":"git","url":"git://github.com/timoxley/mdm-tunnel.git"},"author":{"name":"Tim Oxley"},"license":"MIT","dependencies":{"through":"~2.3.4","mux-demux":"~3.6.3","stream-combiner":"0.0.2","msgpack-stream":"0.0.3","httppp":"~0.2.1","debug":"~0.7.2","reconnect":"~1.2.1","commander":"~1.1.1","response-stream":"0.0.0"},"bin":{"mdm-tunnel-client":"./bin/client","mdm-tunnel-server":"./bin/server"},"devDependencies":{"ecstatic":"~0.4.2","shoe":"0.0.10","supertest":"~0.6.0","mocha":"~1.10.0"},"readmeFilename":"Readme.md","gitHead":"924c9876abb3d8ea3d69b86d69865e0613865ae5","directories":{"example":"example","test":"test"},"keywords":["tcp","tunnel","streams","nat","traversal"],"contributors":[{"name":"Nexxy","email":"emily@contactvibe.com","url":"https://github.com/nexxy"}],"readme":"# MuxDemux Tunnel\n\n## Expose network services behind a NAT via a public interface\n\n----\n\n## Example Configuration\n\nExpose services running on local port 9000/9001 on domains\nhello-world.username.example.com & websockets.username.example.com.\n\n$HOME/.tunnel-services.json:\n\n```json\n{\n  \"hello-world\": 9000,\n  \"websockets\": 9001\n}\n```\n\n## Client Usage\n\n```\nUsage: mdm-tunnel-client [options]\n\nOptions:\n\n  -h, --help           output usage information\n  -V, --version        output the version number\n  -c, --config [file]  Config file to load [file]\n  -u, --user [user]    username to log in to server with\n  -p, --port [port]    port on host server\n  -h, --host [host]    address of host server\n  -v, --verbose        verbose output\n```\n\n## Server Usage\n```\nUsage: mdm-tunnel-server [options]\n\nOptions:\n\n  -h, --help                  output usage information\n  -V, --version               output the version number\n  -p, --port [port]           Port to listen for external connections on [port]\n  -c, --client-port [client]  Port to listen for client connections on [client]\n  -v, --verbose               verbose output\n```\n\nWithout -v, mdm-tunnel runs totally silent.\n\n### Examples\n\n\n#### Create a .tunnel-services.json file.\n\nBy default the client searches for `.tunnel-services.json` in your\n`$HOME` directory. Keys are service names (can be anything), values are\nlocal port numbers for those services.\n\n```json\n{\n  \"hello-world\": 9000,\n  \"websockets\": 9001\n}\n````\n#### Boot the mdm-tunnel server and client\n\nOpen these in separate terminals or background them.\n\nNote: You'll need to set up wildcard subdomains to test the server on your local\nmachine. On OSX, I recommend\n[dnsmasq](www.echoditto.com/blog/never-touch-your-local-etchosts-file-os-x-again).\n\n```sh\n# Boot the server\nmdm-tunnel-server -v\n\n# Boot the client on your machine\nmdm-tunnel-client -u tim -v\n\n# Boot some service\nnode examples/simple/server.js\n\n# Connect with browser\nopen http://hello-world.tim.localhost.dev:8000\n```\n\n#### Websocket Example\n\n```sh\n# Boot up the service\nnode examples/websockets/server.js\n\n# Connect with browser\nopen http://websockets.tim.localhost.dev:8000\n\n```\nTo change the available services, edit your\n`$HOME/.tunnel-services.json`.\n","_id":"mdm-tunnel@0.0.7","dist":{"shasum":"220a87ddcdb0bf5e05e9918dd14900bf145c7808","tarball":"https://registry.npmjs.org/mdm-tunnel/-/mdm-tunnel-0.0.7.tgz","integrity":"sha512-PHLta+O7FjcNggzRQtSE8rVgMWeTOGnVw7QpDjvyBfoGq/pdB05eQ5w1JKz7+UKvFjXPBPP9nlZZivv2FQynKg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDlwMHWyNYsMluYOFeMEMsqw9wNXf3GYDeNIzFF3rk6ywIgLq+AbEEZMfn0r74q/awowjwn6ak6xmrHyC53Q14ANfI="}]},"_from":".","_npmVersion":"1.2.18","_npmUser":{"name":"timoxley","email":"secoif@gmail.com"},"maintainers":[{"name":"timoxley","email":"secoif@gmail.com"}]},"0.1.0":{"name":"mdm-tunnel","version":"0.1.0","description":"Access network services behind a NAT","main":"index.js","scripts":{"test":"mocha test","start":"node server.js"},"repository":{"type":"git","url":"git://github.com/timoxley/mdm-tunnel.git"},"author":{"name":"Tim Oxley"},"license":"MIT","dependencies":{"through":"~2.3.4","mux-demux":"~3.6.3","stream-combiner":"0.0.2","msgpack-stream":"0.0.3","httppp":"~0.2.1","debug":"~0.7.2","reconnect":"~1.2.1","commander":"~1.1.1","response-stream":"0.0.0"},"bin":{"mdm-tunnel-client":"./bin/client","mdm-tunnel-server":"./bin/server"},"devDependencies":{"ecstatic":"~0.4.2","shoe":"0.0.10","supertest":"~0.6.0","mocha":"~1.10.0"},"readmeFilename":"Readme.md","gitHead":"924c9876abb3d8ea3d69b86d69865e0613865ae5","directories":{"example":"example","test":"test"},"keywords":["tcp","tunnel","streams","nat","traversal"],"contributors":[{"name":"Nexxy","email":"emily@contactvibe.com","url":"https://github.com/nexxy"}],"readme":"# MuxDemux Tunnel\n\n## Expose network services behind a NAT via a public interface\n\n----\n\n## Example Configuration\n\nExpose services running on local port 9000/9001 on domains\nhello-world.username.example.com & websockets.username.example.com.\n\n$HOME/.tunnel-services.json:\n\n```json\n{\n  \"hello-world\": 9000,\n  \"websockets\": 9001\n}\n```\n\n## Client Usage\n\n```\nUsage: mdm-tunnel-client [options]\n\nOptions:\n\n  -h, --help           output usage information\n  -V, --version        output the version number\n  -c, --config [file]  Config file to load [file]\n  -u, --user [user]    username to log in to server with\n  -p, --port [port]    port on host server\n  -h, --host [host]    address of host server\n  -v, --verbose        verbose output\n```\n\n## Server Usage\n```\nUsage: mdm-tunnel-server [options]\n\nOptions:\n\n  -h, --help                  output usage information\n  -V, --version               output the version number\n  -p, --port [port]           Port to listen for external connections on [port]\n  -c, --client-port [client]  Port to listen for client connections on [client]\n  -v, --verbose               verbose output\n```\n\nWithout -v, mdm-tunnel runs totally silent.\n\n### Examples\n\n\n#### Create a .tunnel-services.json file.\n\nBy default the client searches for `.tunnel-services.json` in your\n`$HOME` directory. Keys are service names (can be anything), values are\nlocal port numbers for those services.\n\n```json\n{\n  \"hello-world\": 9000,\n  \"websockets\": 9001\n}\n````\n#### Boot the mdm-tunnel server and client\n\nOpen these in separate terminals or background them.\n\nNote: You'll need to set up wildcard subdomains to test the server on your local\nmachine. On OSX, I recommend\n[dnsmasq](www.echoditto.com/blog/never-touch-your-local-etchosts-file-os-x-again).\n\n```sh\n# Boot the server\nmdm-tunnel-server -v\n\n# Boot the client on your machine\nmdm-tunnel-client -u tim -v\n\n# Boot some service\nnode examples/simple/server.js\n\n# Connect with browser\nopen http://hello-world.tim.localhost.dev:8000\n```\n\n#### Websocket Example\n\n```sh\n# Boot up the service\nnode examples/websockets/server.js\n\n# Connect with browser\nopen http://websockets.tim.localhost.dev:8000\n\n```\nTo change the available services, edit your\n`$HOME/.tunnel-services.json`.\n","_id":"mdm-tunnel@0.1.0","dist":{"shasum":"1c4f6aa442e838a42c878f2f0eee39252d698079","tarball":"https://registry.npmjs.org/mdm-tunnel/-/mdm-tunnel-0.1.0.tgz","integrity":"sha512-12fRw42cWtMvzq0L7e3TDSs/FZeIunVqlMyk3Y6SGtJkWHnOsbdR684eDlKAxE7d0anyZ35eFv6jLx7ynidPhA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHJIpmo59sHEK9mfCWwe8xblWdNmFKXo+DJtN+0W1b35AiBSEKentEKf82vmThBZh9DCHy0ejBwVGWmUG9SoLybI+A=="}]},"_from":".","_npmVersion":"1.2.18","_npmUser":{"name":"timoxley","email":"secoif@gmail.com"},"maintainers":[{"name":"timoxley","email":"secoif@gmail.com"}]},"0.1.1":{"name":"mdm-tunnel","version":"0.1.1","description":"Access network services behind a NAT","main":"index.js","engines":{"node":">=0.8.0"},"scripts":{"test":"mocha test","start":"node server.js"},"repository":{"type":"git","url":"git://github.com/timoxley/mdm-tunnel.git"},"author":{"name":"Tim Oxley"},"license":"MIT","dependencies":{"through":"~2.3.4","mux-demux":"~3.6.3","stream-combiner":"0.0.2","msgpack-stream":"0.0.3","httppp":"~0.2.1","debug":"~0.7.2","reconnect":"~1.2.1","commander":"~1.1.1","response-stream":"0.0.0"},"bin":{"mdm-tunnel-client":"./bin/client","mdm-tunnel-server":"./bin/server"},"devDependencies":{"ecstatic":"~0.4.2","shoe":"0.0.10","supertest":"~0.6.0","mocha":"~1.10.0"},"readmeFilename":"Readme.md","gitHead":"924c9876abb3d8ea3d69b86d69865e0613865ae5","directories":{"example":"example","test":"test"},"keywords":["tcp","tunnel","streams","nat","traversal"],"contributors":[{"name":"Nexxy","email":"emily@contactvibe.com","url":"https://github.com/nexxy"},{"name":"Wei Lu","email":"luwei.here@gmail.com","url":"https://github.com/weilu"}],"readme":"[![Build Status](https://travis-ci.org/timoxley/mdm-tunnel.png?branch=master)](https://travis-ci.org/timoxley/mdm-tunnel)\n\n# MuxDemux Tunnel\n\n## Expose network services behind a NAT via a public interface\n\nmdm-tunnel is a very simple (read: naive) way to get around the fact that the devices\non the Internet cannot create *incoming* connections to devices behind a\nNAT i.e. if you boot a webserver on your home computer, the internet\ncannot access this server unless you forward ports to it on your home router. \n\nmdm-tunnel gets around the blocked incoming connections by simply opening an *outgoing*, persistent, duplex connection to a\nwebserver,\nwhich is accessible to the Internet. The webserver then accepts the incoming requests from the internet,\nand figures out which connection a request should be piped\nto.\n\n![mdm-tunnel-flow](https://f.cloud.github.com/assets/43438/610762/8d1922a8-cdbe-11e2-9447-6117044fd0b1.png)\n\nThere are probably better ways to do this, this is my first foray in\nthis space.\n\n----\n\n## Example Configuration\n\nExpose services running on local port 9000/9001 on domains\nhello-world.username.example.com & websockets.username.example.com.\n\n$HOME/.tunnel-services.json:\n\n```json\n{\n  \"hello-world\": 9000,\n  \"websockets\": 9001\n}\n```\n\n## Client Usage\n\n```\nUsage: mdm-tunnel-client [options]\n\nOptions:\n\n  -h, --help           output usage information\n  -V, --version        output the version number\n  -c, --config [file]  Config file to load [file]\n  -u, --user [user]    username to log in to server with\n  -p, --port [port]    port on host server\n  -h, --host [host]    address of host server\n  -v, --verbose        verbose output\n```\n\n## Server Usage\n```\nUsage: mdm-tunnel-server [options]\n\nOptions:\n\n  -h, --help                  output usage information\n  -V, --version               output the version number\n  -p, --port [port]           Port to listen for external connections on [port]\n  -c, --client-port [client]  Port to listen for client connections on [client]\n  -v, --verbose               verbose output\n```\n\nWithout -v, mdm-tunnel runs totally silent.\n\n### Examples\n\n\n#### Create a .tunnel-services.json file.\n\nBy default the client searches for `.tunnel-services.json` in your\n`$HOME` directory. Keys are service names (can be anything), values are\nlocal port numbers for those services.\n\n```json\n{\n  \"hello-world\": 9000,\n  \"websockets\": 9001\n}\n````\n#### Boot the mdm-tunnel server and client\n\nOpen these in separate terminals or background them.\n\nNote: You'll need to set up wildcard subdomains to test the server on your local\nmachine. On OSX, I recommend\n[dnsmasq](http://www.echoditto.com/blog/never-touch-your-local-etchosts-file-os-x-again).\n\n```sh\n# Boot the server\nmdm-tunnel-server -v\n\n# Boot the client on your machine\nmdm-tunnel-client -u tim -v\n\n# Boot some service\nnode examples/simple/server.js\n\n# Connect with browser\nopen http://hello-world.tim.localhost.dev:8000\n```\n\n#### Websocket Example\n\n```sh\n# Boot up the service\nnode examples/websockets/server.js\n\n# Connect with browser\nopen http://websockets.tim.localhost.dev:8000\n\n```\nTo change the available services, edit your\n`$HOME/.tunnel-services.json`.\n\n## Authentication / Security\n\nThe default implementation does not enforce any security. You can implement simple security inside the\nRouter instance you run on the webserver.\n\n```js\nnet.createServer(function(socket) {\n  socket.pipe(Router(config, socket, function(headers, done) {\n     async.series([\n       auth.bind(null, headers)),\n       route.bind(null, headers)\n    ], done)\n  }))\n}).listen(80)\n```\n\nThis isn't very sophisticated and could be improved.\n","bugs":{"url":"https://github.com/timoxley/mdm-tunnel/issues"},"homepage":"https://github.com/timoxley/mdm-tunnel","_id":"mdm-tunnel@0.1.1","dist":{"shasum":"4ebd2ddb09ba2df87af29f61a9190a38ee0d64e5","tarball":"https://registry.npmjs.org/mdm-tunnel/-/mdm-tunnel-0.1.1.tgz","integrity":"sha512-AJB3swoQ4mqzXyWUEYGxuatT1yjqrIhgG20ypl7Oxe52wzbjIJ24kc0c8KPYGcZTgfq4RlqIx2wk/EJgDa0XAw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFBXKp3hw6ccHcaxu0XHr1edhwTh55yMk401p04wRQCnAiEArLc/+aIt6EpLil2N0TXN5UB5EyTaSbzP4R3oVT1nmq4="}]},"_from":".","_npmVersion":"1.3.14","_npmUser":{"name":"timoxley","email":"secoif@gmail.com"},"maintainers":[{"name":"timoxley","email":"secoif@gmail.com"}]},"0.1.2":{"name":"mdm-tunnel","version":"0.1.2","description":"Access network services behind a NAT","main":"index.js","engines":{"node":">=0.8.0"},"scripts":{"test":"mocha test","start":"node server.js"},"repository":{"type":"git","url":"git://github.com/timoxley/mdm-tunnel.git"},"author":{"name":"Tim Oxley"},"license":"MIT","dependencies":{"through":"~2.3.4","mux-demux":"~3.7.8","stream-combiner":"0.0.2","msgpack-stream":"0.0.12","httppp":"~0.2.1","debug":"~0.7.4","reconnect":"~1.5.2","commander":"~2.1.0","response-stream":"0.0.0"},"bin":{"mdm-tunnel-client":"./bin/client","mdm-tunnel-server":"./bin/server"},"devDependencies":{"ecstatic":"~0.4.12","shoe":"0.0.15","supertest":"~0.8.1","mocha":"~1.14.0"},"directories":{"example":"example","test":"test"},"keywords":["tcp","tunnel","streams","nat","traversal"],"contributors":[{"name":"Nexxy","email":"emily@contactvibe.com","url":"https://github.com/nexxy"},{"name":"Wei Lu","email":"luwei.here@gmail.com","url":"https://github.com/weilu"}],"bugs":{"url":"https://github.com/timoxley/mdm-tunnel/issues"},"homepage":"https://github.com/timoxley/mdm-tunnel","readme":"[![Build Status](https://travis-ci.org/timoxley/mdm-tunnel.png?branch=master)](https://travis-ci.org/timoxley/mdm-tunnel)\n\n# MuxDemux Tunnel\n\n## Expose network services behind a NAT via a public interface\n\nmdm-tunnel is a very simple (read: naive) way to get around the fact that the devices\non the Internet cannot create *incoming* connections to devices behind a\nNAT i.e. if you boot a webserver on your home computer, the internet\ncannot access this server unless you forward ports to it on your home router. \n\nmdm-tunnel gets around the blocked incoming connections by simply opening an *outgoing*, persistent, duplex connection to a\nwebserver,\nwhich is accessible to the Internet. The webserver then accepts the incoming requests from the internet,\nand figures out which connection a request should be piped\nto.\n\n![mdm-tunnel-flow](https://f.cloud.github.com/assets/43438/610762/8d1922a8-cdbe-11e2-9447-6117044fd0b1.png)\n\nThere are probably better ways to do this, this is my first foray in\nthis space.\n\n----\n\n## Example Configuration\n\nExpose services running on local port 9000/9001 on domains\nhello-world.username.example.com & websockets.username.example.com.\n\n$HOME/.tunnel-services.json:\n\n```json\n{\n  \"hello-world\": 9000,\n  \"websockets\": 9001\n}\n```\n\n## Client Usage\n\n```\nUsage: mdm-tunnel-client [options]\n\nOptions:\n\n  -h, --help           output usage information\n  -V, --version        output the version number\n  -c, --config [file]  Config file to load [file]\n  -u, --user [user]    username to log in to server with\n  -p, --port [port]    port on host server\n  -h, --host [host]    address of host server\n  -v, --verbose        verbose output\n```\n\n## Server Usage\n```\nUsage: mdm-tunnel-server [options]\n\nOptions:\n\n  -h, --help                  output usage information\n  -V, --version               output the version number\n  -p, --port [port]           Port to listen for external connections on [port]\n  -c, --client-port [client]  Port to listen for client connections on [client]\n  -v, --verbose               verbose output\n```\n\nWithout -v, mdm-tunnel runs totally silent.\n\n### Examples\n\n\n#### Create a .tunnel-services.json file.\n\nBy default the client searches for `.tunnel-services.json` in your\n`$HOME` directory. Keys are service names (can be anything), values are\nlocal port numbers for those services.\n\n```json\n{\n  \"hello-world\": 9000,\n  \"websockets\": 9001\n}\n````\n#### Boot the mdm-tunnel server and client\n\nOpen these in separate terminals or background them.\n\nNote: You'll need to set up wildcard subdomains to test the server on your local\nmachine. On OSX, I recommend\n[dnsmasq](http://www.echoditto.com/blog/never-touch-your-local-etchosts-file-os-x-again).\n\n```sh\n# Boot the server\nmdm-tunnel-server -v\n\n# Boot the client on your machine\nmdm-tunnel-client -u tim -v\n\n# Boot some service\nnode examples/simple/server.js\n\n# Connect with browser\nopen http://hello-world.tim.localhost.dev:8000\n```\n\n#### Websocket Example\n\n```sh\n# Boot up the service\nnode examples/websockets/server.js\n\n# Connect with browser\nopen http://websockets.tim.localhost.dev:8000\n\n```\nTo change the available services, edit your\n`$HOME/.tunnel-services.json`.\n\n## Authentication / Security\n\nThe default implementation does not enforce any security. You can implement simple security inside the\nRouter instance you run on the webserver.\n\n```js\nnet.createServer(function(socket) {\n  socket.pipe(Router(config, socket, function(headers, done) {\n     async.series([\n       auth.bind(null, headers)),\n       route.bind(null, headers)\n    ], done)\n  }))\n}).listen(80)\n```\n\nThis isn't very sophisticated and could be improved.\n","readmeFilename":"Readme.md","_id":"mdm-tunnel@0.1.2","dist":{"shasum":"efbeb8e97c7e51e788a02d7e9eb24db356d39685","tarball":"https://registry.npmjs.org/mdm-tunnel/-/mdm-tunnel-0.1.2.tgz","integrity":"sha512-EV+aBiTNeT5GZrLSimOO1C/it7J2UlK50tiTl1YFghi8MoHjgO8st13vo6Tkja5vKTWDvODcKd9dwBHWmN9x9w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEp2FQYV7lVhm+xJ+f8k7xH8kvoWtyZRYuRNXs8jE7oSAiEA6zCmVTW192eWjeEIZ8yJHdnA18jhGGKDa9R4zc6nXKo="}]},"_from":".","_npmVersion":"1.3.14","_npmUser":{"name":"timoxley","email":"secoif@gmail.com"},"maintainers":[{"name":"timoxley","email":"secoif@gmail.com"}]}},"readme":"# MuxDemux Tunnel\n\n## Expose network services behind a NAT via a public interface\n\n----\n","maintainers":[{"name":"timoxley","email":"secoif@gmail.com"}],"time":{"modified":"2022-06-19T17:20:43.906Z","created":"2013-05-19T23:21:46.951Z","0.0.0":"2013-05-19T23:21:53.095Z","0.0.1":"2013-05-20T02:08:36.997Z","0.0.2":"2013-05-20T02:17:40.447Z","0.0.3":"2013-05-20T03:32:15.737Z","0.0.4":"2013-05-20T04:52:53.056Z","0.0.5":"2013-05-23T05:20:03.273Z","0.0.6":"2013-05-26T22:42:05.000Z","0.0.7":"2013-05-28T11:38:27.727Z","0.1.0":"2013-06-03T03:57:55.872Z","0.1.1":"2013-11-22T21:58:01.927Z","0.1.2":"2013-11-22T22:07:35.556Z"},"author":{"name":"Tim Oxley"},"repository":{"type":"git","url":"git://github.com/timoxley/mdm-tunnel.git"}}