In this document we're setting up an internal OpenVPN site-to-site server on VyOS. The install will have one Ethernet interface only and will be virtualized.
Note: only 1 server will need a port opened/forwarded on the firewall for this to work, though opening ports on either end works as well.
Note: if doing this on the main gateway for a network no additional routes beyond what's listed below are needed. If you are doing this as a stand alone OpenVPN server behind the main gateway then static routes will need to be added to the default gateway pointing to the IP of the OpenVPN server as the next hop address for any subnets on the other side of the OpenVPN tunnel.
https://docs.vyos.io/en/equuleus/installation/install.html
vyos | vyos
install image
and accept all defaults, set your password
Set IP and Enable SSH
configure set interfaces ethernet eth0 address 10.221.24.20/24 set service ssh port 22 commit save
set system login user myvyosuser authentication plaintext-password mysecurepassword
Log out then back in using new account and delete the default account
delete system login user vyos
Set timezone
set system time-zone America/Los_Angeles commit sudo su set date mmddhhmmyyyy exit
set system host-name wpnsec01 set system domain-name yourdomain.com set system time-zone US/Pacific set system name-server 1.1.1.1 set system name-server 9.9.9.9 set system ntp server pool.ntp.org set system login banner pre-login "\n\n\n\tUNAUTHORIZED USE OF THIS SYSTEM\n\tIS STRICTLY PROHIBITED\n\n\t Please contact "support@domain.com" to gain\n\taccess to this equipment if you need authorization.\n\n\n"
set interfaces ethernet eth0 description "Management LAN"
set protocols static route 0.0.0.0/0 next-hop 10.221.24.1
sudo su generate openvpn key /config/auth/vtun0-secret chmod 600 /config/auth/vtun0-secret exit
or if that doesn't work
sudo su openvpn --genkey secret /config/auth/vtun0-secret generate pki openvpn shared-secret file /config/auth/vtun0-secret chmod 600 /config/auth/vtun0-secret exit
Copy that file to the same location on your remote OpenVPN server, put a post-it or reminder somewhere…
set interfaces openvpn vtun0 mode site-to-site set interfaces openvpn vtun0 local-port 1194 set interfaces openvpn vtun0 remote-port 1194 set interfaces openvpn vtun0 openvpn-option '--tun-mtu 1436' set interfaces openvpn vtun0 remote-host remote-openvpn-server.com set interfaces openvpn vtun0 local-address 172.21.200.1 set interfaces openvpn vtun0 remote-address 172.21.200.2 set interfaces openvpn vtun0 shared-secret-key /config/auth/vtun0-secret set interfaces openvpn vtun0 openvpn-option "--float" set interfaces openvpn vtun0 openvpn-option "--ping 10" set interfaces openvpn vtun0 openvpn-option "--ping-restart 20" set interfaces openvpn vtun0 openvpn-option "--ping-timer-rem" set interfaces openvpn vtun0 openvpn-option "--persist-tun" set interfaces openvpn vtun0 openvpn-option "--persist-key" set interfaces openvpn vtun0 openvpn-option "--user nobody" set interfaces openvpn vtun0 openvpn-option "--group nogroup" set interfaces openvpn vtun0 encryption cipher aes256 set interfaces openvpn vtun0 hash sha512
set protocols static interface-route 10.202.0.0/16 next-hop-interface vtun0
set protocols ospf parameters router-id 10.221.24.20 ### Set your router id, normally the IPV4 address of interface the is going to advertised routes set protocols ospf passive-interface default ### Set all interfaces to passive by default so they don't broadcast OSPF advertisements ###set protocols ospf redistribute connected metric-type 2 ### Redistribute the connected interface subnets in OSPF advertisements set protocols ospf area 0.0.0.0 area-type normal ### Set the OSPF area type set protocols ospf area 0.0.0.0 authentication md5 ### Set the authentication type set protocols ospf area 0.0.0.0 network 10.201.0.0/16 ### Set network that will be advertised by area 0.0.0.0 set protocols ospf passive-interface-exclude vtun0 ### Allow OSPF advertisments on this specific interface set interfaces openvpn vtun0 ip ospf network point-to-point set interfaces openvpn vtun0 ip ospf cost 10 set interfaces openvpn vtun0 ip ospf dead-interval 40 set interfaces openvpn vtun0 ip ospf hello-interval 10 set interfaces openvpn vtun0 ip ospf priority 1 set interfaces openvpn vtun0 ip ospf retransmit-interval 5 set interfaces openvpn vtun0 ip ospf transmit-delay 1 set interfaces openvpn vtun0 ip ospf authentication md5 key-id 1 md5-key somekoolPassword
set zone-policy zone LOCAL description "this is VyOS or local device" set zone-policy zone LOCAL default-action drop set zone-policy zone LOCAL local-zone set zone-policy zone MGMT_LAN description "Management LAN" set zone-policy zone MGMT_LAN default-action drop set zone-policy zone MGMT_LAN interface eth0 set zone-policy zone VTUN0 description "site 49 to site 48 OpenVPN VPN" set zone-policy zone VTUN0 default-action drop set zone-policy zone VTUN0 interface vtun0
Note: don't commit until you've put in the rules that still allow you access to the LOCAL device and for the LOCAL device to reply back. Also, in this example all traffic is generally allowed, to be more restrictive remove rule 80 from each zone rule and add specific rules.
set firewall name MGMT_LAN_to_LOCAL description "allow traffic from MGMT_LAN to LOCAL zone" set firewall name MGMT_LAN_to_LOCAL enable-default-log set firewall name MGMT_LAN_to_LOCAL rule 80 description "Allow All" set firewall name MGMT_LAN_to_LOCAL rule 80 action accept set firewall name MGMT_LAN_to_LOCAL rule 80 log disable set firewall name MGMT_LAN_to_LOCAL rule 200 description "Drop invalid" set firewall name MGMT_LAN_to_LOCAL rule 200 action drop set firewall name MGMT_LAN_to_LOCAL rule 200 state invalid enable set firewall name MGMT_LAN_to_LOCAL rule 200 log disable set zone-policy zone LOCAL from MGMT_LAN firewall name MGMT_LAN_to_LOCAL
set firewall name LOCAL_to_MGMT_LAN description "filter traffic from LOCAL to MGMT_LAN zone" set firewall name LOCAL_to_MGMT_LAN enable-default-log set firewall name LOCAL_to_MGMT_LAN rule 80 description "Allow All" set firewall name LOCAL_to_MGMT_LAN rule 80 action accept set firewall name LOCAL_to_MGMT_LAN rule 80 log disable set firewall name LOCAL_to_MGMT_LAN rule 100 description "Allow established/related" set firewall name LOCAL_to_MGMT_LAN rule 100 action accept set firewall name LOCAL_to_MGMT_LAN rule 100 state established enable set firewall name LOCAL_to_MGMT_LAN rule 100 state related enable set firewall name LOCAL_to_MGMT_LAN rule 100 log disable set firewall name LOCAL_to_MGMT_LAN rule 200 description "Drop invalid" set firewall name LOCAL_to_MGMT_LAN rule 200 action drop set firewall name LOCAL_to_MGMT_LAN rule 200 state invalid enable set firewall name LOCAL_to_MGMT_LAN rule 200 log disable set firewall name LOCAL_to_MGMT_LAN rule 1060 description "Allow OSPF" set firewall name LOCAL_to_MGMT_LAN rule 1060 action accept set firewall name LOCAL_to_MGMT_LAN rule 1060 protocol ospf set firewall name LOCAL_to_MGMT_LAN rule 1060 state new enable set firewall name LOCAL_to_MGMT_LAN rule 1060 log disable set zone-policy zone MGMT_LAN from LOCAL firewall name LOCAL_to_MGMT_LAN
set firewall name LOCAL_to_VTUN0 description "Allow all traffic from LOCAL to VTUN0 zone" set firewall name LOCAL_to_VTUN0 enable-default-log set firewall name LOCAL_to_VTUN0 rule 80 description "Allow All" set firewall name LOCAL_to_VTUN0 rule 80 action accept set firewall name LOCAL_to_VTUN0 rule 80 log disable set firewall name LOCAL_to_VTUN0 rule 200 description "Drop invalid" set firewall name LOCAL_to_VTUN0 rule 200 action drop set firewall name LOCAL_to_VTUN0 rule 200 state invalid enable set firewall name LOCAL_to_VTUN0 rule 200 log disable set zone-policy zone VTUN0 from LOCAL firewall name LOCAL_to_VTUN0
set firewall name VTUN0_to_LOCAL description "filter traffic from VTUN0 to LOCAL zone" set firewall name VTUN0_to_LOCAL enable-default-log set firewall name VTUN0_to_LOCAL rule 100 description "Allow established/related" set firewall name VTUN0_to_LOCAL rule 100 action accept set firewall name VTUN0_to_LOCAL rule 100 state established enable set firewall name VTUN0_to_LOCAL rule 100 state related enable set firewall name VTUN0_to_LOCAL rule 100 log disable set firewall name VTUN0_to_LOCAL rule 200 description "Drop invalid" set firewall name VTUN0_to_LOCAL rule 200 action drop set firewall name VTUN0_to_LOCAL rule 200 state invalid enable set firewall name VTUN0_to_LOCAL rule 200 log disable set firewall name VTUN0_to_LOCAL rule 1020 description "Allow ICMP" set firewall name VTUN0_to_LOCAL rule 1020 action accept set firewall name VTUN0_to_LOCAL rule 1020 icmp type-name echo-request set firewall name VTUN0_to_LOCAL rule 1020 protocol icmp set firewall name VTUN0_to_LOCAL rule 1020 state new enable set firewall name VTUN0_to_LOCAL rule 1020 log disable set firewall name VTUN0_to_LOCAL rule 1060 description "Allow OSPF" set firewall name VTUN0_to_LOCAL rule 1060 action accept set firewall name VTUN0_to_LOCAL rule 1060 protocol ospf set firewall name VTUN0_to_LOCAL rule 1060 state new enable set firewall name VTUN0_to_LOCAL rule 1060 log disable set zone-policy zone LOCAL from VTUN0 firewall name VTUN0_to_LOCAL
set firewall name VTUN0_to_MGMT_LAN description "filter traffic from VTUN0 to MGMT_LAN zone" set firewall name VTUN0_to_MGMT_LAN enable-default-log set firewall name VTUN0_to_MGMT_LAN rule 80 description "Allow All" set firewall name VTUN0_to_MGMT_LAN rule 80 action accept set firewall name VTUN0_to_MGMT_LAN rule 80 log disable set firewall name VTUN0_to_MGMT_LAN rule 100 action accept set firewall name VTUN0_to_MGMT_LAN rule 100 state established enable set firewall name VTUN0_to_MGMT_LAN rule 100 state related enable set firewall name VTUN0_to_MGMT_LAN rule 100 log disable set firewall name VTUN0_to_MGMT_LAN rule 200 description "Drop invalid" set firewall name VTUN0_to_MGMT_LAN rule 200 action drop set firewall name VTUN0_to_MGMT_LAN rule 200 state invalid enable set firewall name VTUN0_to_MGMT_LAN rule 200 log disable set firewall name VTUN0_to_MGMT_LAN rule 1020 description "Allow ICMP" set firewall name VTUN0_to_MGMT_LAN rule 1020 action accept set firewall name VTUN0_to_MGMT_LAN rule 1020 icmp type-name echo-request set firewall name VTUN0_to_MGMT_LAN rule 1020 protocol icmp set firewall name VTUN0_to_MGMT_LAN rule 1020 state new enable set firewall name VTUN0_to_MGMT_LAN rule 1020 log disable set zone-policy zone MGMT_LAN from VTUN0 firewall name VTUN0_to_MGMT_LAN
set firewall name MGMT_LAN_to_VTUN0 description "filter traffic from MGMT_LAN to VTUN0 zone" set firewall name MGMT_LAN_to_VTUN0 enable-default-log set firewall name MGMT_LAN_to_VTUN0 rule 80 description "Allow All" set firewall name MGMT_LAN_to_VTUN0 rule 80 action accept set firewall name MGMT_LAN_to_VTUN0 rule 80 log disable set firewall name MGMT_LAN_to_VTUN0 rule 100 action accept set firewall name MGMT_LAN_to_VTUN0 rule 100 state established enable set firewall name MGMT_LAN_to_VTUN0 rule 100 state related enable set firewall name MGMT_LAN_to_VTUN0 rule 100 log disable set firewall name MGMT_LAN_to_VTUN0 rule 200 description "Drop invalid" set firewall name MGMT_LAN_to_VTUN0 rule 200 action drop set firewall name MGMT_LAN_to_VTUN0 rule 200 state invalid enable set firewall name MGMT_LAN_to_VTUN0 rule 200 log disable set firewall name MGMT_LAN_to_VTUN0 rule 1020 description "Allow ICMP" set firewall name MGMT_LAN_to_VTUN0 rule 1020 action accept set firewall name MGMT_LAN_to_VTUN0 rule 1020 icmp type-name echo-request set firewall name MGMT_LAN_to_VTUN0 rule 1020 protocol icmp set firewall name MGMT_LAN_to_VTUN0 rule 1020 state new enable set firewall name MGMT_LAN_to_VTUN0 rule 1020 log disable set zone-policy zone VTUN0 from MGMT_LAN firewall name MGMT_LAN_to_VTUN0