<div style="text-align: center"><button onclick="window.location.href='gettingstarted_es.html'">Español</button><button onclick="window.location.href='gettingstarted_tr.html'">Türkçe</button><button onclick="window.location.href='gettingstarted_ru.html'">Русский</button><button onclick="window.location.href='gettingstarted_zhcn.html'">简体中文</button><button onclick="window.location.href='gettingstarted_zhtw.html'">繁体中文</button><button onclick="window.location.href='gettingstarted_ar.html'">العربية</button><button onclick="window.location.href='gettingstarted_fa.html'">فارسی</button>
''//Who are you?//''</div>
{
<table style="width:100%" valign="top">
<tr style="text-align:center">
<td>}[[<img src="assets/game/developer1.png" alt="Developer" width="300" />|I'm a developer]]{</td>
<td>}[[<img src="assets/game/user1.png" alt="User" width="300"/>|I'm an end user]]{</td>
</tr>
<tr>
<td style="text-align:center">[[I'm a developer]]</td>
<td style="text-align:center">[[I'm an end user]]</td>
</tr>
</table>}<div style="text-align: center">''//Pluggable Transports for End Users//''</div>
<p><img src="assets/game/user1.png" alt="End user" style="padding: 0 15px; float: right; max-width: 300px" width="75%" /></p>You're probably here because you want to get past something that's blocking your access to Internet content. What do you want to do now?
[[Give me a quick solution!]]
[[I want to build something myself]]
<!--
{<table style="width:100%" valign="top">
<tr>
<td style="text-align: left">You're probably here because you want to get past something that's blocking your access to something on the Internet. What do you want to do now?
<br /><br />
[[Give me a quick solution!]]<br />
[[I want to build something myself]]
</td>
<td style="text-align: center"><img src="assets/game/user1.png" alt="End user" width="50%" /></td>
</tr>
</table>}
<div style="text-align: center">''//Background//''</div>-->
Some of the most common sites and services are blocked in different ways on different networks. Sometimes, these blocks occur at the national level, and are put in place permanently; or they could be happening around an important election. Read Freedom House's annual <a href="https://freedomhouse.org/report/freedom-net/freedom-net-2017" target="_blank">Freedom on the Net</a> report to find out more about how widespread this is.
Other times, it may be that your Internet Service Provider (ISP) is blocking access to content. An ISP is anyone whos provides your network connection and doesn't want you to access something - it could be your corporate firewall, your school network, or your telecom company.
In many cases, it's frustrating when you can't get to the content you want. Pluggable Transports are designed to help you find the best way to get to the content, and there are several types of transport. The idea behind it is that they all talk to the system in a common way, and allow app developers and sysadmins to implement one solution that can access multiple different transports at any given time.
[[Go back|Who are you?]]
<!--
''//Pluggable Transports for End Users//''
You're probably here because you want to get past something that's blocking your access to something on the Internet. What do you want to do now?
[[Give me a quick solution!]]
[[I want to build something myself]]
--><div style="text-align: center">''//Pluggable Transports for Developers//''</div>
You already know you want to use Pluggable Transports with your software, and are looking for some additional resources. What can we help you with today?
<p><img src="assets/game/developer1.png" alt="Developer" style="padding: 0 15px; float: left; max-width: 300px" width="100%" /></p>- [[I want to install support for Pluggable Transports on my OpenVPN server|OpenVPN and Pluggable Transports]]
- [[Using Pluggable Transports in my Go app]]
- [[Testing Pluggable Transports]]
- [[I want to write a transport]]
- [[Pluggable Transports specification|Pluggable Transports specification]]
[[Go back|Who are you?]]
<!--
{<table style="width:100%" valign="top">
<tr>
<td style="text-align: center"><img src="assets/game/developer1.png" alt="Developer" width="300" /></td>
<td style="text-align: left">You already know you want to use Pluggable Transports with your software, and are looking for some additional resources. What can we help you with today?
<br /><br />
- [[I want to install support for Pluggable Transports on my OpenVPN server|OpenVPN and Pluggable Transports]]<br />
- [[Using Pluggable Transports in my Go app]]<br />
- [[Testing Pluggable Transports]]<br />
- [[I want to write a transport]]<br />
- [[Pluggable Transports specification|Pluggable Transports specification]]
</td>
</tr>
</table>}
[[Go back|Who are you?]]
<div style="text-align: center">''//Using Pluggable Transports//''</div>
<p><img src="assets/game/jigsaw.png" alt="Ready made apps" style="padding: 0 15px; float: left; margin-left: -100px; max-width: 500px" width="75%" /></p>You need to get to your content quickly. Thankfully, there are several pieces of software out there already that have implemented Pluggable Transports. If you're on a desktop machine, you might already be using <a href="https://torproject.org" target="_blank">Tor Browser</a>, which can be configured to use bridges - these are Pluggable Transport connectors that get you onto the network when Tor itself is blocked.
If you're on a mobile device, you could try <a href="https://getlantern.org" target="_blank">Lantern</a> or <a href="https://psiphon.ca" target="_blank">Psiphon</a>, both of which work on Android and iOS. There are also apps to get you onto the Tor network - you can see more examples <a href="https://www.pluggabletransports.info/implement/" target="_blank">here</a>, with links to download and install.
Everything we show you is open source, and there's a solution for every desktop and mobile operating system you're likely to use.
Does this give you the answer you're looking for?
[[Yes, I'm done!|I'm done!]]
No, [[I want to build something myself]]
[[Go back|I'm an end user]]
[[Start over|Who are you?]]
<!--
{<table style="width:100%" valign="top">
<tr>
<td><img src="assets/game/jigsaw.png" alt="Ready made apps" width="75%"/></td>
<td style="text-align: left" width="60%">You need to get to your content quickly. Thankfully, there are several pieces of software out there already that have implemented Pluggable Transports. If you're on a desktop machine, you might already be using <a href="https://torproject.org" target="_blank">Tor Browser</a>, which can be configured to use bridges - these are Pluggable Transport connectors that get you onto the network when Tor itself is blocked.
If you're on a mobile device, you could try <a href="https://getlantern.org" target="_blank">Lantern</a> or <a href="https://psiphon.ca" target="_blank">Psiphon</a>, both of which work on Android and iOS. There are also apps to get you onto the Tor network - you can see more examples <a href="https://www.pluggabletransports.info/implement/" target="_blank">here</a>, with links to download and install. Everything we show you is open source, and there's a solution for every desktop and mobile operating system you're likely to use.
</td>
</tr>
</table>}
Everything we show you is open source, and there's a solution for every desktop and mobile operating system you're likely to use.
Does this give you the answer you're looking for?
[[Yes, I'm done!|I'm done!]]
No, [[I want to build something myself]]
[[Go back|I'm an end user]]
[[Start over|Who are you?]]
<p style="margin-top: 20px;"></p>
--><div style="text-align: center">''//Building Your Own Pluggable Transports Solution//''</div>
Rather than using <a href="https://www.pluggabletransports.info/implement/" target="_blank">existing tools</a>, you're going to build your own Pluggable Transports-based system. Here are two options:
* Marionette: Redjack's Marionette (<a href="https://www.github.com/redjack/marionette" target="_blank">https://www.github.com/redjack/marionette</a>) is a command-line tool that can be easily built on a Mac or CentOS system. We have published getting started guides for both the <a href="/implement/marionette-server" target="_blank">server</a> and <a href="/implement/marionette-client" target="_blank">client</a>. More information and detailed documentation are available directly from <a href="https://github.com/redjack/marionette/blob/master/doc/USER_GUIDE.md" target="_blank">the project</a>.
* Moonbounce: Operator Foundation (<a href="https://www.operatorfoundation.org" target="_blank">https://www.operatorfoundation.org</a>) has created a graphical user interface on Mac OSX for implementing OpenVPN with support for Pluggable Transports. They also have a script for provisioning an OpenVPN server on Digital Ocean.
Alternatively, you might want to configure OpenVPN yourself.
[[I want to do a manual install|OpenVPN and Pluggable Transports]]
[[Go back|I'm an end user]]
[[Start over|Who are you?]]<<div style="text-align: center">''//I'm done!//''</div>
Thanks for following our story! Let us know what you think of this - you can <a href="mailto:[email protected]">email us</a> or <a href="https://www.twitter.com/plugtransports" target="_blank">find us on Twitter</a>. For other useful links, visit the <a href="https://www.pluggabletransports.info" target="_blank">Pluggable Transports web site</a>, and see these <a href="https://www.pluggabletransports.info/community" target="_blank">community links</a> for more info.
<img src="assets/game/developer_user2.png" alt="We're happy!" style="display: block; margin-left: auto; margin-right: auto;" width="100%">
[[Start over|Who are you?]]''//Moonbounce//''
From Operator Foundation's <a href="https://github.com/OperatorFoundation/Moonbounce/blob/master/README.md" target="_blank">README</a> file:
***Moonbounce is a graphical user interface for using an OpenVPN client and server with Pluggable Transport support. The goal of Moonbounce is to provide a usability-focused, streamlined user experience to using PT-enabled OpenVPN.***
<img src="assets/game/moonbounce.jpg">
You can get the code for the client <a href="https://github.com/OperatorFoundation/Moonbounce" target="_blank">here</a>, and if you want to provision a server on Digital Ocean, you can see how to do that using the <a href="https://github.com/OperatorFoundation/shapeshifter-server" target="_blank">Shapeshifter Server scripts</a>.
[[I'm done!]]
[[Go back|I want to build something myself]]
[[Start over|Who are you?]]<div style="text-align: center">''//OpenVPN and Pluggable Transports//''</div>
If you're here, you've probably got an OpenVPN server running, and you want to add support for Pluggable Transports. However, maybe you need some help installing OpenVPN?
[[Yes, please help me with OpenVPN|Installing and configuring OpenVPN]]
[[I have OpenVPN running, let's talk Pluggable Transports|Installing Pluggable Transports on OpenVPN]]
[[Go back|Who are you?]]
[[Start over|Who are you?]]<div style="text-align: center">''//Installing and Configuring OpenVPN//''</div>
<p><img src="assets/game/plug.png" alt="Plugging in" style="padding: 0 15px; float: right; max-width: 300px" width="100%" /></p>Our <a href="https://www.pluggabletransports.info/implement/openvpn/#preparation" target="_blank:">guide to installing OpenVPN</a> takes you through these three steps:
* Preparation: Getting the dependencies (openssl, ca-certificates, git, golang, curl, screen).
* OpenVPN installation: How to install, configure and test OpenVPN with root / sudo access on your server.
* Install and configure certificates: Setting up the OpenVPN network, and generating certificates for the server and clients.
Once that's complete, and you're happy with the basic setup, it's time to move on to the Pluggable Transports configuration.
[[Move on to Pluggable Transports|Installing Pluggable Transports on OpenVPN]]
[[Go back|OpenVPN and Pluggable Transports]]
[[Start over|Who are you?]]<div style="text-align: center">''//Installing Pluggable Transports on OpenVPN//''</div>
<p><img src="assets/game/plug.png" alt="Plugging in" style="padding: 0 15px; float: right; max-width: 300px" width="100%" /></p>You have an OpenVPN server running, and have tested client connections. You now want to add Pluggable Transports support. To do this, you're going to install <a href="https://github.com/OperatorFoundation/shapeshifter-dispatcher" target="_blank">shapeshifter-dispatcher</a>, which will allow you to proxy both TCP and UDP traffic.
Our guide to installing Pluggable Transports with OpenVPN will help you <a href="https://www.pluggabletransports.info/implement/openvpn/#server-obfuscation-configuration" target="_blank">install and configure shapeshifter</a>.
The steps you will be guided through are:
* Install and configure shapeshifter-dispatcher
* Server and client setup
Once this is done, you will have your own server running OpenVPN with Pluggable Transports!
Alternatively, you could run <a href="https://github.com/OpenInternet/openvpn-shapeshifter">this script</a> to install and configure OpenVPN on Ubuntu and Debian servers.
Are you done with this guide?
[[I'm done!]]
[[Start over|Who are you?]]<div style="text-align: center">''//Pluggable Transports Specification//''</div>
The current version of the spec is available <a href="https://www.pluggabletransports.info/spec/pt2draft3" target="_blank">here</a>.
The developments that led to the Pluggable Transports 2.0 specification included:
* An API for the Go programming language
* Support for the UDP protocol
* A wider variety of apps and implementations for different environments
Version 2.1 reframed this as a modular specification, so that components of the spec can be upgraded independently, and developers can be compliant even if their work is tied to one platform.
As you would expect, the specification for Pluggable Transports continues to evolve. You may find that the current spec doesn't work for your needs, and you might want to contribute to the next version. If that's the case, you can do that via <a href="https://github.com/Pluggable-Transports/Pluggable-Transports-spec" target="_blank">the Github repo</a>.
[[I'm done!]]
[[Go back|I'm a developer]]
[[Start over|Who are you?]]<div style="text-align: center">''//Using Pluggable Transports in Go//''</div>
<p><img src="assets/game/plug.png" alt="Plugging in" style="padding: 0 15px; float: right; max-width: 300px" width="100%" />Our full guide for using Pluggable Transports in Go is available <a href="https://www.pluggabletransports.info/implement/go/" target="_blank">here</a>. We take you through these steps in a sample deployment:
* What are the Transport and TransportListener interfaces?
* Creating a Go program
* Using a Transport in a Server application
* Using a Transport in a Client application
Once you're done with that guide, you might want to look at how to test your app in different environments.
[[Testing Pluggable Transports]]
[[I'm done!]]
[[Go back|I'm a developer]]
[[Start over|Who are you?]]
<!--
{<table style="width:100%" valign="top">
<tr style="text-align:left">
<td style="text-align: left" width="60%">
Our full guide for using Pluggable Transports in Go is available <a href="https://www.pluggabletransports.info/implement/go/" target="_blank">here</a>. We take you through these steps in a sample deployment:
<br /><br />
* What are the Transport and TransportListener interfaces?<br />
* Creating a Go program<br />
* Using a Transport in a Server application<br />
* Using a Transport in a Client application<br />
Once you're done with that guide, you might want to look at how to test your app in different environments.<br /><br />
[[Testing Pluggable Transports]]<br />
[[I'm done!]]<br />
[[Go back|I'm a developer]]
</td>
<td><img src="assets/game/plug.png" alt="Plugging In" width="75%">
</td>
</tr>
</table>}
<!--
<div style="text-align: center">''//Using Pluggable Transports in Go//''</div>
Our full guide for using Pluggable Transports in Go is available <a href="https://www.pluggabletransports.info/implement/go/" target="_blank">here</a>. We take you through these steps in a sample deployment:
{<table style="width:100%" valign="top">
<tr style="text-align:left">
<td style="text-align: left" width="60%">
* What are the Transport and TransportListener interfaces?
* Creating a Go program
* Using a Transport in a Server application
* Using a Transport in a Client application
</td>
<td><img src="assets/game/plug.png" alt="Plugging In" width="100%">
</td>
</tr>
</table>}
Once you're done with that guide, you might want to look at how to test your app in different environments.-->
<!--
Our full guide for using Pluggable Transports in Go is available <a href="https://www.pluggabletransports.info/implement/go/" target="_blank">here</a>. We take you through these steps in a sample deployment:
* What are the Transport and TransportListener interfaces?
* Creating a Go program
* Using a Transport in a Server application
* Using a Transport in a Client application
Once you're done with that guide, you might want to look at how to test your app in different environments.
[[Testing Pluggable Transports]]
[[I'm done!]]
[[Go back|I'm a developer]]
[[Start over|Who are you?]]
--><div style="text-align: center">''//Testing Pluggable Transports//''</div>
<img src="assets/game/tester.png" alt="Testing... testing..." style="padding: 0 15px; float: right; max-width: 300px" width="100%" />There are many different ways in which access to sites and services can be blocked, ranging from simple IP address or DNS blocking to rules created from deep packet inspection (DPI). You might want to test a network environment that simulates some of the many ways in which this can happen.
We recommend investigating the following services:
* <a href="https://github.com/OperatorFoundation/AdversaryLab" target="_blank">Adversary Lab</a>: Created by Operator Foundation, with support from the Pluggable Transports community. Adversary Lab is a service that analyzes captured network traffic to extract statistical properties. Using this analysis, filtering rules can be synthesized to block sampled traffic.
* <a href="https://openinternet.github.io/copilot/" target="_blank">CoPilot</a>: This is a wireless hotspot that provides an easy to use web interface for simulating custom censorship environments. It comes with various plugins and the ability to import censorship “rules” from standard Intrusion prevention and detection systems.
[[I'm done!]]
[[Go back|I'm a developer]]
[[Start over|Who are you?]]
<!--
{<table style="width:100%" valign="top">
<tr style="text-align:left">
<td style="text-align: left" width="50%">
We recommend investigating the following services:
<br /><br />
* <a href="https://github.com/OperatorFoundation/AdversaryLab" target="_blank">Adversary Lab</a>: Created by Operator Foundation, with support from the Pluggable Transports community. Adversary Lab is a service that analyzes captured network traffic to extract statistical properties. Using this analysis, filtering rules can be synthesized to block sampled traffic.
<br /><br />
* <a href="https://openinternet.github.io/copilot/" target="_blank">CoPilot</a>: This is a wireless hotspot that provides an easy to use web interface for simulating custom censorship environments. It comes with various plugins and the ability to import censorship “rules” from standard Intrusion prevention and detection systems.
</td>
<td><img src="assets/game/tester.png" alt="Testing... testing..." width="75%">
</td>
</tr>
</table>}
[[I'm done!]]
[[Go back|I'm a developer]]
[[Start over|Who are you?]]--><div style="text-align: center">''//Writing Pluggable Transports//''</div>
Do you have an idea for a Pluggable Transport? Do you want to implement something that follows the current spec and can help improve the community's work?
The first place to start is to look at the [[Pluggable Transports specification]]. There is also a <a href="https://www.pluggabletransports.info/transports/" target="_blank">Transports Library</a> that will tell you about the existing transports.
When you're ready to move on, our <a href="https://www.pluggabletransports.info/build/how/" target="_blank">online guide</a> will talk you through creating a transport in the Go programming language, by providing an example implementation of the interface which provides a simple ROT13 cipher on the contents of the application data stream.
Don't forget to also look at <a href="https://www.surveymonkey.com/r/pluggabletransports" target="_blank">the Internews small grants pool</a> to investigate funding for new Pluggable Transports.
[[Testing Pluggable Transports]]
[[I'm done!]]
[[Go back|I'm a developer]]
[[Start over|Who are you?]]