Outline of Outline

What is Outline VPN?

Outline is a product of Google Jigsaw, a unit of Google that seeks to harness technology to promote an open society. Before being named Jigsaw, the unit was known as Google Ideas. It was founded in 2010 under Jared Cohen, formerly of the U.S. State Department.

Outline VPN consists of a server manager and a client. Outline Manager will handle any server provider, but it has special features to automate the process on DigitalOcean, Amazon Lightsail, and Google Cloud. Builds of the Server Manager are available for Windows, Linux, and macOS. The Outline Client is available for Android, Windows, Chrome, iOS, macOS, and Linux.

The official website for Outline VPN is Get Outline at https://getoutline.org.

VPN vs. Proxy Server

A virtual private network or VPN typically routes all application and all protocols through an encrypted tunnel to a remote server.

A proxy server typically applies only to your browser or other applications specifically configured to use a proxy server.

Outline is a VPN in that it creates a new software interface and routes all traffic over it. However, under the hood, Outline implements Shadowsocks, which if used by itself is a proxy server protected by encryption.

Shadowsocks vs. Outline

Shadowsocks is the basis for Outline. It creates an encrypted tunnel between a Shadowsocks client and a Shadowsocks proxy server. Shadowsocks was created in 2012 by a Chinese programmer named clowwindy.

Since Outline runs on top of Shadowsocks, it can sometimes be quicker and more reliable simply to install Shadowsocks on your server and client instead of Outline.

If you do choose to run Shadowsocks itself, you can find best practices for configuration at https://gfw.report/blog/ss_tutorial/en.

Some helpful links for installing Shadowsocks:

Outline Manager

Prepare Server

Outline Manager runs on your PC but controls your Linux server.

Before beginning, make sure your server has high-numbered ports open for both TCP and UDP. Typically these are ports in the range 1024 through 65535.

Install Docker

Outline Server Manager will attempt to install Docker on your server. You can also install Docker on the server yourself. The instructions to install Docker on Ubuntu are given at https://docs.docker.com/engine/install/ubuntu. For Ubuntu 20.04 they are as follows.

SSH into your server as root.

Windows PowerShell SSH

Get the prerequisites:

1
2
3
apt update && apt upgrade

apt install apt-transport-https ca-certificates curl gnupg lsb-release

Get the Docker signing key:

1
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Add the Docker repository to be signed by the Docker signing key:

1
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null

Install Docker:

1
2
3
apt update

apt install docker-ce docker-ce-cli containerd.io

Test your Docker install:

1
docker run hello-world

The multiline output should include the lines:

1
2
Hello from Docker!
This message shows that your installation appears to be working correctly.

Docker hello-world

Install and Configure Server

Now download to your PC the Outline Manager installer executable from the official website at https://getoutline.org.

Launch Outline Manager. Click OK to say that you agree to the Outline Terms of Service.

You are presented with a panel with four choices:

  • DigitalOcean
  • Google Cloud Platform
  • Amazon Lightsail
  • Set up Outline anywhere

Outline Manager VPS provider selection

The “anywhere” option provides you with a command to run a script on your server:

1
bash -c "$(wget -qO- https://raw.githubusercontent.com/Jigsaw-Code/outline-server/master/src/server_manager/install_scripts/install_server.sh)"

Outline Server Manager install script

At the end of the script, a process named outline-ss-server is listening on randomly generated ports. TCP access is required for the management port, and both TCP and UDP for the client port. The file /opt/outline/persisted-state/outline-ss-server/config.yml contains the parameters for the client(s) in YAML format.

The output from the script will include lines that look like this:

1
2
3
To manage your Outline server, please copy the following line (including curly brackets) into Step 2 of the Outline Manager interface:

{"apiUrl":"https://XX.XX.XX.XX:YYYYY/4pvXtsIOLe3fiecYOEO6bw","certSha256":"8D43979D44757F9ECE87C80F3E8C8A352964BDA8A3F65ABAB4A6F2C044DF0496"}

Outline API URL

You must copy and paste the resultant API URL line into the Outline Manager GUI panel.

Outline API URL in Server Manager

After this, you can generate access keys for yourself and others.

The keys look like this:

1
ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTpPWW9QazFxcmtOTDA@XX.XX.XX.XX:ZZZZZ/?outline=1

Outline Client for Windows

Download the Outline Client from https://getoutline.org. On Windows, this gives you an installer, Outline-Client.exe. Run the installer.

Once the Outline Client is running, paste the Outline access key for the server into the Outline Client.

The Outline Client creates a TAP-Windows Adapter V9 named outline-tap0. You can view this in the Network Connections page of the Network and Sharing Center in the Control Panel. It also appears in the Device Manager in the Network adapter category.

Outline interface in Windows Device Manager

Connect from the client to the server.

Problems with TAP Adapter Not Installing

There are sometimes problems on Windows with the TAP adapter not installing. This issue is documented at https://github.com/Jigsaw-Code/outline-client/issues/761.

The general principle is to uninstall the TAP-Windows Adapter V9 in the Device Manager in the Network adapter category. Also uninstall the Outline Client program in Control Panel. Then attempt to rerun the Outline Client installer.

Unexpected Error

Outline Client sometimes creates problems marked “Unexpected error.”

On Windows, one possible cause is a missing Visual C++ Redistributable. This issue is documented at https://github.com/Jigsaw-Code/outline-client/issues/782. A user in that thread responds that the error was caused by missing DLLs. Running vc_redist.x64.exe and vc_redist.x86.exe solved the problem. The 32-bit version, vc_redist.x86.exe, is needed even on a 64-bit PC. You can find the DLLs from https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads.

Outline Client for Linux

Download the Outline Client from https://getoutline.org. On Linux, the Outline Client is supplied as an AppImage file.

Make the AppImage executable:

1
2
3
cd ~/Downloads

chmod +x Outline-Client.AppImage

Then just run the AppImage directly:

1
./Outline-Client.AppImage

Outline Client creates an interface outline-tun0. It then changes the routing table so that this interface becomes the default route. This is what allows Outline to function as a VPN.

Troubleshooting

Server

On the server side, you can view the logs with:

1
docker logs shadowbox

And see if Outline is listening with:

1
ss -tulpn

For insoluble problems, consider installing Shadowsocks on server and client as a workaround.

Client

A user reports at https://github.com/Jigsaw-Code/outline-client/issues/994 that you can sometimes get more information by running c:\Program Files(x86)\Outline\outline.exe from the command line.

You can also look in Windows Event Viewer (search for it in the Windows search box, or run eventvwr).

It may also be helpful to run Wireshark to see what is happening. Wireshark may be installed from https://www.wireshark.org.

Preparing to capture packets to and from a specific host in Wireshark

If you cannot resolve the issue yourself, you can report it at https://github.com/Jigsaw-Code/outline-client/issues.