[RouterOS][純文字筆記]_RouterOS site to site Ubuntu WireGuard VPN

最近有個需求是要翻去US region,但礙於本地端的client裝置不是智慧型裝置,無法用常見的client-server vpn做設定,所以有了site to site vpn這篇誕生。

以前就知道site to site vpn的存在,但因為需求的關係,其實一直沒有實作,這邊也記錄了一下。

 

懶的畫圖,文字描述一下這次的需求:

  1. RouterOS作為WireGuard端的Peer(Client),但這樣講述其實不是這麼精確,WireGuard並沒有client-server的概念。不過為了好理解,先這樣說明吧!
  2. Ubuntu作為WireGuard端的Server端,同第一點,這邊也只是因為好理解這樣稱呼。我這邊因為要跳去US,所以在GCP上開一台起來裝。
  3. RouterOS透過WireGuard連去Ubuntu,同時Route所有的流量到Ubuntu出去。簡單來說就是讓接在Router OS後面的所有裝置都能走Ubuntu的外網IP出去。

 

所以大概可以分為兩階段

  1. Server端安裝WireGuard
  2. Client端設定WireGuard+Peer

 

1. Server 端安裝WireGuard

這裡在GCP開Ubuntu,GCP怎操作我就不詳述了。用的是Ubuntu 22.04 LTS

也可以參考這個youtube: https://www.youtube.com/watch?v=cF9dQc6GLTU

(不過後半段它是屬於Client to Site的做法,所以我擷取前半段內容並且微調了一些地方讓NAT可以正常運作,與在Mikrotik論壇上老外的分享綜合整理了一下)

 

#因為要把Ubuntu當Router,起手式可以先開好ipv4 nat

vi /etc/sysctl.d/70-wireguard-routing.conf

#寫入
net.ipv4.ip_forward = 1

#儲存離開後輸入
sudo sysctl -p /etc/sysctl.d/70-wireguard-routing.conf -w

 

建議這裡會先要重開機一下,有時候Ubnutu NAT fw可能不會立即生效

 

#再來先裝好WireGuard

sudo apt install wireguard

#gen pub/private key

wg genkey | tee server_side_privatekey | wg pubkey > server_side_publickey

#接著要編輯wg config

vim /etc/wireguard/wg0.conf

輸入(注意紅字需要調整成你自己的形狀,gcp給的nic interface name有可能是ens4之類的)

[interface]
PrivateKey=剛剛PrivateKey
Address=172.16.0.1/16
SaveConfig=true
PostUp=iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -o eth0 -j MASQUERADE;
PostDown=iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -s 172.16.0.0/24 -o eth0 -j MASQUERADE;
ListenPort=51820

儲存離開

這邊有幾個重要訊息稍後會用上

  1. Server side這邊的WG gateway ip設定為172.16.0.1
  2. Port為51820

 

#接著要把wg開起來

sudo wg-quick up wg0

#看一下wg狀態

sudo wg

#大概會長這樣

interface: wg0
public key: xxxxxxxxxxxxxxxxxxxxxxxxxxx
private key: (hidden)
listening port: 51820

 

到這裡Ubuntu告一段落,稍後還要把Router OS上的wg public key填回來Ubuntu端設定好

2. Client端設定WireGuard+Peer

這裡用的是古老的RouterBoard RB450G,已經升級到RouterOS 7.6,注意WireGuard需要到RouterOS 7以上才有支援(用上Linux Kernel 5.x+)

這邊直接引用老外的作法然後config調整成跟前面youtube一致:
https://forum.mikrotik.com/viewtopic.php?t=181205#p897582

要特別注意的是,以下指令已經把route all network traffic包含其中,用了一個很巧妙的腳本去切換

 

/interface wireguard
add name=wireguard1 private-key=
/interface wireguard peers add interface=wireguard1 endpoint-address=你Ubuntu的外網IP endpoint-port=51820 public-key="剛剛Ubuntu上的server_side_public_key" allowed-address=0.0.0.0/0 persistent-keepalive=10s /ip address add interface=wireguard1 address=172.16.0.2 /ip route add dst-address=你Ubuntu的外網IP comment=wgserver disabled=yes add dst-address=0.0.0.0/0 gateway=wireguard1 /ip dhcp-client add add-default-route=no interface=ether1 script=":local route [/ip route find comment=\"wgserver\"]\r\ \n:if (\$bound=1) do={\r\ \n /ip route set \$route gateway=\$\"gateway-address\" disabled=no\r\ \n} else={\r\ \n /ip route set \$route disabled=yes\r\ \n}" use-peer-dns=no use-peer-ntp=no /interface list member add interface=wireguard1 list=WAN /ip dns set allow-remote-requests=yes servers=8.8.8.8,8.8.4.4

 

設定好之後要到Ubuntu server side註冊一下RouterOS這個peer

sudo wg set wg0 peer routerOS上WG的PublicKey allowed-ips 0.0.0.0/0

 

重啟RouterBoard

看一下peer有沒有流量

然後再回去ubuntu用sudo wg看一下

instance-1:~$ sudo wg
interface: wg0
public key: Ubuntu上WG的public key
private key: (hidden)
listening port: 51820

peer: 你的RouterOS上給的Public key
endpoint: 60.251.xxx.xxx:51820
allowed ips: 0.0.0.0/0
latest handshake: 1 hour, 5 minutes, 32 seconds ago
transfer: 1.06 MiB received, 1.08 MiB sent

如果沒有的話,router os內ping 172.16.0.1看看有沒有通(ubuntu side的wg ip)

然後看一下whatismyip有沒有成功翻牆吧~

 

幾個注意的點:

1. wg interface每次重開機之後預設會是關起來的,peer也會被reset掉,可以自己到/etc/rc.local加入,自動打開~

sudo wg-quick up wg0

sudo wg set wg0 peer routerOS上WG的PublicKey allowed-ips 0.0.0.0/0

 

2. 另外如果你的router有移機更換外部public ip,切記要去Ubuntu上把該peer的config清掉

sudo wg unset wg0 peer routerOS上WG的PublicKey allowed-ips 0.0.0.0/0

或者

vim /etc/wireguard/wg0.conf

把對應peer config給砍了

不然就會遇到你site to site連線連不起來的問題

 

3. 如果你對外不是DHCP拿IP,例如直接是public static ip的做法,也需要請參透一下上文內容自行調整一下script執行時機

 

ref:

https://ubuntu.com/server/docs/wireguard-vpn-defaultgw

https://forum.mikrotik.com/viewtopic.php?t=181205

https://systemzone.net/wireguard-site-to-site-vpn-between-mikrotik-routeros-7/

Leave a comment

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料