# Vyos
by Seth Kenlon

Way back in 2005, a company called Vyatta was founded by Allan Leinwand.
It offered the first commercially supported, open source router and firewall solution.
Named after the ancient Sanskrit for "open", the company's goal of bringing open source networking products to the market was so successful that it was purchased by competitor Brocade.
This effectively killed Vyatta, but because Vyatta's product was open source, it didn't stop it.
As it turns out, the software defined networking capabilities of Vyatta have been continued and developed as [VyOS](http://vyos.io).

The VyOS distribution is based on Debian Linux, with source code available from a [Git repository](https://github.com/vyos/), and a rolling release ISO at [vyos.io/rolling-release](https://www.vyos.io/rolling-release/).
For mission-critical application, there are [long term support releases and support contracts](https://vyos.io/subscriptions/).

## Building a network

Networking has changed since 2005, and thanks to the VyOS project, so has the software that drives it.
After learning that VyOS was continuing the work of Vyatta, I downloaded the ISO to try it out.
The installation process was arguably easier than the normal Debian install, which is on its own a simple task.
Booting into the installed OS was refreshing: VyOS doesn't boot into a graphical interface.
It boots to a text console, so it's just you and a bunch of configuration files, just like you might expect from a serious router.

The default install of VyOS provides no default configuration.
It's entirely up to you to build the network you want to run.
Depending on your point of view, that's either refreshing or frustrating, but it gives you an idea of the intended audience: VyOS is built for network engineers who've mapped out their desired topography and are capable of creating it with some subnet calculations and text definitions.

## The VyOS configure command

That said, VyOS isn't just a re-branded Debian release.
One of its key features is its ``configure`` command, an interactive tool for defining network definitions that get applied only after you commit them.
In addition to feeling familiar to users accustomed to IOS and similar toolchains, this allows you to configure your network even as the router continues its normal operation.
Nothing is final until you type ``commit``.

Once you've tested a committed network change, you can use the ``save`` command to permanently store your configuration files for backup or for migration to other VyOS machines.

You enter configuration mode with the ``configure`` command.
There are too many possible network configurations to go over ``configure`` or basic networking tasks here, but the syntax is generally intuitive and predictable.
For instance, to enable SSH management over port 22212 of your router:

```
# set service ssh port '22212'
```

To set network interface card (NIC) ``eth1`` to an internal IP address, and to create a description identifying it as the default gateway:

```
# set interfaces ethernet eth1 address '10.1.0.1/24'
# set interfaces ethernet eth1 description 'INSIDE'
```

To set the public IP of NIC ``eth0`` and describe it as the world-facing interface:

```
# set interfaces ethernet eth0 address dhcp
# set interfaces ethernet eth0 description 'OUTSIDE'
```

To activate network address translation (NAT), it's the same structure:

```
set nat source rule 100 outbound-interface 'eth0'
set nat source rule 100 source address '10.1.0.0/24'
set nat source rule 100 translation address masquerade
```

Assuming that's the only tasks you have for now, commit and save:

```
# commit
# save && exit
Saving configuration to '/config/config.boot'...
Done
$
```

That's likely not all you would need to do in real life, but it gives you an idea of the direct simplicity that VyOS provides.
You don't have to deal with "reverse engineering" confusing graphical interfaces, nor scrubbing through verbose configuration files for a poorly named key.
You have a unified interface for every task, whether it's setting up a firewall, implementing DHCP, DNS, quality of service, VPN gateways, IPv6, or whatever else.

## Professional networking appliance

VyOS might not be a beginner-level router distribution, but it's a great tool to have on hand even if you're just starting out.
There's no better way to learn the basics of networking than to have an open source router available for manipulation and testing.
It's the 21st century, after all; you can set up a computer lab consisting of virtual clients networked to one another through a virtual VyOS instance entirely within [GNOME Boxes](https://opensource.com/article/19/5/getting-started-gnome-boxes-virtualization) for $0.
You can learn advanced networking concepts and solutions armed with little more than a Linux computer and the excellent [VyOS documentation](https://vyos.readthedocs.io/en/latest/index.html) (a copy of []() would probably be helpful, too).

If you're already a networking professional, then take a look at VyOS.
You'll find its philosophy on configuration refreshing, and its ``configure`` tool efficient.