使用openwrt,Wireguard將異地的2個網段通過Internet連接到一起

使用Openwrt路由器上的Wirdguard將異地的2個網段通過Internet連接到一起,2個網段之間可以互相訪問,但是上網的流量各自獨立。

目的

異地有2個局域網,都可以訪問Internet, 互相之間不連通。希望通過internet把2個局域網連接到一起,2個局域網內的主機可以互相訪問服務,就像在一個局域網內。但是上網的流量還走原來的,不改變。

網絡要求

  • 最少在一端有一個外網IP地址(可以不是固定IP)
  • 2個局域網內都有openwrt系統,並且安裝了Wireguard.(其他可安裝Wireguard的系統都可以,Openwrt相對更便宜)

安裝和配置

生成 privatekey 和 publickey

每個接口都需要一個privatekey和publickey, 有幾個接口就要生成及對, 這裡需要生成2對,供兩個接口使用

1
2
wg genkey | tee privatekey1 | wg pubkey > publickey1
wg genkey | tee privatekey2 | wg pubkey > publickey2

openwrt界面設置

節點1配置

節點1配置
節點1配置
節點1配置
節點1配置
節點1配置

節點2配置

節點2配置
節點2配置
節點2配置
節點2配置
節點2配置

只有動態Ip時的腳本

如果只有一個動態IP, 當重新撥號,IP改變,會造成連接斷開。

  • 無公網IP端需要檢測到斷線,
  • 然後重新啟動dnsmasq(/etc/init.d/dnsmasq restart) 重新啟動後才能更新到新的動態Ip(需要有公網IP端主動更新動態域名)
  • 無公網IP端主動重新建立連接

完整的腳本如下,需要加入到crontab中

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#!/bin/sh
DATE=$(date +%Y-%m-%d" "%H:%M:%S)
CHECKHOSTNAME="192.168.8.1"
VPNINTERFACE="WG0"

ping -c3 $CHECKHOSTNAME

if [ $? -eq 0 ]; then
    echo "ok"
    logger $(echo "${DATE} - $0: OK - $VPNINTERFACE UP AND RUNNING")

else
    echo "RESTART $VPNINTERFACE Interface"
    logger $(echo "${DATE} - $0: NO VPN CONNECTION RESTART $VPNINTERFACE INTERFACE...")
    /etc/init.d/dnsmasq restart
    ifdown $VPNINTERFACE
    ifup $VPNINTERFACE
fi

CHECKHOSTNAME 是連接節點路由器的地址

配置靜態路由

節點1配置
節點2配置

记录并分享
Built with Hugo
Theme Stack designed by Jimmy