[RouterOS][純文字筆記]_RouterOS site to site Ubuntu WireGuard VPN
最近有個需求是要翻去US region,但礙於本地端的client裝置不是智慧型裝置,無法用常見的client-server vpn做設定,所以有了site to site vpn這篇誕生。
以前就知道site to site vpn的存在,但因為需求的關係,其實一直沒有實作,這邊也記錄了一下。
懶的畫圖,文字描述一下這次的需求:
- RouterOS作為WireGuard端的Peer(Client),但這樣講述其實不是這麼精確,WireGuard並沒有client-server的概念。不過為了好理解,先這樣說明吧!
- Ubuntu作為WireGuard端的Server端,同第一點,這邊也只是因為好理解這樣稱呼。我這邊因為要跳去US,所以在GCP上開一台起來裝。
- RouterOS透過WireGuard連去Ubuntu,同時Route所有的流量到Ubuntu出去。簡單來說就是讓接在Router OS後面的所有裝置都能走Ubuntu的外網IP出去。
所以大概可以分為兩階段
- Server端安裝WireGuard
- 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
儲存離開
這邊有幾個重要訊息稍後會用上
- Server side這邊的WG gateway ip設定為172.16.0.1
- 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
WireGuard Site to Site VPN Between MikroTik RouterOS 7
Leave a comment
很抱歉,必須登入網站才能發佈留言。