QuoteHow to read the flags in this document:
• VERIFY means the exact UI path, field name, or value changed across OPNsense releases
and should be confirmed on your 26.x build before you trust it.
• TODO means something to make a note of or keep track of as you go, such as a tested
value or a screenshot. Keep anything sensitive in your own private notes, never in a shared copy of this document.
• GOTCHA marks a known failure mode that wastes hours if missed.
QuoteTODO: make a note of the customer-side ASN you choose.
QuoteTODO: keep track of which one you are using and its ID.
QuoteTODO: keep track of the tunnel facts after creation, from the downloaded config (see 3.4).
QuoteVERIFY: which genericprofile most closely matches, then translate values by hand.• Keep this file. It is the source of truth for outside IPs, inside /30s, PSKs, and the AWS BGP peer addresses.
QuoteGOTCHA: mismatchedlifetimes cause periodic renegotiation drops that look random.
TODO: make a note of the exact algorithm set you settle on so both ends stay in lockstep.
QuoteGOTCHA: tunnels UP and BGP established still moves no traffic if route propagation is off or the security groups and NACLs block it.
QuoteTODO: make a note of your exact release (for example 26.1).• Install the FRR plugin: System > Firmware > Plugins > install os-frr.
QuoteVERIFY:the menu label on 26.x. Older builds showed VPN > IPsec > Tunnel Settings instead.• Choose your customer-side BGP ASN. This is your end of the session and is separate from the AWS side.
QuoteGOTCHA: your ASN must not equal the AWS side ASN. If the AWS side is 64512, do not also choose 64512. Keep it unique across your environment. Do not reuse an ASN that another VPN connection, Direct Connect, or BGP partner already uses, or you invite AS-path loop rejection and confusing routing.• Also note the two OPNsense inside addresses from the AWS downloaded config (the Customer Gateway inside addresses), one per tunnel.
QuoteGOTCHA: local and remote IKE identifiers. When behind NAT, set the local identifier to the public IP AWS expects (the CGW IP), not the private WAN address, or IKE auth fails.Screenshot 2
QuoteGOTCHA: reusing the same PSK or the same inside /30 across both tunnels. They are distinct.Screenshot 5
QuoteGOTCHA: many guides forget ESPand only open 500 and 4500, which works only while NAT-T encapsulates everything. If your path is not NATed, missing ESP breaks the tunnel.Screenshot 7
QuoteGOTCHA: without MSS clamping on the tunnel interfaces, largepackets over the reduced tunnel MTU cause hangs that look like a routing problem. Set the interface MTU and MSS deliberately.WAN - Screenshot 8
TODO: keep track of the MTU and MSS you land on.
QuoteNAT-T GOTCHA: if OPNsense sits behind another NAT device, forward UDP 500 and UDP 4500 and protocol ESP from that device to OPNSense (passthrough-mode), and set the IKE local identifier to the public CGW IP. Pure ESP does not survive NAT, so NAT-T on 4500 must be available end to end.
QuoteTODO: make a note of the Router ID you use.7.2 Prefix Lists
QuoteGOTCHA: keep the advertised list specific. A permit-any or an overly broad prefix can blackhole traffic or be rejected by AWS.7.3 Peer Group
QuoteGOTCHA: ifping to 169.254.x.1 fails, BGP will never come up. Fix IPsec and routing first.5. Bring up BGP. Confirm sessions reach Established.
QuoteGOTCHA: keep SSH on the LAN or a management network. Do not expose it on the WAN.
QuoteGOTCHA: do not edit these files by hand. OPNsense generates them from your GUI settings and overwrites manual edits on the next apply or reboot. Treat the files as a read-only reflection of what the GUI built, useful for reading and confirming, not for changing.• Make every change in Routing > BGP and let OPNsense regenerate the config. To see what FRR is actually running rather than what is on disk, use vtysh below.
| show ip bgp summary | both AWS neighbors should reach Established with a nonzero prefix count. A state of Active or Connect means the session is not up yet. |
| show bgp neighbor <AWS-inside-ip> | full detail for one session, including timers, negotiated capabilities, and the last reset reason |
| show ip route bgp | the BGP routes actually installed, with the tunnel next hops. show ip bgp shows the full table, and show ip bgp <prefix> shows one prefix. |
| show bgp neighbor <ip> advertised-routes and show bgp neighbor <ip> received-routes | confirm exactly what you send to AWS and what AWS sends you. |
| show ip prefix-list and show route-map | confirm the prefix lists and route maps from 7.2 and 7.4 exist and match what you built. |
| show bgp peer-group | confirm both tunnels are members of the peer group from 7.3. |
| show running-config | the running FRR configuration in one view, the read-only reflection mentioned above. |
| clear bgp <ip> soft in and clear bgp <ip> soft out | reapply inbound or outbound policy without tearing down the session, after a prefix-list or route-map change. |
QuoteGOTCHA: Confirm every path on your build.
Quote from: mic on August 10, 2026, 03:29:43 PMPS2: I've noticed, using the top command, that Python 3.13 often takes up over 90% of the CPU (WCPU column in top).
Quoteroot 48076 64.7 0.1 38432 22836 - R 15:11 0:02.71 /sbin/pfctl -t Bad_Nations -T replace -f /var/db/aliastables/Bad_Nations.txt
Quote from: Monviech (Cedrik) on August 11, 2026, 08:34:41 PMTheres an issue with the interface cache right now it should be fixed soon in 26.7.2 (the assignment page was rewritten). Best reboot once and it should show in the assignment dropdown in the meantime.
https://github.com/opnsense/core/pull/10594
Quote from: dseven on August 11, 2026, 07:46:15 PMWhat do you mean by "I tried creating the interface manually"?
You'd want to create it inter Interfaces -> Devices -> VLAN, then assign it, then configure it...
Quote from: ati on March 14, 2026, 10:49:53 PMI got it.
I needed to set the fragment size in the openVPN configuration. Once I did that everything worked as expected.
Thank you for your support!