Wireguard is a modern and fast VPN software that supports IPv4 and IPv6 connections. It is faster and simpler compared to other VPN software like IPSec and OpenVPN. It is cross-platform and can be installed on all major operating systems including Linux, macOS, Windows, BSD, and Android. It is a point-to-point VPN server and you can easily deploy it on small devices to high-end servers.
In this post, we will show you how to install Wireguard VPN server on Arch Linux.
Step 1 – Configure Repository
By default, the default repository is outdated in Arch Linux, so you will need to modify the default mirror list. You can do it by editing the mirrorlist configuration file:
nano /etc/pacman.d/mirrorlist
Remove all lines and add the following lines:
## Score: 0.7, United States Server = http://mirror.us.leaseweb.net/archlinux/$repo/os/$arch ## Score: 0.8, United States Server = http://lug.mtu.edu/archlinux/$repo/os/$arch Server = http://mirror.nl.leaseweb.net/archlinux/$repo/os/$arch ## Score: 0.9, United Kingdom Server = http://mirror.bytemark.co.uk/archlinux/$repo/os/$arch ## Score: 1.5, United Kingdom Server = http://mirrors.manchester.m247.com/arch-linux/$repo/os/$arch Server = http://archlinux.dcc.fc.up.pt/$repo/os/$arch ## Score: 6.6, United States Server = http://mirror.cs.pitt.edu/archlinux/$repo/os/$arch ## Score: 6.7, United States Server = http://mirrors.acm.wpi.edu/archlinux/$repo/os/$arch ## Score: 6.8, United States Server = http://ftp.osuosl.org/pub/archlinux/$repo/os/$arch ## Score: 7.1, India Server = http://mirror.cse.iitk.ac.in/archlinux/$repo/os/$arch ## Score: 10.1, United States Server = http://mirrors.xmission.com/archlinux/$repo/os/$arch
Save and close the file, then update all the package indexes with the following command:
pacman -Syu
Step 2 – Install Wireguard VPN
Wireguard provides a script that allows you to install it on your system easily.
First, download the Wireguard installation script using the following command:
pacman -S curl curl -O https://raw.githubusercontent.com/angristan/wireguard-install/master/wireguard-install.sh
Next, set executable permissions on the downloaded script:
chmod +x wireguard-install.sh
Next, run the installation script using the following command:
./wireguard-install.sh
Answer all the questions as shown below:
Welcome to the WireGuard installer! The git repository is available at: https://github.com/angristan/wireguard-install I need to ask you a few questions before starting the setup. You can leave the default options and just press enter if you are ok with them. IPv4 or IPv6 public address: server-ip Public interface: ens3 WireGuard interface name: wg0 Server's WireGuard IPv4: 10.66.66.1 Server's WireGuard IPv6: fd42:42:42::1 Server's WireGuard port [1-65535]: 54781 First DNS resolver to use for the clients: 94.140.14.14 Second DNS resolver to use for the clients (optional): 94.140.15.15 Okay, that was all I needed. We are ready to setup your WireGuard server now. You will be able to generate a client at the end of the installation. Tell me a name for the client. The name must consist of alphanumeric character. It may also include an underscore or a dash and can't exceed 15 chars. Client name: vpn_client Client's WireGuard IPv4: 10.66.66.2 Client's WireGuard IPv6: fd42:42:42::2 Unable to retrieve current interface configuration: Protocol not supported Here is your client config file as a QR Code: It is also available in /root/wg0-client-vpn_client.conf If you want to add more clients, you simply need to run this script another time! WARNING: WireGuard does not seem to be running. You can check if WireGuard is running with: systemctl status wg-quick@wg0 If you get something like "Cannot find device wg0", please reboot!
Once the installation is complete, restart your system to apply the changes:
reboot
Step 3 – Verify Wireguard VPN
Next, check the status of Wireguard using the following command:
systemctl status wg-quick@wg0
You will get the following output:
● [email protected] - WireGuard via wg-quick(8) for wg0 Loaded: loaded (/usr/lib/systemd/system/[email protected]; enabled; preset: disabled) Active: active (exited) since Fri 2022-10-28 11:04:25 UTC; 3min 13s ago Docs: man:wg-quick(8) man:wg(8) https://www.wireguard.com/ https://www.wireguard.com/quickstart/ https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8 https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8 Process: 249 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=0/SUCCESS) Main PID: 249 (code=exited, status=0/SUCCESS) CPU: 73ms Oct 28 11:04:24 archlinux systemd[1]: Starting WireGuard via wg-quick(8) for wg0... Oct 28 11:04:24 archlinux wg-quick[249]: [#] ip link add wg0 type wireguard Oct 28 11:04:25 archlinux wg-quick[249]: [#] wg setconf wg0 /dev/fd/63 Oct 28 11:04:25 archlinux wg-quick[249]: [#] ip -4 address add 10.66.66.1/24 dev wg0 Oct 28 11:04:25 archlinux wg-quick[249]: [#] ip -6 address add fd42:42:42::1/64 dev wg0 Oct 28 11:04:25 archlinux wg-quick[249]: [#] ip link set mtu 1420 up dev wg0 Oct 28 11:04:25 archlinux wg-quick[249]: [#] iptables -A FORWARD -i ens3 -o wg0 -j ACCEPT; iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t > Oct 28 11:04:25 archlinux systemd[1]: Finished WireGuard via wg-quick(8) for wg0.
Wireguard VPN creates a new network interface named wg0 on your system. You can check it with the following command:
ip a
You will get the following output:
4: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000 link/none inet 10.66.66.1/24 scope global wg0 valid_lft forever preferred_lft forever inet6 fd42:42:42::1/64 scope global valid_lft forever preferred_lft forever
Wireguard also generates a client configuration file at /root/wg0-client-vpn_client.conf.
Step 4 – Configure Wireguard Client
Next, you will need to install the Wireguard client package on the client machine. You can install it using the following command:
pacman -S wireguard-tools
After the installation, copy the client configuration file from the Wireguard server machine to the client machine:
scp root@server-ip:/root/wg0-client-vpn_client.conf /etc/wireguard/wg0.conf
Next, start the Wireguard client with the following command:
systemctl start wg-quick@wg0
Step 5 – Verify Wireguard VPN Connection
Next, go back to your server machine and run the following command to check the client-server connection:
wg
You should see the following output:
interface: wg0 public key: v2N2x3+NE2ZhyMmrJToNchobiFQzrRmDN7xbjt06Ziw= private key: (hidden) listening port: 54781 peer: OydUu+4sdDV2R+H7Ng1l5J7PTIq/cD/GbMdZ3kwNjig= preshared key: (hidden) endpoint: 209.23.10.169:35718 allowed ips: 10.66.66.2/32, fd42:42:42::2/128 latest handshake: 1 minute, 53 seconds ago transfer: 148 B received, 380 B sent
Conclusion
In this post, we explained how to install the Wireguard VPN server on Arch Linux. We also installed and configured the Wireguard client to connect to the server machine. You can now use the Wireguard VPN server to hide your identity. Try Wireguard VPN on dedicated hosts from Atlantic.Net!