# Telebit™ Remote
Because friends don't let friends localhost™
| Sponsored by [ppl](https://ppl.family)
| **Telebit Remote**
| [Telebit Relay](https://git.coolaj86.com/coolaj86/telebit-relay.js)
| [sclient](https://telebit.cloud/sclient)
|
 Break out of localhost.
=======
If you need to get bits from here to there, Telebit gets the job done.
Install Telebit Remote on any device - your laptop, raspberry pi, whatever -
and now you can access that device from anywhere, even securely in a web browser.
How does it work?
It's a net server that uses a relay to allow multiplexed incoming connections
on any external port.
Features
--------
* [x] Show your mom the web app you're working on
* [x] Access your Raspberry Pi from behind a firewall
* [x] Watch Netflix without region restrictions while traveling
* [x] SSH over HTTPS on networks with restricted ports or protocols
* [x] Access your wife's laptop while she's on a flight
Examples
========
You do this:
    curl -fsSL https://get.telebit.cloud | bash
You get this:
    ~/telebit http 3000
    > Forwarding lucky-duck-42.telebit.cloud => localhost:3000
    ~/telebit http ~/sites/example.com/
    > Serving ~/sites/example.com/ as lucky-duck-42.telebit.cloud
And this:
    ~/telebit tcp 5050
    > Forwarding telebit.cloud:1337 => localhost:5050
And even this:
    ~/telebit ssh auto
    > Forwarding ssh telebit.cloud -p 1337 => localhost:22
    > Forwarding ssh+https (openssl proxy) => localhost:22
No privileged ports. No sudo. End-to-end encryption.
Fastest way to test a site, share a file, and pair over ssh.
Install
=======
Mac & Linux
-----------
Open Terminal and run this install script:
```
curl -fsSL https://get.telebit.cloud | bash
```
What does the installer do?
  * install Telebit Remote to `~/Applications/telebit/`
  * symlink the executable to `~/telebit` for convenience
  * create the appropriate system launcher file
    * `/etc/systemd/system/telebit.service`
    * `~/Library/LaunchAgents/cloud.telebit.remote.plist`
  * create local user config
    * `~/.config/telebit/telebit.yml`
    * `~/.local/share/telebit`
Of course, feel free to inspect it before you run it: `curl -fsSL https://get.telebit.cloud`
**You can customize the installation**:
```bash
export NODEJS_VER=v10.2                   # v10.2 is tested working, but we can test other versions
export TELEBIT_VERSION=master             # git tag or branch to install from
export TELEBIT_USERSPACE=no               # install as a system service (launchd, systemd only)
export TELEBIT_PATH=/opt/telebit
export TELEBIT_USER=telebit
export TELEBIT_GROUP=telebit
curl -fsSL https://get.telebit.cloud/ | bash
```
That will change the bundled version of node.js is bundled with Telebit Relay
and the path to which Telebit Relay installs.
Windows & Node.js
-----------------
1. Install [node.js](https://nodejs.org)
2. Open _Node.js_
2. Run the command `npm install -g telebit`
2. Copy the example daemon conifg to your user folder `.config/telebit/telebitd.yml` (such as `/Users/John/.config/telebit/telebitd.yml`)
2. Copy the example remote conifg to your user folder `.config/telebit/telebit.yml` (such as `/Users/John/.config/telebit/telebit.yml`)
2. Change the email address
2. Run `npx telebit init` and follow the instructions
2. Run `npx telebit list`
**Note**: Use node.js **v10.2.1**
(there are specific bugs in each of
v8.x,
[v9.x](https://github.com/nodejs/node/issues/20241),
v10.0,
and v10.3
that each cause telebit to crash)
Remote Usage
============
```
# commands
telebit 
# domain and port control
telebit   [servername] [options ...]
```
Examples:
```
telebit status                          # whether enabled or disabled
telebit enable                          # disallow incoming connections
telebit disable                         # allow incoming connections
telebit restart                         # kill daemon and allow system launcher to restart it
telebit list                            # list rules for servernames and ports
                       ################
                       #     HTTP     #
                       ################
telebit http  [servername] [opts]
telebit http none                       # remove all https handlers
telebit http 3000                       # forward all https traffic to port 3000
telebit http /module/path               # load a node module to handle all https traffic
telebit http none example.com           # remove https handler from example.com
telebit http 3001 example.com           # forward https traffic for example.com to port 3001
telebit http /module/path example.com   # forward https traffic for example.com to port 3001
                       ################
                       #     TCP      #
                       ################
telebit tcp  [servername] [opts]
telebit tcp none                        # remove all tcp handlers
telebit tcp 5050                        # forward all tcp to port 5050
telebit tcp /module/path                # handle all tcp with a node module
telebit tcp none 6565                   # remove tcp handler from external port 6565
telebit tcp 5050 6565                   # forward external port 6565 to local 5050
telebit tcp /module/path 6565           # handle external port 6565 with a node module
telebit ssh disable                     # disable ssh access
telebit ssh 22                          # port-forward all ssh connections to port 22
telebit save                            # save http and tcp configuration changes
```
### Using SSH
SSH over HTTPS
```
ssh -o ProxyCommand='openssl s_client -connect %h:443 -servername %h -quiet' lucky-duck-42.telebit.cloud
```
SSH over non-standard port
```
ssh lucky-duck-42.telebit.cloud -p 3031
```
Daemon Usage (non-global)
============
```bash
~/Applications/bin/node ~/Applications/bin/telebitd.js --config ~/.config/telebit/telebitd.yml
```
Options
`~/.config/telebit/telebitd.yml:`
```
email: 'jon@example.com'          # must be valid (for certificate recovery and security alerts)
agree_tos: true                   # agree to the Telebit, Greenlock, and Let's Encrypt TOSes
relay: wss://telebit.cloud        # a Telebit Relay instance
community_member: true            # receive infrequent relevant but non-critical updates
telemetry: true                   # contribute to project telemetric data
secret: ''                        # Secret with which to sign Tokens for authorization
#token: ''                         # A signed Token for authorization
ssh_auto: 22                      # forward ssh-looking packets, from any connection, to port 22
servernames:                      # servernames that will be forwarded here
  example.com: {}
```
Choosing A Relay
================
You can create a free or paid account at 
or you can run [Telebit Relay](https://git.coolaj86.com/coolaj86/telebitd.js)
open source on a VPS (Vultr, Digital Ocean)
or your Raspberry Pi at home (with port-forwarding).
Only connect to Telebit Relays that you trust.
Check Logs
==========
**Linux**:
```
SYSTEMD_LOG_LEVEL=debug journalctl -xef --user-unit=telebit
```
**macOS**:
```
tail -f ~/local/share/telebit/var/log/info.log
```
```
tail -f ~/.local/share/telebit/var/log/error.log
```
Uninstall
=======
**Linux**:
```
systemctl --user disable telebit; systemctl --user stop telebit
rm -f ~/.config/systemd/user/telebit.service
rm -rf ~/telebit ~/Applications/telebit
rm -rf ~/.config/telebit ~/.local/share/telebit
```
**macOS**:
```
launchctl unload -w ~/Library/LaunchAgents/cloud.telebit.remote.plist
rm -f ~/Library/LaunchAgents/cloud.telebit.remote.plist
rm -rf ~/telebit ~/Applications/telebit
rm -rf ~/.config/telebit ~/.local/share/telebit
```
Browser Library
=======
This is implemented with websockets, so you should be able to
LICENSE
=======
Copyright 2016-2018+ AJ ONeal
Break out of localhost.
=======
If you need to get bits from here to there, Telebit gets the job done.
Install Telebit Remote on any device - your laptop, raspberry pi, whatever -
and now you can access that device from anywhere, even securely in a web browser.
How does it work?
It's a net server that uses a relay to allow multiplexed incoming connections
on any external port.
Features
--------
* [x] Show your mom the web app you're working on
* [x] Access your Raspberry Pi from behind a firewall
* [x] Watch Netflix without region restrictions while traveling
* [x] SSH over HTTPS on networks with restricted ports or protocols
* [x] Access your wife's laptop while she's on a flight
Examples
========
You do this:
    curl -fsSL https://get.telebit.cloud | bash
You get this:
    ~/telebit http 3000
    > Forwarding lucky-duck-42.telebit.cloud => localhost:3000
    ~/telebit http ~/sites/example.com/
    > Serving ~/sites/example.com/ as lucky-duck-42.telebit.cloud
And this:
    ~/telebit tcp 5050
    > Forwarding telebit.cloud:1337 => localhost:5050
And even this:
    ~/telebit ssh auto
    > Forwarding ssh telebit.cloud -p 1337 => localhost:22
    > Forwarding ssh+https (openssl proxy) => localhost:22
No privileged ports. No sudo. End-to-end encryption.
Fastest way to test a site, share a file, and pair over ssh.
Install
=======
Mac & Linux
-----------
Open Terminal and run this install script:
```
curl -fsSL https://get.telebit.cloud | bash
```
What does the installer do?
  * install Telebit Remote to `~/Applications/telebit/`
  * symlink the executable to `~/telebit` for convenience
  * create the appropriate system launcher file
    * `/etc/systemd/system/telebit.service`
    * `~/Library/LaunchAgents/cloud.telebit.remote.plist`
  * create local user config
    * `~/.config/telebit/telebit.yml`
    * `~/.local/share/telebit`
Of course, feel free to inspect it before you run it: `curl -fsSL https://get.telebit.cloud`
**You can customize the installation**:
```bash
export NODEJS_VER=v10.2                   # v10.2 is tested working, but we can test other versions
export TELEBIT_VERSION=master             # git tag or branch to install from
export TELEBIT_USERSPACE=no               # install as a system service (launchd, systemd only)
export TELEBIT_PATH=/opt/telebit
export TELEBIT_USER=telebit
export TELEBIT_GROUP=telebit
curl -fsSL https://get.telebit.cloud/ | bash
```
That will change the bundled version of node.js is bundled with Telebit Relay
and the path to which Telebit Relay installs.
Windows & Node.js
-----------------
1. Install [node.js](https://nodejs.org)
2. Open _Node.js_
2. Run the command `npm install -g telebit`
2. Copy the example daemon conifg to your user folder `.config/telebit/telebitd.yml` (such as `/Users/John/.config/telebit/telebitd.yml`)
2. Copy the example remote conifg to your user folder `.config/telebit/telebit.yml` (such as `/Users/John/.config/telebit/telebit.yml`)
2. Change the email address
2. Run `npx telebit init` and follow the instructions
2. Run `npx telebit list`
**Note**: Use node.js **v10.2.1**
(there are specific bugs in each of
v8.x,
[v9.x](https://github.com/nodejs/node/issues/20241),
v10.0,
and v10.3
that each cause telebit to crash)
Remote Usage
============
```
# commands
telebit 
# domain and port control
telebit   [servername] [options ...]
```
Examples:
```
telebit status                          # whether enabled or disabled
telebit enable                          # disallow incoming connections
telebit disable                         # allow incoming connections
telebit restart                         # kill daemon and allow system launcher to restart it
telebit list                            # list rules for servernames and ports
                       ################
                       #     HTTP     #
                       ################
telebit http  [servername] [opts]
telebit http none                       # remove all https handlers
telebit http 3000                       # forward all https traffic to port 3000
telebit http /module/path               # load a node module to handle all https traffic
telebit http none example.com           # remove https handler from example.com
telebit http 3001 example.com           # forward https traffic for example.com to port 3001
telebit http /module/path example.com   # forward https traffic for example.com to port 3001
                       ################
                       #     TCP      #
                       ################
telebit tcp  [servername] [opts]
telebit tcp none                        # remove all tcp handlers
telebit tcp 5050                        # forward all tcp to port 5050
telebit tcp /module/path                # handle all tcp with a node module
telebit tcp none 6565                   # remove tcp handler from external port 6565
telebit tcp 5050 6565                   # forward external port 6565 to local 5050
telebit tcp /module/path 6565           # handle external port 6565 with a node module
telebit ssh disable                     # disable ssh access
telebit ssh 22                          # port-forward all ssh connections to port 22
telebit save                            # save http and tcp configuration changes
```
### Using SSH
SSH over HTTPS
```
ssh -o ProxyCommand='openssl s_client -connect %h:443 -servername %h -quiet' lucky-duck-42.telebit.cloud
```
SSH over non-standard port
```
ssh lucky-duck-42.telebit.cloud -p 3031
```
Daemon Usage (non-global)
============
```bash
~/Applications/bin/node ~/Applications/bin/telebitd.js --config ~/.config/telebit/telebitd.yml
```
Options
`~/.config/telebit/telebitd.yml:`
```
email: 'jon@example.com'          # must be valid (for certificate recovery and security alerts)
agree_tos: true                   # agree to the Telebit, Greenlock, and Let's Encrypt TOSes
relay: wss://telebit.cloud        # a Telebit Relay instance
community_member: true            # receive infrequent relevant but non-critical updates
telemetry: true                   # contribute to project telemetric data
secret: ''                        # Secret with which to sign Tokens for authorization
#token: ''                         # A signed Token for authorization
ssh_auto: 22                      # forward ssh-looking packets, from any connection, to port 22
servernames:                      # servernames that will be forwarded here
  example.com: {}
```
Choosing A Relay
================
You can create a free or paid account at 
or you can run [Telebit Relay](https://git.coolaj86.com/coolaj86/telebitd.js)
open source on a VPS (Vultr, Digital Ocean)
or your Raspberry Pi at home (with port-forwarding).
Only connect to Telebit Relays that you trust.
Check Logs
==========
**Linux**:
```
SYSTEMD_LOG_LEVEL=debug journalctl -xef --user-unit=telebit
```
**macOS**:
```
tail -f ~/local/share/telebit/var/log/info.log
```
```
tail -f ~/.local/share/telebit/var/log/error.log
```
Uninstall
=======
**Linux**:
```
systemctl --user disable telebit; systemctl --user stop telebit
rm -f ~/.config/systemd/user/telebit.service
rm -rf ~/telebit ~/Applications/telebit
rm -rf ~/.config/telebit ~/.local/share/telebit
```
**macOS**:
```
launchctl unload -w ~/Library/LaunchAgents/cloud.telebit.remote.plist
rm -f ~/Library/LaunchAgents/cloud.telebit.remote.plist
rm -rf ~/telebit ~/Applications/telebit
rm -rf ~/.config/telebit ~/.local/share/telebit
```
Browser Library
=======
This is implemented with websockets, so you should be able to
LICENSE
=======
Copyright 2016-2018+ AJ ONeal