#!/bin/bash
# Create network namespaces
ip netns add wg1
ip netns add wg2
# Create a veth pair
ip link add veth-wg1 type veth peer name veth-wg2
# Attach the veth interfaces to the namespaces
ip link set veth-wg1 netns wg1
ip link set veth-wg2 netns wg2
# Assign IP addresses to each veth interface in their respective namespaces
ip -n wg1 addr add 192.168.15.1/24 dev veth-wg1
ip -n wg2 addr add 192.168.15.2/24 dev veth-wg2
# Bring up the loopback interfaces
ip -n wg1 link set lo up
ip -n wg2 link set lo up
# Bring up the veth interfaces
ip -n wg1 link set veth-wg1 up
ip -n wg2 link set veth-wg2 up
# Add routes in the namespaces
ip -n wg1 route add 192.168.15.2 dev veth-wg1
ip -n wg2 route add 192.168.15.1 dev veth-wg2
# Test connectivity with ping
ip netns exec wg1 ping -c 4 192.168.15.2
linux bridge
#!/bin/bash
ip netns add wg1
ip netns add wg2
ip link add name v-net-0 type bridge
ip link set dev v-net-0 up
ip link add veth-wg1 type veth peer name veth-wg1-br
ip link set veth-wg1 netns wg1
ip link set veth-wg1-br master v-net-0
ip link add veth-wg2 type veth peer name veth-wg2-br
ip link set veth-wg2 netns wg2
ip link set veth-wg2-br master v-net-0
ip -n wg1 addr add 192.168.15.1/24 dev veth-wg1
ip -n wg1 link set veth-wg1 up
ip -n wg1 link set lo up
ip -n wg2 addr add 192.168.15.2/24 dev veth-wg2
ip -n wg2 link set veth-wg2 up
ip -n wg2 link set lo up
ip link set veth-wg1-br up
ip link set veth-wg2-br up
ip netns exec wg1 ping -c 4 192.168.15.2
connecting to and from outside
# sysctl net.ipv4.ip_forward
# sysctl -w net.ipv4.ip_forward=1
sed -i '/^#net.ipv4.ip_forward=1/s/^#//' /etc/sysctl.conf
sysctl -p
ip link add name br0 type bridge
ip addr add 192.168.15.5/24 dev br0
ip link set br0 up
iptables -t nat -A POSTROUTING -s 192.168.15.0/24 -j MASQUERADE
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.15.1:80
ip netns exec wg1 ip route add default via 192.168.15.5
# ping from wg1 namespace via br0 (192.168.15.5) to outside
ip netns exec wg1 ping 192.168.121.57