使用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
主题 StackJimmy 设计