Extra: according to chatgtp 😀
this also can be achieved using VXLAN setup
Below is this VXLAN setup ( did not tried or experiment this – just for extra information )
Alright — here’s the VXLAN version of your setup.
VXLAN is nice because it uses UDP (default port 4789), which almost always passes through firewalls/NAT, and it’s still Layer 2 capable like gretap.
Network Recap
Provider A (Debian VM) Provider B (Proxmox Node)
Public IP: 38.248.1.150 Public IP: 185.17.1.2
/24: 38.248.1.0/24 (lives in Provider A)
/24 Gateway: 38.248.1.1
Goal: VMs in Provider B keep using their old IPs + gateway over the tunnel
On Provider A (Debian VM)
Install bridge utilities
apt install bridge-utils iproute2
Create VXLAN interface (ID can be any number, must match both sides)
ip link add vxlan100 type vxlan id 100 \
dev eth0 \
remote 185.17.1.2 \
dstport 4789 \
local 38.248.1.150 \
ttl 255
Bring it up with smaller MTU (VXLAN adds ~50 bytes)
ip link set vxlan100 up mtu 1450
Create a bridge for your public NIC + VXLAN
brctl addbr br0
brctl addif br0 eth0
brctl addif br0 vxlan100
Move your IP from eth0 to the bridge
ip addr flush dev eth0
ip addr add 38.248.1.150/24 dev br0
ip link set br0 up
ip route add default via 38.248.1.1
On Provider B (Proxmox Node)
Edit /etc/network/interfaces:
auto vxlan100
iface vxlan100 inet manual
pre-up ip link add vxlan100 type vxlan id 100 \
dev eth0 \
remote 38.248.1.150 \
dstport 4789 \
local 185.17.1.2 \
ttl 255
up ip link set vxlan100 up mtu 1450
post-down ip link del vxlan100
auto vmbr2
iface vmbr2 inet manual
bridge_ports vxlan100
bridge_stp off
bridge_fd 0
! Do not assign the /24 to vmbr2. This bridge is purely for the VMs.
On a Migrated VM in Provider B
Same config as if it were still in Provider A:
IP: 38.248.1.152
Netmask: 255.255.255.0
Gateway: 38.248.1.1
Firewall / Networking Notes
Allow UDP/4789 in both directions (between 38.248.1.150 ↔ 185.17.1.2).
MTU must be reduced to ~1450 (or lower if path MTU is smaller).
Some providers have “anti-MAC spoofing” — if so, you may need to request that they disable it for the VXLAN tunnel endpoints.
Testing
On Provider B:
bridge link show
Should show vxlan100 as a port in vmbr2.
From the migrated VM in Provider B:
ping 38.248.1.1
If it works, you’ve got transparent L2 connectivity over VXLAN.
GRE vs VXLAN Quick Comparison
Feature GRE/gretap VXLAN
Layer 2 capable gretap only Yes
Encapsulation Protocol 47 (GRE) UDP
Likely to pass firewalls Lower Higher
Overhead ~24 bytes ~50 bytes
MTU impact Moderate Slightly more