B-02 异地组网
多台 Openwrt Wireguard 异地组网方案
前言
如今互联网科技发展日新月异,有越来越多企业提出了基于互联网化的应用办公需求,诸如居家办公、在外出差、或者跨地区合作,这些办公场景的实现都离不开远程/异地访问的支持,企业方往往会选择异地组网的方式去进行有效解决。在众多组网方案中,蒲公英和 ZeroTier 则是两个比较具有代表性的方案。但前者非零成本,后者稳定性及速度堪忧。那有无“即XXX又XXX”的方案呢?当然有,具体实现详情见下。
使用场景
我承认想偷懒,问了下GPT,以幽默的方式描述三个美好的“异地组网”场景,他的回答很幽默,所以我还是描述下本人常用的两个。其他场景,等着各位小伙伴大开脑洞来补充吧。:)
场景1:
A地有1台电信机顶盒,开通了电视,B,C两地均有网,但未开通电视,以A地为服务端,B,C两地组网后取用A地的信源就可以三地同享直播电视。
场景2:
A地建有1台私服,各地小伙伴加入组网后,可随时登录私服一起happy!
本案前置环境
本案效果展示
方案
前提条件
两地至少有一地为公网,一般将有公网的一端配置为服务端
A地:openwrt A + wireguard接口(公钥A+私钥A)--本次视为服务端
B地:openwrt B + wireguard接口(公钥B+私钥B)
方案只讲重点部分,关于其他细节请参看前篇博文《B-01 WireGuard 服务端及客户端配置教程》
A端
interface部分
peer结点
B端(默认使用UDP端口)
interface部分
peer结点
端点主机:为A端的动态域名,如果你是架设在云服务器上,此处填写上云服务器的IP地址即可
端口:为A端WG的监听端口
静态路由设定
设置完成后,B地网段内主机即可正常访问A地网段。
注意事项
1.A端监听端口记得在防火墙中设置开放,另WG接口设置中,WG可以共用LAN也可以自建,我这里借用的是默认留作VPN使用的防火墙。
2.博主当地运营商对于UDP端口相对友好,故如上设置亦可互访,但各地情况会有差异,若碰到对UDP极不友好的运营商,就要拿出udp2raw这个NB的武器了。他的主要作用是将UDP数据包以TCP/ICMP头进行伪造,帮助我们绕过UDP屏蔽、UDP QOS或其他不正确的UDP NAT行为。要想详细了解,各位请至大神主页了解,本人不过多赘述。
udp2raw和WG配合使用,突破UDP封烦
相关文件的下载请至下载部分,包括udp2raw.server.conf,udp2rawserver,udp2raw.client.conf,udp2rawclient,udp2raw_amd64,记得各文件权限均设置为777,可执行状态。
1.A端 WG设置不变,SSH至Openwrt后,将udp2raw执行文件放置于/usr/bin下,在/root目录下放置udp2raw.server.conf文件,在/etc/init.d文件下放置udp2rawserver执行脚本文件
1.B端 WG设置变化,将endpoint调整为127.0.0.1,SSH至Openwrt后,将udp2raw执行文件放置于/usr/bin下,在/root目录下放置udp2raw.client.conf文件,在/etc/init.d文件下放置udp2rawclient执行脚本文件
udp2raw.server.conf文件内容,重要参数含义-S:作为服务端,-l 监听21333端口,-r 转发到本机38765端口,其他参考可SSH至指定目录后运行即可了解详情。
-s
-l 0.0.0.0:21333
-r 127.0.0.1:38765
--raw-mode faketcp
--key faketcp123456
--cipher-mode aes128cbc
--auth-mode md5
--retry-on-error
--disable-color
-a
udp2raw.server.conf文件内容,重要参数含义-C:作为客户端,-l 监听38765端口,-r 转发到本机21333 端口,其中服器端IP地址,指的是A地的公网地址
-c
-l 127.0.0.1:38765
-r 服务端IP地址:21333
--raw-mode faketcp
--key faketcp123456
--cipher-mode aes128cbc
--auth-mode md5
--retry-on-error
--disable-color
-a
udp2rawserver文件内容,主要是方便以后每次启动udp2raw,通过执行“/etc/init.d/udp2rawserver start”启动,通过“/etc/init.d/udp2rawserver stop”停止
APP=udp2rawserver
SERVICE_WRITE_PID=1
SERVICE_DAEMONIZE=1
start() {
service_start /usr/bin/udp2raw_amd64 --conf-file /root/udp2raw.server.conf
}
stop() {
service_stop /usr/bin/udp2raw_amd64 --conf-file /root/udp2raw.server.conf
}
udp2rawclient文件内容,主要是方便以后每次启动udp2raw,通过执行“/etc/init.d/udp2rawclient start”启动,通过“/etc/init.d/udp2rawclient stop”停止
APP=udp2rawserver
SERVICE_WRITE_PID=1
SERVICE_DAEMONIZE=1
start() {
service_start /usr/bin/udp2raw_amd64 --conf-file /root/udp2raw.client.conf
}
stop() {
service_stop /usr/bin/udp2raw_amd64 --conf-file /root/udp2raw.client.conf
}