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:
- Shadowsocks install script for the server https://github.com/teddysun/shadowsocks_install/tree/master
- Shadowsocks client for Windows https://github.com/shadowsocks/shadowsocks-windows
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
.
Get the prerequisites:
1 | apt update && apt upgrade |
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 | apt update |
Test your Docker install:
1 | docker run hello-world |
The multiline output should include the lines:
1 | Hello from Docker! |
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
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)" |
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 | To manage your Outline server, please copy the following line (including curly brackets) into Step 2 of the Outline Manager interface: |
You must copy and paste the resultant API URL line into the Outline Manager GUI panel.
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.
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 | cd ~/Downloads |
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.
If you cannot resolve the issue yourself, you can report it at https://github.com/Jigsaw-Code/outline-client/issues.