{"id":3379,"date":"2026-01-28T09:01:29","date_gmt":"2026-01-28T13:01:29","guid":{"rendered":"https:\/\/arielantigua.com\/weblog\/?p=3379"},"modified":"2026-01-28T09:01:29","modified_gmt":"2026-01-28T13:01:29","slug":"vyos-all-in-to-improve-the-network-and-keep-my-sanity","status":"publish","type":"post","link":"https:\/\/arielantigua.com\/weblog\/2026\/01\/vyos-all-in-to-improve-the-network-and-keep-my-sanity\/","title":{"rendered":"VyOS all-in, to improve the network and keep my sanity!"},"content":{"rendered":"<p>My network is overcomplicated on purpose. starting with my local network all the way to Linux machines in Miami, New York, Frankfurt, and Netherland working as BGP routers. I\u2019ve been playing with VRF and iprules, looking for a reliable way to separate traffic generated towards my \/24 and traffic that originates machine-to-machine for tunneling. Tunnels, this is where I always find issues, routing tables fighting each other, killing the traffic, and taking the tunnels down.<\/p>\n<p>I know that VyOS has been around for more than 10 years, and I have used it before for my home-network but decide to go with plain Linux because of BIRD, I love that thing!<br \/>\nVyOS comes with FRR, it\u2019s a powerful platform, but I know how to do things in BIRD (v1 or v2) using Pathvector. For my current configuration, the issues come with the traffic separation; VRF makes it so much easier than iprules or other networking tricks.<\/p>\n<p>How did the whole reconfiguration of my network begin?<br \/>\nI read you ask\u2026.<\/p>\n<p><strong>history time!<\/strong><\/p>\n<p>For almost 2 years a <strong>Peplink Balance 30X<\/strong> was the responsible of my Internet access at home, managing 2 WAN and a tunnel to Miami using <strong>SpeedFusion<\/strong>, it was flawlessly, no issues, but it cost money. At first I was ok paying the \u201ctax\u201d for a working solution that you as a user don\u2019t have to be messing around with it to work, but besides the cost, the lack of customization was limiting my tinkering brain from playing more with the router, it does his thing great but you cannot add your stuff like an Opensource Router, and it was <strong>lacking IPv6 support<\/strong>. Before moving to Peplink, an OPNSense was working as a firewall\/loadbalancer, but the LB stuff was a hit and miss for me, with the Peplink it was rock-solid so I moved, them decide that I don\u2019t want to pay for something that I can configure myself, put OPNSense back on an old Sophos XG125, and the pain began.<\/p>\n<p>Here is the list of stuff that only worked when the moon aligned with the sun.<\/p>\n<p><strong>Load Balancing:<\/strong> this was very frustrating to make it work as I want it, I am not an expert on OPNSense, but coming from pfSense (used it for years!!), This doesn\u2019t look like a hard configuration to make. Sometimes the failover\/failback took forever, it wasn\u2019t the biggest issue, and I started to accept that I didn\u2019t know how to make it work.<\/p>\n<p><strong>Wireguard Tunnels:<\/strong> This was the killer. Looks like Wireguard has issues on OPNSense and sometimes it just dies. One thing I wish was working is the option to pin a WG connection on an interface, I know this works on Linux, but it looks like the version ported to *BSD has issues.<\/p>\n<p><strong>Tailscale Support:<\/strong> Another hit and miss, I have to reconfigure the tailnet related stuff two times without any reason, the config just disappears.<\/p>\n<p><strong>GUI:<\/strong> This thing was so slow on my hardware, and I didn\u2019t want to buy a new one. Remember, moving away from Peplink was to save money, no spend it on new hardware.<\/p>\n<p>OPNSense was running for almost three months, but I wasn\u2019t happy with how things were going. Started looking around, didn\u2019t want to use pfSense (just a personal decision).<\/p>\n<p><strong>What I considered:<\/strong><\/p>\n<p><em>Using a Mikrotik<\/em> as an Internet router again. I use MT as my core router in my network and another one as the internal router for public traffic using public addresses advertised by <a href=\"https:\/\/bgp.he.net\/AS207036\"><strong>AS207036<\/strong><\/a> and routed to services hosted at home. I know my way on RouterOS.<\/p>\n<p><em>Using OpenWRT<\/em>, more for the WAN capabilities than firewall\/routing.<\/p>\n<p><em>Using VyOS<\/em>. I didn\u2019t want to learn the syntax to manage this; I was busy with other stuff, but I want to make this network easy to \u201cmanage\u201d.<\/p>\n<p>This is the list of things that I want to have; the platform with the most checkmarks will be selected.<\/p>\n<ol>\n<li>Support for BGP\/OSPF, my home network relies on this to learn and announce prefixes, it\u2019s been this way for more than 5 years, so I\u2019m not moving away from this configuration.<\/li>\n<li>WAN Load Balancing, working from home, this is a must. My primary WAN is CLARO, which is stable as a rock, but you know, even the best has issues.<\/li>\n<li>Native Wireguard support. This is the way I want to connect to a remote VyOS machine in Miami; the same is achieved using Peplink + Speedfusion.<\/li>\n<li>Using the same WG tunnel, I expose internal services to the Internet.<\/li>\n<li>VRF support, putting this on the list makes VyOS almost the default winner. Yes, Mikrotik supports VRF, but I don\u2019t like how RouterOS runs the multiwan logic.<\/li>\n<li>Tailscale support. This one looks to be supported on all three devices that I want to use.<\/li>\n<\/ol>\n<ul>\n<li>I may be missing more stuff but those were the main ones to start evaluating the new router\/firewall to use.<\/li>\n<\/ul>\n<p><strong>Research.<\/strong><br \/>\nThe fastest way to see if my desired configurations are supported on VyOS was just asking ChatGPT for it. I went into ChatGPT and asked for configuration on VyOS with all the stuff I wanted.<\/p>\n<p>Also, looking on Google, of course, this is still one of the more trusted ways to gather information. Sometimes ChatGPT hallucinated too much, and you need to keep telling it that a lot of configuration parameters changed from 1.4 to 1.5 (VRF almost completely changed).<\/p>\n<p>What I find on this search? <strong>Gold!<\/strong><\/p>\n<p><a href=\"https:\/\/lev-0.com\/posts\/\">https:\/\/lev-0.com\/posts\/<\/a><br \/>\nThis site is pure <strong>gold<\/strong>!<br \/>\nThe official documentation is an important resource; never try to configure a platform\/software without reading at least the stuff related to the part interesting to you.<\/p>\n<p><strong>I choose to do a test-run with VyOS.<\/strong><\/p>\n<p>After finding a few blogposts about VyOS and MPLS\/VRF\/Segment Routing. Let\u2019s do a test-run!<\/p>\n<p>A lot of new stuff got added into VyOS since the last time I used it. Also, a lot of stuff was removed, for example, the STABLE version is not available for free anymore.<\/p>\n<p>There is a Rolling release and Stream release. You can read more about it on this link <a href=\"https:\/\/vyos.net\/get\/\">https:\/\/vyos.net\/get\/<\/a><\/p>\n<p>The documentation is awesome! <a href=\"https:\/\/docs.vyos.io\/en\/latest\/\">https:\/\/docs.vyos.io\/en\/latest\/<\/a><\/p>\n<p>I am not going to do a detailed steps by steps paragraph on how to install VyOS, there is a lot of docs\/videos on how to do that.<\/p>\n<p><strong>Installing VyOS at home.<\/strong><\/p>\n<p>This is an easy task, put the image on USB drive, boot the Sophos XG using that USB drive, install image, reboot.<\/p>\n<p>Following my lists of want-to-have:<\/p>\n<ul>\n<li>Configure MultiWan. This part was completed using the official documentation about WAN Load-Balancing: <a href=\"https:\/\/docs.vyos.io\/en\/latest\/configexamples\/wan-load-balancing.html\">https:\/\/docs.vyos.io\/en\/latest\/configexamples\/wan-load-balancing.html<\/a><\/li>\n<li>OSPF and BGP. Again, using the official documentation. <a href=\"https:\/\/docs.vyos.io\/en\/latest\/configuration\/protocols\/ospf.html\">https:\/\/docs.vyos.io\/en\/latest\/configuration\/protocols\/ospf.html<\/a><\/li>\n<li>Create a link to VPS (FLRTR03) for Internet services access. <a href=\"https:\/\/docs.vyos.io\/en\/latest\/configuration\/interfaces\/wireguard.html\">https:\/\/docs.vyos.io\/en\/latest\/configuration\/interfaces\/wireguard.html<\/a><\/li>\n<li>Using a VRF to separate traffic destine to WAN (CLARO and ORBIT) from traffic destine to my large-area-network (aka MESH). <a href=\"https:\/\/docs.vyos.io\/en\/latest\/configuration\/vrf\/index.html\">https:\/\/docs.vyos.io\/en\/latest\/configuration\/vrf\/index.html<\/a><\/li>\n<li>The Tailscale part is still pending, haven\u2019t started configurating that yet because I may be putting that traffic on his own VRF and doing route-leaking, will see.<\/li>\n<li>This one wasn\u2019t part of the initial assessment, I ended connecting almost all the VyOS instances to Zerotier on different networks, I have two networks on ZT, one for CORE traffic and on for EDGE (EDGE is traffic going from my local network to the Mesh). For the Zerotier installation and configuration I used the Level-0 Networking Post: <a href=\"https:\/\/lev-0.com\/2024\/01\/08\/dynamic-multipoint-vpn-with-zerotier-and-vyos\/\">https:\/\/lev-0.com\/2024\/01\/08\/dynamic-multipoint-vpn-with-zerotier-and-vyos\/<\/a><\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1258\" height=\"469\" class=\"wp-image-3380\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-9.png\" alt=\"A screenshot of a computer\n\nAI-generated content may be incorrect.\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-9.png 1258w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-9-300x112.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-9-1024x382.png 1024w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-9-768x286.png 768w\" sizes=\"auto, (max-width: 1258px) 100vw, 1258px\" \/><\/p>\n<ul>\n<li>show interfaces, here the important part is the VRF column, CORE is the VRF for traffic going into the Mesh.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"879\" height=\"148\" class=\"wp-image-3381\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-black-background-with-white-text-ai-generated-c-1.png\" alt=\"A black background with white text\n\nAI-generated content may be incorrect.\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-black-background-with-white-text-ai-generated-c-1.png 879w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-black-background-with-white-text-ai-generated-c-1-300x51.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-black-background-with-white-text-ai-generated-c-1-768x129.png 768w\" sizes=\"auto, (max-width: 879px) 100vw, 879px\" \/><\/p>\n<ul>\n<li>Here is the VRF showing only the interfaces attached to it.<\/li>\n<li>dum1 \u2013 loopback interface for OSPF and BGP.<\/li>\n<li>eth7 \u2013 point to point link for Mikrotik RB3011, from here I can announce local services to the internet using Public Addresses under <a href=\"https:\/\/bgp.he.net\/AS207036\">AS207036<\/a><\/li>\n<li>eth10 \u2013 renamed ZT interface, this is a connection to FLRTR03 and FLRTR04 both in Florida.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1167\" height=\"362\" class=\"wp-image-3382\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-10.png\" alt=\"A screenshot of a computer\n\nAI-generated content may be incorrect.\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-10.png 1167w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-10-300x93.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-10-1024x318.png 1024w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-10-768x238.png 768w\" sizes=\"auto, (max-width: 1167px) 100vw, 1167px\" \/><\/p>\n<ul>\n<li>BGP routing table on VRF CORE, the first one is the eBGP session with the RB3011, and the others are iBGP sessions to Route Reflectors, one in FL(<strong>FLRTR02<\/strong>) and another in NY(<strong>NYRTR02<\/strong>). <a href=\"https:\/\/bgp.he.net\/AS28045\">AS28045<\/a> is internally used by the Mesh (VRF CORE).<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"663\" height=\"393\" class=\"wp-image-3383\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-computer-screen-with-white-text-ai-generated-co-3.png\" alt=\"A computer screen with white text\n\nAI-generated content may be incorrect.\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-computer-screen-with-white-text-ai-generated-co-3.png 663w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-computer-screen-with-white-text-ai-generated-co-3-300x178.png 300w\" sizes=\"auto, (max-width: 663px) 100vw, 663px\" \/><\/p>\n<ul>\n<li>We don\u2019t have a nice UI for the WAN Load-Balancer status, the important part is that it works as expected!<\/li>\n<\/ul>\n<p>The Home side of the reinstallation\/reconfiguration is completed, I have internet and dual-wan-loadbalancing. Let\u2019s move to the remote VPS for installation and configuration. As soon as the wan-loadbalacing and the tunnels were working, I stopped right there and didn\u2019t test OpenWRT or even try to replicate the configuration on Mikrotik.<\/p>\n<p>One thing to notice here is that the resource consumption on the same device is abysmal. With OPNsense the RAM was always more than 50%, the following image is from LibeNMS.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1051\" height=\"937\" class=\"wp-image-3384\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-graph-of-a-graph-ai-generated-content-may-be-in.png\" alt=\"A graph of a graph\n\nAI-generated content may be incorrect.\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-graph-of-a-graph-ai-generated-content-may-be-in.png 1051w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-graph-of-a-graph-ai-generated-content-may-be-in-300x267.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-graph-of-a-graph-ai-generated-content-may-be-in-1024x913.png 1024w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-graph-of-a-graph-ai-generated-content-may-be-in-768x685.png 768w\" sizes=\"auto, (max-width: 1051px) 100vw, 1051px\" \/><\/p>\n<p>You can guess when the machine was moved to VyOS.<\/p>\n<p><strong>VPS at BuyVM.<\/strong><\/p>\n<p>The steps detailed here are based on the configuration of a VPS hosted at <a href=\"https:\/\/buyvm.net\/\">BuyVM<\/a>. The initial setup is done using the VPS Management Console offered by the provider.<\/p>\n<p>First, the installation media needs to be available to us at the <strong>Stallion portal<\/strong> (this is the name of the management platform), the platform provides an easy way to do that, you just need the URL of the ISO image so the platform can download the media and make it available to be attached to the VPS. Once the image is attached, the process is the same as installing locally on a sever\/vm\/pc, follow the steps after running install image.<\/p>\n<p>You now have a VyOS router with 1 virtual NIC, yes, just 1. And you will ask me, how can this be useful with only one NIC, and my response will be \u201c<strong>Tunnels, tunnels everywhere\u201d <\/strong>with that <em>meme of Toy Story<\/em> on my head.<\/p>\n<p>I will try to describe all the configurations that I put on this VyOS to make it route traffic to and from my home-network.<\/p>\n<p>Like with the VyOS at home, the first thing I installed was the Zerotier container. I did the rename process for the ZT interface to appear as an Ethernet interface, and joined it to the virtual switch that belongs to this part of the network. This virtual switch is called CORE, like the VRF.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1326\" height=\"343\" class=\"wp-image-3385\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-11.png\" alt=\"A screenshot of a computer\n\nAI-generated content may be incorrect.\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-11.png 1326w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-11-300x78.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-11-1024x265.png 1024w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-11-768x199.png 768w\" sizes=\"auto, (max-width: 1326px) 100vw, 1326px\" \/><\/p>\n<ul>\n<li>Here we have eth0, which is the uplink to the internet provided by BuyVM. <strong>Don\u2019t pay attention to eth1<\/strong>, is an interface that is supposed to let me reach other VPS in the same region but looks like it has issues with OSPF.<\/li>\n<li>eth10, the same as the VyOS called <strong>firewall<\/strong>, this is a virtual connection to Zerotier Virtual Switch and is part of VRF CORE.<\/li>\n<li>tun100 is a GRE Tunnel to FLRTR02, as the description says.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1158\" height=\"352\" class=\"wp-image-3386\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-program-ai-generated-c-2.png\" alt=\"A screenshot of a computer program\n\nAI-generated content may be incorrect.\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-program-ai-generated-c-2.png 1158w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-program-ai-generated-c-2-300x91.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-program-ai-generated-c-2-1024x311.png 1024w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-program-ai-generated-c-2-768x233.png 768w\" sizes=\"auto, (max-width: 1158px) 100vw, 1158px\" \/><\/p>\n<ul>\n<li>the BGP sessions on VRF CORE, one difference here is that only <strong>AS28045<\/strong> will be present, because this VyOS works as upstream to my local-network and nothing more. Those BGP sessions are peering with the Route Reflectors (<strong>FLRTR02<\/strong> and <strong>NYRTR02<\/strong>).<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1022\" height=\"951\" class=\"wp-image-3387\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-12.png\" alt=\"A screenshot of a computer\n\nAI-generated content may be incorrect.\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-12.png 1022w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-12-300x279.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-12-768x715.png 768w\" sizes=\"auto, (max-width: 1022px) 100vw, 1022px\" \/><\/p>\n<ul>\n<li>part of the routing table on VRF CORE.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"775\" height=\"252\" class=\"wp-image-3388\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-computer-screen-with-white-text-ai-generated-co-4.png\" alt=\"A computer screen with white text\n\nAI-generated content may be incorrect.\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-computer-screen-with-white-text-ai-generated-co-4.png 775w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-computer-screen-with-white-text-ai-generated-co-4-300x98.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-computer-screen-with-white-text-ai-generated-co-4-768x250.png 768w\" sizes=\"auto, (max-width: 775px) 100vw, 775px\" \/><\/p>\n<ul>\n<li>172.22.35.0\/26 is a subnet on my Home Network.<\/li>\n<\/ul>\n<p>Its basically the same configuration for all VPS except for:<br \/>\n<strong>FLRTR01, NYRTR01, NLRTR01(pending install) and DRRTR01(pending install).<\/strong><\/p>\n<p>Let\u2019s unpack this so it&#8217;s easy to understand. In networking, the best way to understand routing is with a network diagram.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1196\" height=\"1253\" class=\"wp-image-3389\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-cloud-computing-device-ai-gener-1.png\" alt=\"A screenshot of a cloud computing device\n\nAI-generated content may be incorrect.\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-cloud-computing-device-ai-gener-1.png 1196w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-cloud-computing-device-ai-gener-1-286x300.png 286w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-cloud-computing-device-ai-gener-1-977x1024.png 977w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-cloud-computing-device-ai-gener-1-768x805.png 768w\" sizes=\"auto, (max-width: 1196px) 100vw, 1196px\" \/><\/p>\n<p>I feel bad for my poor network-diagram-jutsu.<\/p>\n<p>Here I will try to describe how the connections are going out from my network to the Mesh.<\/p>\n<p><strong>Firewall<\/strong> is connected to <strong>FLRTR03<\/strong> and <strong>FLRTR04<\/strong> using Zerotier. They all have a VRF named CORE with eth10 added to it. OSPF is running on all the VyOS instances and all the Mikrotik CHR (<strong>FLRTR02<\/strong> and <strong>NYRT02<\/strong> are CHR).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"933\" height=\"417\" class=\"wp-image-3390\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screen-shot-of-a-computer-program-ai-generated-1.png\" alt=\"A screen shot of a computer program\n\nAI-generated content may be incorrect.\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screen-shot-of-a-computer-program-ai-generated-1.png 933w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screen-shot-of-a-computer-program-ai-generated-1-300x134.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screen-shot-of-a-computer-program-ai-generated-1-768x343.png 768w\" sizes=\"auto, (max-width: 933px) 100vw, 933px\" \/><\/p>\n<ul>\n<li>show ip route vrf CORE ospf<\/li>\n<\/ul>\n<p>Only importing and exporting \/32 \/31 and \/30 into the OSPF routing table, this is for neighbor reachability for BGP.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"178\" class=\"wp-image-3391\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-black-screen-with-white-text-ai-generated-conte-1.png\" alt=\"A black screen with white text\n\nAI-generated content may be incorrect.\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-black-screen-with-white-text-ai-generated-conte-1.png 750w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-black-screen-with-white-text-ai-generated-conte-1-300x71.png 300w\" sizes=\"auto, (max-width: 750px) 100vw, 750px\" \/><\/p>\n<ul>\n<li>one of the Route Reflectors<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1026\" height=\"416\" class=\"wp-image-3392\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-13.png\" alt=\"A screenshot of a computer\n\nAI-generated content may be incorrect.\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-13.png 1026w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-13-300x122.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-13-1024x415.png 1024w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-13-768x311.png 768w\" sizes=\"auto, (max-width: 1026px) 100vw, 1026px\" \/><\/p>\n<ul>\n<li>show ip bgp vrf CORE<\/li>\n<li>here is the BGP routing table, or part of it to be exact.<\/li>\n<\/ul>\n<p>Let\u2019s go a router up in the network.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"950\" height=\"458\" class=\"wp-image-3393\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-14.png\" alt=\"A screenshot of a computer\n\nAI-generated content may be incorrect.\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-14.png 950w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-14-300x145.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-14-768x370.png 768w\" sizes=\"auto, (max-width: 950px) 100vw, 950px\" \/><\/p>\n<ul>\n<li>This is the OSPF routing table on <strong>FLRTR03<\/strong> that is connected directly to FIRWALL using Zerotier.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"705\" height=\"169\" class=\"wp-image-3394\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-15.png\" alt=\"A screenshot of a computer\n\nAI-generated content may be incorrect.\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-15.png 705w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-15-300x72.png 300w\" sizes=\"auto, (max-width: 705px) 100vw, 705px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1054\" height=\"693\" class=\"wp-image-3395\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-16.png\" alt=\"A screenshot of a computer\n\nAI-generated content may be incorrect.\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-16.png 1054w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-16-300x197.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-16-1024x673.png 1024w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-16-768x505.png 768w\" sizes=\"auto, (max-width: 1054px) 100vw, 1054px\" \/><\/p>\n<ul>\n<li>Here, the network starts to get bigger, with more routes and more links.<\/li>\n<\/ul>\n<p>Everything is the same for <strong>FLRTR04<\/strong>.<\/p>\n<p>Things got different for <strong>FLRTR01<\/strong>. This VyOS has VRF CORE and has configurations on Default (sometimes called VRF EDGE).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1307\" height=\"368\" class=\"wp-image-3396\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-17.png\" alt=\"A screenshot of a computer\n\nAI-generated content may be incorrect.\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-17.png 1307w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-17-300x84.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-17-1024x288.png 1024w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-17-768x216.png 768w\" sizes=\"auto, (max-width: 1307px) 100vw, 1307px\" \/><\/p>\n<ul>\n<li><strong>AS207036<\/strong> is running on this instance of BGP for upstream connectivity with BGP Providers for transit and peering.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"935\" height=\"327\" class=\"wp-image-3397\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-computer-screen-with-white-text-ai-generated-co-5.png\" alt=\"A computer screen with white text\n\nAI-generated content may be incorrect.\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-computer-screen-with-white-text-ai-generated-co-5.png 935w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-computer-screen-with-white-text-ai-generated-co-5-300x105.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-computer-screen-with-white-text-ai-generated-co-5-768x269.png 768w\" sizes=\"auto, (max-width: 935px) 100vw, 935px\" \/><\/p>\n<ul>\n<li>AS28045 is also here; this is how traffic is being leaked from CORE to EDGE.<\/li>\n<\/ul>\n<p>Two BGP instances are running<span style=\"box-sizing: border-box; margin: 0px; padding: 0px;\">\u00a0and peering with each other using a pair of\u00a0<strong>veth (Virtual Ethernet)<\/strong>\u00a0interfaces<strong>,<\/strong> one in the default VRF\u00a0<\/span>and the other in the CORE VRF. This was the easiest way I found to \u201cleak\u201d subnets from one VRF to another.<\/p>\n<p>More information about Virtual-Ethernet: <a href=\"https:\/\/docs.vyos.io\/en\/latest\/configuration\/interfaces\/virtual-ethernet.html\">https:\/\/docs.vyos.io\/en\/latest\/configuration\/interfaces\/virtual-ethernet.html<\/a><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1348\" height=\"382\" class=\"wp-image-3398\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screen-shot-of-a-computer-ai-generated-content-1.png\" alt=\"A screen shot of a computer\n\nAI-generated content may be incorrect.\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screen-shot-of-a-computer-ai-generated-content-1.png 1348w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screen-shot-of-a-computer-ai-generated-content-1-300x85.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screen-shot-of-a-computer-ai-generated-content-1-1024x290.png 1024w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screen-shot-of-a-computer-ai-generated-content-1-768x218.png 768w\" sizes=\"auto, (max-width: 1348px) 100vw, 1348px\" \/><\/p>\n<p>As mentioned, the interesting part is the veth pair. veth1 is in default, and veth2 is attached to CORE. Is like peering between two different routers. I like how I can apply route-maps to this!<\/p>\n<p>Here is a screenshot showing how traffic is coming from the\u00a0 Internet into my home-network.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1085\" height=\"492\" class=\"wp-image-3399\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-18.png\" alt=\"A screenshot of a computer\n\nAI-generated content may be incorrect.\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-18.png 1085w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-18-300x136.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-18-1024x464.png 1024w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-ai-generated-content-m-18-768x348.png 768w\" sizes=\"auto, (max-width: 1085px) 100vw, 1085px\" \/><\/p>\n<p>I think I will be writing a second part about this topic, a more technical one with the commands for creating the VRF and other configurations.<\/p>\n<p>The conclusion is that now my large-area-network is cleaner than before, was depending on scripts at boot time to create IP rules and Routing tables, sometimes new networks weren\u2019t in the iPrules and traffic didn\u2019t work. The ugly stuff was when I didn\u2019t even remember what I configured to make stuff works. Now at least it is explained in the VyOS Docs. \u263a<\/p>\n<p>I will miss working with BIRD and Pathvector !<\/p>\n<p><strong>Still need to reinstall DE and NL\u2026.<\/strong><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"910\" height=\"331\" class=\"wp-image-3400\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-program-ai-generated-c-3.png\" alt=\"A screenshot of a computer program\n\nAI-generated content may be incorrect.\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-program-ai-generated-c-3.png 910w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-program-ai-generated-c-3-300x109.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2026\/01\/a-screenshot-of-a-computer-program-ai-generated-c-3-768x279.png 768w\" sizes=\"auto, (max-width: 910px) 100vw, 910px\" \/><\/p>\n<ul>\n<li>This is all the way to the Netherlands. <strong>FreePBX<\/strong> connection for old-style calling. <strong>The Red Line, <\/strong>as <a href=\"https:\/\/kr1ps.com\/\">Krsna<\/a> (<strong>a buddy of mine<\/strong>) calls it.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>My network is overcomplicated on purpose. starting with my local network all the way to Linux machines in Miami, New York, Frankfurt, and Netherland working as BGP routers. I\u2019ve been playing with VRF and iprules, looking for a reliable way to separate traffic generated towards my \/24 and traffic that originates machine-to-machine for tunneling. Tunnels, [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[123,7,34],"tags":[142,167,163],"class_list":["post-3379","post","type-post","status-publish","format-standard","hentry","category-bgp","category-general","category-networking","tag-bgp","tag-vrf","tag-vyos"],"_links":{"self":[{"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/posts\/3379","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/comments?post=3379"}],"version-history":[{"count":1,"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/posts\/3379\/revisions"}],"predecessor-version":[{"id":3401,"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/posts\/3379\/revisions\/3401"}],"wp:attachment":[{"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/media?parent=3379"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/categories?post=3379"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/tags?post=3379"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}