Hi,
I find myself struggling with setting up my Mikrotik as a road warrior wireguard client.
The config which I get from the server does work on my phone and laptop, but I’d like to configure this straight in my Mikrotik router
Site A (client):
Mikrotik LTE dish (RBLHGGR)
WAN: super floaty, behind ISP NAT, terrible but nothing we can do about it
LAN: IP and subnet: 192.168.188.1/24
Desire: act as a Wireguard client to the Wireguard server set up at site B
Site B (server):
Ubiquiti Unifi UDM
IP and subnet of LAN: 10.103.14.1/24
WAN IP: fixed 12.34.56.78 (<== I’ll replace my actual IP everywhere to this one to make it as easy as possible)
[Interface]
PrivateKey = <private key Y>
Address = 192.168.2.2/32
DNS = 192.168.2.1
[Peer]
PublicKey = <public key Z>
AllowedIPs = 192.168.2.0/24, 10.103.14.0/24
Endpoint = 12.34.56.78:51820
(this exact same config works on my phone when imported into the app)
(I also added Y and Z, just in case in the future we find ourselves needing to copy/post more then one public/private key value)
As you see the UDM has seperate subnet for wireguard clients, basically assigning the Mikrotik one IP for the tunnel and thus (assumption on my side) we probably need to play around with NAT.
What did I do so far: lots of research, found some interesting topics on this forum as well, but got my main inspiration from https://forum.mikrotik.com/viewtopic.php?t=182340 adapting for the part mentioning third pary VPNs (which I belief I can consider my UDM to be).
Last but not least my Mikrotik config. Basically I have only made changes to the default configuration as the default config does serve my purpose very well.
# 2023-12-21 14:52:34 by RouterOS 7.13
# software id = **ELIDED**
#
# model = RBLHGGR
# serial number = **ELIDED**
/interface lte
set [ find default-name=lte1 ] allow-roaming=no band=""
/interface wireguard
add listen-port=51820 mtu=1420 name=wireguard1
/interface list
add comment=defconf name=WAN
add comment=defconf name=LAN
/interface wireless security-profiles
set [ find default=yes ] supplicant-identity=MikroTik
/ip hotspot profile
set [ find default=yes ] html-directory=hotspot
/ip pool
add name=default-dhcp ranges=192.168.188.10-192.168.188.254
/ip dhcp-server
add address-pool=default-dhcp interface=ether1 lease-time=10m name=defconf
/port
set 0 name=serial0
/ip neighbor discovery-settings
set discover-interface-list=LAN
/interface list member
add comment=defconf interface=ether1 list=LAN
add comment=defconf interface=lte1 list=WAN
/interface wireguard peers
add allowed-address=10.103.14.0/24,192.168.2.0/24 endpoint-address=\
12.34.56.78 endpoint-port=51820 interface=wireguard1 public-key=\
"<public key Z>"
/ip address
add address=192.168.188.1/24 comment=defconf interface=ether1 network=\
192.168.188.0
add address=192.168.2.2/24 interface=wireguard1 network=192.168.2.0
/ip dhcp-server network
add address=192.168.188.0/24 comment=defconf dns-server=192.168.188.1 \
gateway=192.168.188.1
/ip dns
set allow-remote-requests=yes
/ip dns static
add address=192.168.188.1 comment=defconf name=router.lan
/ip firewall filter
add action=accept chain=forward out-interface=wireguard1 src-address=\
192.168.188.0/24
add action=accept chain=forward dst-address=12.34.56.78 in-interface=\
wireguard1
add action=accept chain=forward in-interface=wireguard1 out-interface=lte1
add action=accept chain=forward dst-address=10.103.14.0/24 src-address=\
192.168.188.0/24
add action=accept chain=forward dst-address=192.168.188.0/24 src-address=\
10.103.14.0/24
add action=accept chain=input comment=\
"defconf: accept established,related,untracked" connection-state=\
established,related,untracked
add action=drop chain=input comment="defconf: drop invalid" connection-state=\
invalid
add action=accept chain=input comment="defconf: accept ICMP" protocol=icmp
add action=accept chain=input comment=\
"defconf: accept to local loopback (for CAPsMAN)" dst-address=127.0.0.1
add action=drop chain=input comment="defconf: drop all not coming from LAN" \
in-interface-list=!LAN
add action=accept chain=forward comment="defconf: accept in ipsec policy" \
ipsec-policy=in,ipsec
add action=accept chain=forward comment="defconf: accept out ipsec policy" \
ipsec-policy=out,ipsec
add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \
connection-state=established,related hw-offload=yes
add action=accept chain=forward comment=\
"defconf: accept established,related, untracked" connection-state=\
established,related,untracked
add action=drop chain=forward comment="defconf: drop invalid" \
connection-state=invalid
add action=drop chain=forward comment=\
"defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \
connection-state=new in-interface-list=WAN
/ip firewall nat
add action=masquerade chain=srcnat comment="defconf: masquerade" \
ipsec-policy=out,none out-interface-list=WAN
add action=masquerade chain=srcnat out-interface=wireguard1
/ip route
add disabled=yes distance=1 dst-address=10.103.14.0/24 gateway=wireguard1 \
pref-src="" routing-table=main scope=30 suppress-hw-offload=no \
target-scope=10
/ipv6 firewall address-list
add address=::/128 comment="defconf: unspecified address" list=bad_ipv6
add address=::1/128 comment="defconf: lo" list=bad_ipv6
add address=fec0::/10 comment="defconf: site-local" list=bad_ipv6
add address=::ffff:0.0.0.0/96 comment="defconf: ipv4-mapped" list=bad_ipv6
add address=::/96 comment="defconf: ipv4 compat" list=bad_ipv6
add address=100::/64 comment="defconf: discard only " list=bad_ipv6
add address=2001:db8::/32 comment="defconf: documentation" list=bad_ipv6
add address=2001:10::/28 comment="defconf: ORCHID" list=bad_ipv6
add address=3ffe::/16 comment="defconf: 6bone" list=bad_ipv6
/ipv6 firewall filter
add action=accept chain=input comment=\
"defconf: accept established,related,untracked" connection-state=\
established,related,untracked
add action=drop chain=input comment="defconf: drop invalid" connection-state=\
invalid
add action=accept chain=input comment="defconf: accept ICMPv6" protocol=\
icmpv6
add action=accept chain=input comment="defconf: accept UDP traceroute" port=\
33434-33534 protocol=udp
add action=accept chain=input comment=\
"defconf: accept DHCPv6-Client prefix delegation." dst-port=546 protocol=\
udp src-address=fe80::/10
add action=accept chain=input comment="defconf: accept IKE" dst-port=500,4500 \
protocol=udp
add action=accept chain=input comment="defconf: accept ipsec AH" protocol=\
ipsec-ah
add action=accept chain=input comment="defconf: accept ipsec ESP" protocol=\
ipsec-esp
add action=accept chain=input comment=\
"defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec
add action=drop chain=input comment=\
"defconf: drop everything else not coming from LAN" in-interface-list=\
!LAN
add action=accept chain=forward comment=\
"defconf: accept established,related,untracked" connection-state=\
established,related,untracked
add action=drop chain=forward comment="defconf: drop invalid" \
connection-state=invalid
add action=drop chain=forward comment=\
"defconf: drop packets with bad src ipv6" src-address-list=bad_ipv6
add action=drop chain=forward comment=\
"defconf: drop packets with bad dst ipv6" dst-address-list=bad_ipv6
add action=drop chain=forward comment="defconf: rfc4890 drop hop-limit=1" \
hop-limit=equal:1 protocol=icmpv6
add action=accept chain=forward comment="defconf: accept ICMPv6" protocol=\
icmpv6
add action=accept chain=forward comment="defconf: accept HIP" protocol=139
add action=accept chain=forward comment="defconf: accept IKE" dst-port=\
500,4500 protocol=udp
add action=accept chain=forward comment="defconf: accept ipsec AH" protocol=\
ipsec-ah
add action=accept chain=forward comment="defconf: accept ipsec ESP" protocol=\
ipsec-esp
add action=accept chain=forward comment=\
"defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec
add action=drop chain=forward comment=\
"defconf: drop everything else not coming from LAN" in-interface-list=\
!LAN
/system clock
set time-zone-name=Europe/Warsaw
/system note
set show-at-login=no
/tool mac-server
set allowed-interface-list=LAN
/tool mac-server mac-winbox
set allowed-interface-list=LAN
My goal: be able to reach the UDM and other things in site B by devices on site A and vice versa.
Issue: i see packages going out, but not returning and have no idea where i should look to solve this.
