{"id":857,"date":"2026-04-20T11:51:59","date_gmt":"2026-04-20T16:51:59","guid":{"rendered":"https:\/\/carminebufano.com\/?p=857"},"modified":"2026-04-20T11:58:26","modified_gmt":"2026-04-20T16:58:26","slug":"ovn-integration-coexistence-on-xenserver-and-xcp-ng","status":"publish","type":"post","link":"https:\/\/carminebufano.com\/index.php\/2026\/04\/20\/ovn-integration-coexistence-on-xenserver-and-xcp-ng\/","title":{"rendered":"OVN Integration &amp; Coexistence on Xenserver and XCP-ng"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Research on multi hypervisor network virtualization using Open Virtual Network<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Summary<\/h2>\n\n\n\n<p>The cleanest technical path is <strong>not<\/strong> to bolt a foreign <code>br-int<\/code> onto a host that already has its networking lifecycle owned by XAPI. The safer pattern is to let XAPI create and own a <strong>dedicated internal network bridge<\/strong>, then point <code>ovn-controller<\/code> at that existing XAPI bridge by setting <code>external_ids:ovn-bridge=&lt;xapi bridge name&gt;<\/code>. In other words: reuse an XAPI-created bridge <strong>as<\/strong> the OVN integration bridge, instead of trying to move XAPI-owned VIFs onto a separately created <code>br-int<\/code>. That matches OVN\u2019s model that VM VIFs should be plugged into the integration bridge, and it matches XCP-ng\u2019s model that network objects, bridges, and VIF lifecycle are normally controlled through XAPI and <code>xcp-networkd<\/code>. <\/p>\n\n\n\n<p>The reason this matters is that XCP-ng\u2019s own documentation says almost all network configuration is handled through XAPI, with only a few explicit exceptions, notably the Xen Orchestra SDN features. OVN, on the other hand, expects a chassis-local integration bridge, VIFs attached to that bridge, and <code>external_ids:iface-id<\/code> on those interfaces so <code>ovn-controller<\/code> can bind them to logical switch ports. That is why a naive \u201c<code>ovs-vsctl add-port br-int vifX.Y<\/code>\u201d approach clashes with the toolstack: both systems think they own the same port lifecycle.<\/p>\n\n\n\n<p>There is also a supportability caveat. XCP-ng\u2019s public \u201cextra installable\u201d package list for 8.3 contains <code>openvswitch-ipsec<\/code>, but not <code>ovn<\/code> or <code>ovn-controller<\/code>; and XCP-ng explicitly warns that installing packages outside its supported set, or from extra repositories, is at your own risk and can complicate updates and upgrades. That does not make an OVN host-agent prototype impossible, but it does mean this should be treated as an <strong>experimental integration<\/strong> unless you have a controlled packaging path. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sources of conflict<\/h2>\n\n\n\n<p>XCP-ng\u2019s current architecture is straightforward: Xen Orchestra and <code>xe<\/code> talk to XAPI, XAPI dispatches network work to <code>xcp-networkd<\/code>, and <code>xcp-networkd<\/code> applies the required state into Open vSwitch. The XCP-ng architecture documentation is explicit that \u201calmost all configuration is handled through XAPI,\u201d and that Xen Orchestra\u2019s SDN controller is one of the rare cases that interacts directly with <code>ovsdb-server<\/code> or <code>ovs-vswitchd<\/code>. <\/p>\n\n\n\n<p>OVN\u2019s local model is equally explicit. Each chassis must have an <strong>integration bridge<\/strong> dedicated to OVN. On hypervisors, the VIFs that participate in logical networks are supposed to be plugged into that integration bridge, and OVN relies on the normal OVS integration convention where the interface carries <code>external_ids:iface-id<\/code>. When a VM powers on, the hypervisor integration code adds the VIF to the integration bridge and stores the VIF identifier in <code>external_ids:iface-id<\/code>; <code>ovn-controller<\/code> then notices that interface and binds the corresponding logical port to the local chassis. <\/p>\n\n\n\n<p>That leads to the central design tension. XAPI naturally creates one OVS bridge per XAPI Network object, while OVN naturally wants one dedicated integration bridge per chassis. If you add a separate <code>br-int<\/code> and then manually re-home Xen VIFs onto it, you are stepping outside the model where XAPI is the system of record for the VM-to-network attachment. If instead you make one XAPI-created internal bridge serve as the integration bridge, the two models line up far better: XAPI still owns VM\/VIF\/network lifecycle, and OVN owns logical forwarding and overlays. <\/p>\n\n\n\n<p>A useful precedent comes from the old XAPI tunnel design itself. The XAPI tunnelling design creates the network object and tunnel access bridge first through XAPI, then leaves the controller responsible for establishing the actual GRE links. If the controller is absent, the network simply degrades into an internal network. That separation\u2014XAPI owns objects, controller owns dynamic connectivity\u2014is exactly the separation that makes OVN coexistence plausible here. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Configuration keys<\/h2>\n\n\n\n<p>The <strong>required OVN host keys<\/strong> live in the <code>Open_vSwitch<\/code> table. OVN\u2019s own documentation lists these as the required chassis-side keys: <code>external_ids:system-id<\/code>, <code>external_ids:ovn-remote<\/code>, <code>external_ids:ovn-encap-type<\/code>, and <code>external_ids:ovn-encap-ip<\/code>. The <code>ovn-controller<\/code> man page also documents <code>external_ids:ovn-bridge<\/code>, which selects the integration bridge name and defaults to <code>br-int<\/code>, and <code>external_ids:ovn-bridge-mappings<\/code>, which maps provider or physical network names to local OVS bridges. <code>external_ids:ovn-bridge-datapath-type<\/code> is optional. For hypervisor overlays, Geneve is the normal encapsulation choice; OVN\u2019s docs note that hypervisors support <code>geneve<\/code> and <code>stt<\/code>, while gateways may also use <code>vxlan<\/code>. <\/p>\n\n\n\n<p>The <strong>XenServer\/XCP-ng bridge identity keys<\/strong> live in the <code>Bridge<\/code> table and should be preserved on any XAPI-owned bridge. Open vSwitch\u2019s schema documentation for XenServer states that <code>external_ids:bridge-id<\/code> uniquely identifies the bridge and, on XenServer, commonly matches <code>external_ids:xs-network-uuids<\/code>. It also documents <code>external_ids:xs-network-uuids<\/code> itself as the semicolon-delimited set of Xen network UUIDs associated with that bridge. In practice, those are the bridge identity markers that XAPI and the XenServer-style integration expect to exist. <\/p>\n\n\n\n<p>The <strong>VIF identity keys<\/strong> live in the <code>Interface<\/code> table and are the ones OVN most benefits from inheriting instead of reinventing. The XenServer schema and the integration guide document <code>external_ids:attached-mac<\/code>, <code>external_ids:iface-id<\/code>, <code>external_ids:iface-status<\/code>, <code>external_ids:xs-vif-uuid<\/code>, <code>external_ids:xs-network-uuid<\/code>, <code>external_ids:vm-id<\/code>, and <code>external_ids:xs-vm-uuid<\/code>. The same documentation notes that on XenServer the default <code>iface-id<\/code> is commonly the Xen VIF UUID, and <code>vm-id<\/code> commonly matches the Xen VM UUID. That is the key insight that makes the reuse-of-XAPI-bridge design attractive: if XAPI plugs the VIF into the bridge that OVN treats as its integration bridge, the identifiers OVN wants are already the identifiers Xen\u2019s OVS integration knows how to populate.<\/p>\n\n\n\n<p>A concrete coexistence configuration therefore looks like this:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">ovs-vsctl set Open_vSwitch . \\<br>  external_ids:system-id=\"$HOST_UUID\" \\<br>  external_ids:ovn-remote=\"ssl:10.0.0.10:6642,ssl:10.0.0.11:6642,ssl:10.0.0.12:6642\" \\<br>  external_ids:ovn-encap-type=\"geneve\" \\<br>  external_ids:ovn-encap-ip=\"$TUNNEL_IP\" \\<br>  external_ids:ovn-bridge=\"$XAPI_OVN_BRIDGE\" \\<br>  external_ids:ovn-bridge-mappings=\"physnet-mgmt:$UPLINK_BRIDGE\"<\/pre>\n\n\n\n<p>The important part is that <code>external_ids:ovn-bridge<\/code> points at the <strong>XAPI-created internal bridge<\/strong> you dedicate to OVN, while <code>external_ids:ovn-bridge-mappings<\/code> points at one or more <strong>other<\/strong> bridges that XAPI already uses for provider or uplink connectivity. OVN\u2019s architecture documentation is explicit that underlay physical ports should not be attached to the integration bridge, and that patching from the integration bridge to another bridge is the right way to implement localnet or gateway connectivity.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Community evidence<\/h2>\n\n\n\n<p>The strongest public template I found is what&nbsp;Vates&nbsp;already built for Xen Orchestra\u2019s SDN features. The official Xen Orchestra SDN documentation and the XCP-ng networking docs describe a plugin that creates pool-wide and cross-pool private networks, initially via direct OpenFlow and OVSDB interaction, then later via a newer XAPI-side plugin approach. The docs are explicit that the SDN controller is the exception to the usual XAPI-only networking model, and that the newer direction is to move the OVS logic into XAPI plugins instead of having Xen Orchestra talk directly to host OVS components forever.<\/p>\n\n\n\n<p>The old SDN devblogs are also informative. In the 2019 SDN controller devblog, the authors explain that they built their own lightweight controller instead of using broader SDN projects; they also call out that their design uses a <strong>passive SSL connection on OVSDB port 6640<\/strong>, allowing multiple controllers to share pool control as long as they trust the same CA. In the 2020 VIF traffic-control devblog, they document that the plugin \u201cbecomes the SDN controller \u2026 thanks to XAPI\u201d and then uses OVSDB to become the bridge manager and OpenFlow to install traffic rules. That is not OVN, but it is a very relevant proof that the XCP-ng\/XO ecosystem can layer an SDN control plane over XAPI-owned OVS state when the responsibilities are kept separate.<\/p>\n\n\n\n<p>The XCP-ng forum threads show the same pattern in the field. A 2025 thread explains that when an SDN network creation fails, the XAPI pool network can already exist even though the OVSDB-controlled tunnels do not; the suggested validation is <code>ovs-vsctl show<\/code>, where a healthy result is a normal XAPI bridge such as <code>xapi6<\/code> plus a controller entry and a GRE\/VXLAN port. That is a strong practical hint that XAPI-created bridges are the right substrate and the controller\u2019s job is to add extra ports or flows\u2014not to replace the bridge lifecycle.<\/p>\n\n\n\n<p>Other forum replies give useful operational constraints. One forum answer enumerates the SDN network <code>other_config<\/code> fields, including <code>xo:sdn-controller:pif-device<\/code>, and states that the selected PIF must be physical, VLAN-backed, or a bond master <strong>and<\/strong> must have an IP configuration. Another issue report shows what happens when the chosen transport PIF is ambiguous or lacks IP configuration: XAPI returns <code>TRANSPORT_PIF_NOT_CONFIGURED<\/code>, exactly as the old XAPI tunnel design describes. Those are not OVN-specific, but they tell you what kind of host-side interface selection logic survives XAPI scrutiny.<\/p>\n\n\n\n<p>The historical XenServer\/Open vSwitch mailing-list material also supports preserving Xen\u2019s external IDs instead of fighting them. The OVS XenServer integration work documents that <code>iface-id<\/code> should mirror the Xen VIF UUID and that <code>vm-id<\/code> should mirror the Xen VM UUID, and one XenServer-specific OVS fix explicitly says that getting <code>bridge-id<\/code> wrong broke controller integration. There is also historical evidence that XenServer-specific tooling reset OVS <code>manager_options<\/code>, which is another reason not to base a coexistence design on ad hoc bridge-manager state that XAPI does not know about.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Recommended design<\/h2>\n\n\n\n<p>The recommended design is:<\/p>\n\n\n\n<p><strong>Create one XAPI-managed internal network whose bridge is dedicated to OVN, and configure that bridge as <code>ovn-controller<\/code>\u2019s integration bridge.<\/strong> Then attach every VM VIF that should be OVN-managed to that XAPI network through normal XAPI\/XO\/<code>xe<\/code> operations. Use <code>ovn-bridge-mappings<\/code> only for provider uplinks or external connectivity to other XAPI-managed bridges. This gives OVN exactly what it wants\u2014a dedicated integration bridge carrying VM VIFs\u2014without taking bridge or VIF ownership away from XAPI.<\/p>\n\n\n\n<p>This is better than introducing a separate classic <code>br-int<\/code> for three reasons. First, OVN explicitly allows the integration bridge to have a name other than <code>br-int<\/code>; <code>br-int<\/code> is only the default. Second, XenServer\/XCP-ng already knows how to create and maintain internal bridges that have no physical uplink, which fits OVN\u2019s own rule that underlay physical ports should not be attached directly to the integration bridge. Third, Xen\u2019s existing OVS integration already populates the VIF-facing external IDs that OVN uses to correlate local interfaces with logical switch ports.<\/p>\n\n\n\n<p>There is one important architectural consequence: the dedicated XAPI network used as OVN\u2019s bridge should be treated as an <strong>OVN access network<\/strong>, not as a normal standalone L2 domain. The real tenant segmentation, routing, ACLs, and distributed forwarding happen in OVN\u2019s northbound and southbound databases. The XAPI network exists mainly so that XAPI has a supported place to plug VIFs and so that <code>ovn-controller<\/code> can see them.<\/p>\n\n\n\n<p>For connectivity to existing underlay or external networks, use OVN <code>localnet<\/code> ports and <code>external_ids:ovn-bridge-mappings<\/code>. OVN documents that a <code>localnet<\/code> port is the way to model \u201cdirect connectivity to an existing network,\u201d and that <code>ovn-controller<\/code> implements it as a pair of patch ports between the integration bridge and another bridge. That is exactly the right place to map into an existing XAPI uplink bridge such as the management bridge, a VLAN bridge, or a bond-backed bridge.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Implementation guide<\/h2>\n\n\n\n<p>First, create a <strong>dedicated internal XAPI network<\/strong> for OVN. XenServer\u2019s networking guide states that <code>xe network-create name-label=&lt;name&gt;<\/code> creates a network, and if it is not connected to a PIF it is internal. After creating it, query the network\u2019s <code>bridge<\/code> field; that bridge name is what you will hand to OVN. In a pool, create it once on the coordinator in the normal XAPI way so the network object is consistent pool-wide.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>OVN_NET_UUID=$(xe network-create name-label=ovn-int)\nXAPI_OVN_BRIDGE=$(xe network-list uuid=\"$OVN_NET_UUID\" params=bridge --minimal)\necho \"$OVN_NET_UUID $XAPI_OVN_BRIDGE\"<\/code><\/pre>\n\n\n\n<p>Next, set the <strong>OVN chassis keys<\/strong> in the local <code>Open_vSwitch<\/code> record on each host. The minimum set is <code>system-id<\/code>, <code>ovn-remote<\/code>, <code>ovn-encap-type<\/code>, and <code>ovn-encap-ip<\/code>. For coexistence, also set <code>ovn-bridge=$XAPI_OVN_BRIDGE<\/code>; that is the key that tells <code>ovn-controller<\/code> to use an existing bridge other than the default <code>br-int<\/code>. If the host must reach provider or external networks, also set <code>ovn-bridge-mappings<\/code> to one or more existing XAPI uplink bridges.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>HOST_UUID=$(xe host-list --minimal | cut -d, -f1)\novs-vsctl set Open_vSwitch . \\\n  external_ids:system-id=\"$HOST_UUID\" \\\n  external_ids:ovn-remote=\"ssl:10.0.0.10:6642,ssl:10.0.0.11:6642,ssl:10.0.0.12:6642\" \\\n  external_ids:ovn-encap-type=\"geneve\" \\\n  external_ids:ovn-encap-ip=\"$TUNNEL_IP\" \\\n  external_ids:ovn-bridge=\"$XAPI_OVN_BRIDGE\" \\\n  external_ids:ovn-bridge-mappings=\"physnet-mgmt:$UPLINK_BRIDGE\"<\/code><\/pre>\n\n\n\n<p>Then start <code>ovn-controller<\/code> and verify that it adopts the XAPI bridge rather than auto-creating a new <code>br-int<\/code>. OVN\u2019s architecture documentation says that if the integration bridge does not exist, <code>ovn-controller<\/code> will create one automatically; the whole point here is to make sure the bridge <strong>already exists<\/strong> and is the XAPI-owned internal bridge you chose. At that point, any VIF that XAPI plugs into that dedicated network should appear on the integration bridge in the ordinary Xen\/OVS way, with the relevant external IDs populated.<\/p>\n\n\n\n<p>Now attach VM networking <strong>through XAPI, not through <code>ovs-vsctl<\/code><\/strong>. XAPI\u2019s API model is that a VIF is the attachment between a VM and a Network object, and <code>plug<\/code>\/<code>unplug<\/code> are the lifecycle operations for a running VM. In practice, create a new VIF or reattach an existing one so that its <code>network<\/code> is the dedicated <code>ovn-int<\/code> network. If you do this through XAPI\/XO\/<code>xe<\/code>, XAPI remains the source of truth and live migration, unplug, and host restart semantics stay aligned with the rest of the toolstack.<\/p>\n\n\n\n<p>A workable script sequence is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Pseudocode \/ shell logic\n# 1. Create or move a VM VIF onto the dedicated OVN XAPI network.\nVIF_UUID=&lt;create via XAPI or discover existing VIF now attached to OVN_NET_UUID&gt;\nMAC=&lt;read from XAPI VIF record&gt;\n\n# 2. Create the matching OVN logical switch port.\novn-nbctl --may-exist ls-add tenant-a\novn-nbctl --may-exist lsp-add tenant-a \"$VIF_UUID\"\novn-nbctl lsp-set-addresses \"$VIF_UUID\" \"$MAC 192.0.2.10\"<\/code><\/pre>\n\n\n\n<p>The crucial detail is that the OVN logical switch port name should match the value OVN will see in <code>external_ids:iface-id<\/code>. On XenServer-style OVS integration, the default <code>iface-id<\/code> is commonly the Xen VIF UUID, so using the VIF UUID as the logical port name is the least-friction mapping. Once the VM is plugged and <code>ovn-controller<\/code> sees the interface on the integration bridge, OVN should bind the corresponding <code>Port_Binding<\/code> row to the local chassis. \ue200cite\ue202turn11view3\ue202turn21view0\ue201<\/p>\n\n\n\n<p>For north-south or provider connectivity, add a <code>localnet<\/code> port in OVN and map it to an existing XAPI-owned uplink bridge. OVN\u2019s NB and controller docs explicitly describe <code>localnet<\/code> as the mechanism for direct connectivity to an existing network, and describe the implementation as a pair of patch ports between the integration bridge and the other local bridge. That lets you keep physical\/VLAN\/bond topology fully under XAPI while still giving OVN a way out to the underlay.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ovn-nbctl --may-exist lsp-add tenant-a provnet\novn-nbctl lsp-set-type provnet localnet\novn-nbctl lsp-set-options provnet network_name=physnet-mgmt<\/code><\/pre>\n\n\n\n<p>Operationally, I would also keep the transport choices conservative. Use a real host IP for <code>ovn-encap-ip<\/code>, prefer <code>geneve<\/code>, and keep management traffic, provider uplinks, and the OVN access bridge separate. That lines up both with OVN\u2019s own bridge layout guidance and with the constraints the Xen Orchestra SDN work has already surfaced around transport PIF selection and IP-configured uplinks.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Experimental fallback<\/h2>\n\n\n\n<p>If you absolutely must keep a <strong>classic separate <code>br-int<\/code><\/strong> instead of reusing an XAPI bridge as <code>ovn-bridge<\/code>, the only plausible pattern I found is an <strong>event-driven reconciliation layer<\/strong>: let XAPI create and plug the VIF onto its normal XAPI bridge, then immediately move the resulting OVS port to <code>br-int<\/code> in a host-local script or daemon, preserving the Xen external IDs and making sure <code>external_ids:iface-id<\/code> remains the VIF UUID. Inference-wise, the logic is sound because OVN only needs the VIF on the integration bridge with the right <code>iface-id<\/code>, and the world already contains XCP-ng SDN examples that add extra GRE\/VXLAN ports to XAPI bridges without breaking XAPI. But I did <strong>not<\/strong> find public evidence that permanently re-homing Xen VIF ports away from their XAPI-selected bridge is a supported configuration, so this should be treated as a high-risk lab technique rather than the recommended design.<\/p>\n\n\n\n<p>If you prototype that fallback anyway, the reconciliation loop should be idempotent and keyed only on Xen metadata that XAPI already writes: <code>xs-vif-uuid<\/code>, <code>xs-network-uuid<\/code>, <code>xs-vm-uuid<\/code>, <code>attached-mac<\/code>, <code>iface-id<\/code>, and <code>iface-status<\/code>. It must run after every VIF plug, VM power-on, migration, and potentially after host-side network reconciliation. That is exactly the sort of long-term complexity the newer Xen Orchestra work is trying to eliminate by moving SDN logic closer to XAPI rather than relying on persistent ad hoc host-side OVS manipulations.<\/p>\n\n\n\n<p>In short: if the goal is reliable coexistence, use <strong>an XAPI-created internal bridge as OVN\u2019s integration bridge<\/strong>. If the goal is to preserve the name <code>br-int<\/code> at all costs, be prepared to own a custom reconciler for the life of the deployment.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Research on multi hypervisor network virtualization using Open Virtual Network Summary The cleanest technical path is not to bolt a foreign br-int onto a host that already has its networking lifecycle owned by XAPI. The safer pattern is to let XAPI create and own a dedicated internal network bridge, then point ovn-controller at that existing&hellip; <a class=\"read-more\" href=\"https:\/\/carminebufano.com\/index.php\/2026\/04\/20\/ovn-integration-coexistence-on-xenserver-and-xcp-ng\/\">Read More<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"Xenserver OR XCP-NG. xcp-ng have networking that is not similar to what you would find on a KVM hypervisor host with Open vSwitch or OVS; Making OVN integration seem more difficult than it should be. This research explains the differences and poses an opinionated solution to integrate OVN across Citrix Xenserver or Citrix Hypervisor with OVN aka Open Virtual Network.","jetpack_seo_html_title":"Integrate OVN into Citrix Xenserver and xcp-ng","jetpack_seo_noindex":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[4,5,6,7,8,93,10,90,164,11,91,12,15,102],"tags":[175,108,20,178,177,22,176,171,29,30,180,83,120,172,173,179,46,88,48,53,174,54],"class_list":["post-857","post","type-post","status-publish","format-standard","hentry","category-centos","category-citrix-xenserver","category-digital-ocean","category-hyper-v","category-linux","category-network-simulator","category-openstack","category-openvswitch","category-programming","category-ubuntu","category-virtualbox","category-vmware","category-walkthroughs","category-zerotier","tag-across","tag-and","tag-citrix","tag-developer","tag-for","tag-how","tag-hypervisors","tag-integrate","tag-multiple","tag-network","tag-nsx","tag-on","tag-open","tag-ovn","tag-ovs","tag-source","tag-to","tag-virtualization","tag-vmware","tag-with","tag-xcp-ng","tag-xenserver"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":829,"url":"https:\/\/carminebufano.com\/index.php\/2025\/12\/26\/how-to-get-real-public-ip-addresses-at-home-lab-wireguard-ip-transit-complete-guide\/","url_meta":{"origin":857,"position":0},"title":"How to Get Real Public IP Addresses at your Home Lab: WireGuard IP Transit Complete Guide","author":"Carmine Bufano","date":"December 26, 2025","format":false,"excerpt":"A Complete Guide to why Core Transit's WireGuard IP Transit Service is so incredibly awesome for you lab Bypassing CG-NAT with style - a detailed technical walkthrough The Problem: CG-NAT Hell If you're reading this, you probably know the pain. Your ISP puts you behind Carrier-Grade NAT (CG-NAT), which means:\u2026","rel":"","context":"In &quot;Walkthroughs&quot;","block_context":{"text":"Walkthroughs","link":"https:\/\/carminebufano.com\/index.php\/category\/walkthroughs\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":678,"url":"https:\/\/carminebufano.com\/index.php\/2024\/08\/04\/ospf-on-mikrotik-routeros-v7-15-x\/","url_meta":{"origin":857,"position":1},"title":"OSPF on Mikrotik RouterOS v7.15.x Notes, Examples, Diagrams","author":"Carmine Bufano","date":"August 4, 2024","format":false,"excerpt":"OSPF on Mikrotik RouterOS v7.15.x","rel":"","context":"In &quot;Announcements&quot;","block_context":{"text":"Announcements","link":"https:\/\/carminebufano.com\/index.php\/category\/announcements\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/carminebufano.com\/wp-content\/uploads\/2024\/08\/OSPF_Network_Configuration.jpg?fit=1200%2C686&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/carminebufano.com\/wp-content\/uploads\/2024\/08\/OSPF_Network_Configuration.jpg?fit=1200%2C686&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/carminebufano.com\/wp-content\/uploads\/2024\/08\/OSPF_Network_Configuration.jpg?fit=1200%2C686&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/carminebufano.com\/wp-content\/uploads\/2024\/08\/OSPF_Network_Configuration.jpg?fit=1200%2C686&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/carminebufano.com\/wp-content\/uploads\/2024\/08\/OSPF_Network_Configuration.jpg?fit=1200%2C686&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":570,"url":"https:\/\/carminebufano.com\/index.php\/2022\/08\/21\/quick-notes-on-creating-static-vxlan-vtep-on-dell-emc-network-os9-14\/","url_meta":{"origin":857,"position":2},"title":"Quick Notes on Creating Static VXLAN vtep on Dell EMC Network OS9.14","author":"Carmine Bufano","date":"August 21, 2022","format":false,"excerpt":"Both VLT peers should be configured with the same local VTEP IP address. One would complete the usual VLT config on both peers. An identical loopback IP will be configured on both peers, to serve as the Anycast IP.Other than that, there will be the usual VXLAn config[vxlan-instance xx staticlocal-vtep-ip\u2026","rel":"","context":"In &quot;Walkthroughs&quot;","block_context":{"text":"Walkthroughs","link":"https:\/\/carminebufano.com\/index.php\/category\/walkthroughs\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":619,"url":"https:\/\/carminebufano.com\/index.php\/2023\/11\/16\/vmware-esxi-8-0-doesnt-recognize-network-card-when-run-nested-in-kvm-here-is-the-solution\/","url_meta":{"origin":857,"position":3},"title":"VMWARE ESXi 8.0  doesn\u2019t recognize network card when run nested in KVM. Here is the solution","author":"Carmine Bufano","date":"November 16, 2023","format":false,"excerpt":"In QEMU version 4.1.0 Options add: -net nic, model-e1000e","rel":"","context":"In &quot;Walkthroughs&quot;","block_context":{"text":"Walkthroughs","link":"https:\/\/carminebufano.com\/index.php\/category\/walkthroughs\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":283,"url":"https:\/\/carminebufano.com\/index.php\/2017\/12\/26\/digital-ocean-how-to-download-a-copy-or-snapshot-of-your-droplet-or-vm-locally-and-run-it-on-your-own-server\/","url_meta":{"origin":857,"position":4},"title":"Digital Ocean How to download a copy or snapshot of your droplet or vm locally and run it on your own server","author":"Carmine Bufano","date":"December 26, 2017","format":false,"excerpt":"","rel":"","context":"In &quot;Announcements&quot;","block_context":{"text":"Announcements","link":"https:\/\/carminebufano.com\/index.php\/category\/announcements\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":257,"url":"https:\/\/carminebufano.com\/index.php\/2017\/10\/10\/its-been-a-while\/","url_meta":{"origin":857,"position":5},"title":"It&#8217;s Been a While!","author":"Carmine Bufano","date":"October 10, 2017","format":false,"excerpt":"","rel":"","context":"In &quot;Walkthroughs&quot;","block_context":{"text":"Walkthroughs","link":"https:\/\/carminebufano.com\/index.php\/category\/walkthroughs\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_shortlink":"https:\/\/wp.me\/p70MUT-dP","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/carminebufano.com\/index.php\/wp-json\/wp\/v2\/posts\/857","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/carminebufano.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/carminebufano.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/carminebufano.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/carminebufano.com\/index.php\/wp-json\/wp\/v2\/comments?post=857"}],"version-history":[{"count":7,"href":"https:\/\/carminebufano.com\/index.php\/wp-json\/wp\/v2\/posts\/857\/revisions"}],"predecessor-version":[{"id":867,"href":"https:\/\/carminebufano.com\/index.php\/wp-json\/wp\/v2\/posts\/857\/revisions\/867"}],"wp:attachment":[{"href":"https:\/\/carminebufano.com\/index.php\/wp-json\/wp\/v2\/media?parent=857"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/carminebufano.com\/index.php\/wp-json\/wp\/v2\/categories?post=857"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/carminebufano.com\/index.php\/wp-json\/wp\/v2\/tags?post=857"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}