找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 2080|回复: 8

[Router OS] RouterOS 配合 wireguard 回家教程

[复制链接]
本帖最后由 白云朵朵 于 2024-2-28 16:44 编辑


2024年2月28日更新:删除了原教程中添加静态路由一步,余处未改动。原因是第二步为wireguard接口分配IP后,routeros会自动创建路由规则,不需要自行设置。之前按照教程操作过的网友可以把自己创建的这条静态路由规则删了。





使用场景:


家里有IPv4公网地址(动态),想通过安卓手机在外面连回家访问内网资源。RouterOS为主路由,已升级到 7.13.4(x86)版本。RouterOS的wireguard教程网上其实有很多,但是大部分没有讲如何配置防火墙,所以折腾了很久才搞定,过程供后来人参考。




1. RouterOS中新建wireguard端口


端口尽量不要用RouterOS默认的13231端口,我这里改成了6666。你可以根据自身喜好随意设置,不过记得一会儿设置防火墙规则时要用到,RouterOS并不会自动添加(许多教程没有提到的第一个坑点,可能认为过于基础了)。另外我涂掉的Public Key请记录,一会儿要用到。
2.为wireguard端口分配IP地址


IP -> Addresses 菜单,点击 “+” 新建,第一行填写 192.168.10.1/24 ,Interface选择刚才新建的wireguard接口,如果没改名就是默认的wireguard1。注意,这个网段必须不同于局域网中间的Network不用填,点击确定后会自动生成。这里的含义简单解释下,我们给RouterOS的wireguard1端口分配了192.168.10.1这个地址,一会儿组网要用到。

3.添加防火墙规则


RouterOS中点击New Terminal打开命令行界面,复制   /ip/firewall/filter/add action=accept chain=input dst-port=6666 log=yes log-prefix=wg: protocol=udp  一句进去然后敲回车,防火墙规则就添加好了。注意我在这里用到的端口号是6666,与第一步保持一致。然后进入防火墙 Filter Rules界面,把刚才的规则(在最下面)往上拉拉,左键点击拖曳即可。这些防火墙规则都是自上而下执行,所以如果你的防火墙规则比较多,之前又有某个规则先匹配上,后面的规则就不会被执行。自此RouterOS设置告一段落,下面再来配置安卓手机端。


4.配置安卓手机客户端


Play Store直接下载wireguard官方客户端。详解各个配置项。先看本地(Interface):
名称:随便填个自己喜欢的名字。
私钥:自动生成的不用修改,点击右面的刷新符号可以更换新密钥。请点击进去全选密钥复制出来,一会儿要用到。

公钥:由私钥自动算出来的,二者间具备一一对应关系。一会儿其实真正要用到的是这个公钥,不过这个客户端里的公钥貌似并不能选中复制,不过有私钥就可以生成公钥,所以问题不大。
局域网IP地址:给手机客户端分配的wireguard组网IP地址,需要和RouterOS中wireguard1端口IP地址在一个网段。简要回顾,刚才RouterOS中给wireguard1设置的IP地址是192.168.10.1/24,所以这里给手机分配192.168.10.2/32即可。
DNS服务器:填写一个公网DNS即可,例如114.114.114.114,注意不要填内网地址。
监听端口和MTU不用填。

然后配置远程(Peer):
对于手机端而言,远程Peer当然就是指我们的RouterOS。
公钥:填写 RouterOS中wireguard1端口的公钥,请见步骤一。
预共享密钥:不填
连接保活间隔:10 。这个可以酌情大一些,但是如果太大,可能会出现超时断连的情况。
对端:RouterOS的动态域名 + wireguard1端口号。例如,RouterOS的IPv4地址被动态解析到ros.ithome.com,刚才wireguard1的端口号为6666,那么这里就填 ros.ithome.com:6666
路由的IP地址(段):这里最值得一讲,填在这里的IP段才是安卓端会转发给RouterOS的流量,以外地址的流量不会走wireguard,仍为直连!本例中,我只想访问家里内网资源,也就是说只需要访问10.89.1.0/24这个局域网网段。至于wireguard网段192.168.10.0/24也给他附带加上。如果你想所有流量都通过wireguard转发,这里只填 0.0.0.0/0 就行了。至此安卓端配置完成,不过。。。
现在还连不上~原因很简单,RoutreOS这边的weireguard还不认识安卓端这个peer,需要回到RouterOS中继续添加peer信息!
5.在RouterOS中添加Peer信息


主菜单 WireGuard -> Peers,点击 "+" 新建 peer。配置项介绍:
Interface:就是之前创建的wireguard1,点击下拉菜单选中即可。
Public Key:我们已经有了安卓端的Private Key,所以Public Key不填。
Private Key:把刚才安卓端的Private Key复制进去。一会保存后RouterOS会根据这个Private Key计算出Public Key并自动填写,算出来的这个Public Key与安卓端中的Public Key是一样的(虽然是废话,不过还是多说几句 2333)
Allowed Addresses: 192.168.10.2/32,和刚才的安卓端配置保持一致,如果不一样就连不上了。
配置结束后点击OK就万事大吉。我截图中还填写了Client Listen Port为6666,不过实测不填也没有影响。 (完)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

评分

参与人数 1恩山币 +1 收起 理由
空间直*** + 1 好帖

查看全部评分

我的恩山、我的无线 The best wifi forum is right here.
感谢分享
楼主可以再分享下自己的防火墙吗

点评

我的防火墙规则来自这里:最新ROS防火墙初级和高级规则脚本,需要的拿去吧 在初级脚本基础上添加了openconnect(443,TCP),wireguard(6666,UDP)端口转发以及FULLCONE功能: 保存成文本文件(fullcone.rsc  详情 回复 发表于 2024-2-22 09:56
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

学习了,谢谢分享
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| | 显示全部楼层
firmfe 发表于 2024-2-21 17:08
感谢分享
楼主可以再分享下自己的防火墙吗

我的防火墙规则来自这里:最新ROS防火墙初级和高级规则脚本,需要的拿去吧
在初级脚本基础上添加了openconnect(443,TCP),wireguard(6666,UDP)端口转发以及FULLCONE功能:


  1. # 2024-02-20 22:56:17 by RouterOS 7.13.4
  2. # software id = TI09-7WK3
  3. #
  4. /ip firewall address-list
  5. add address=10.89.1.2-10.89.1.254 list=allowed_to_router
  6. add address=0.0.0.0/8 comment=RFC6890 list=not_in_internet
  7. add address=172.16.0.0/12 comment=RFC6890 list=not_in_internet
  8. add address=192.168.0.0/16 comment=RFC6890 list=not_in_internet
  9. add address=10.0.0.0/8 comment=RFC6890 list=not_in_internet
  10. add address=169.254.0.0/16 comment=RFC6890 list=not_in_internet
  11. add address=127.0.0.0/8 comment=RFC6890 list=not_in_internet
  12. add address=224.0.0.0/4 comment=Multicast list=not_in_internet
  13. add address=198.18.0.0/15 comment=RFC6890 list=not_in_internet
  14. add address=192.0.0.0/24 comment=RFC6890 list=not_in_internet
  15. add address=192.0.2.0/24 comment=RFC6890 list=not_in_internet
  16. add address=198.51.100.0/24 comment=RFC6890 list=not_in_internet
  17. add address=203.0.113.0/24 comment=RFC6890 list=not_in_internet
  18. add address=100.64.0.0/10 comment=RFC6890 list=not_in_internet
  19. add address=240.0.0.0/4 comment=RFC6890 list=not_in_internet
  20. add address=192.88.99.0/24 comment="6to4 relay Anycast [RFC 3068]" list=\
  21.     not_in_internet
  22. add list=ddos-attackers
  23. add list=ddos-target
  24. /ip firewall filter
  25. add action=accept chain=input comment=\
  26.     "Protect the router itself:default configuration" connection-state=\
  27.     established,related
  28. add action=accept chain=input src-address-list=allowed_to_router
  29. add action=accept chain=input protocol=icmp
  30. add action=accept chain=input dst-port=6666 log=yes log-prefix=wg: protocol=\
  31.     udp
  32. add action=drop chain=input
  33. add action=fasttrack-connection chain=forward comment=FastTrack \
  34.     connection-state=established,related hw-offload=yes
  35. add action=accept chain=forward comment="Established, Related" \
  36.     connection-state=established,related
  37. add action=drop chain=forward comment="Drop invalid" connection-state=invalid \
  38.     log=yes log-prefix=invalid
  39. add action=drop chain=forward comment=\
  40.     "Drop tries to reach not public addresses from LAN" dst-address-list=\
  41.     not_in_internet in-interface=ether2-LAN log=yes log-prefix=\
  42.     !public_from_LAN out-interface=!ether2-LAN
  43. add action=drop chain=forward comment=\
  44.     "Drop incoming packets that are not NAT`ted" connection-nat-state=!dstnat \
  45.     connection-state=new in-interface=ether1-WAN log=yes log-prefix=!NAT
  46. add action=jump chain=forward comment="jump to ICMP filters" jump-target=icmp \
  47.     protocol=icmp
  48. add action=drop chain=forward comment=\
  49.     "Drop incoming from internet which is not public IP" in-interface=\
  50.     ether1-WAN log=yes log-prefix=!public src-address-list=not_in_internet
  51. add action=drop chain=forward comment=\
  52.     "Drop packets from LAN that do not have LAN IP" in-interface=ether2-LAN \
  53.     log=yes log-prefix=LAN_!LAN src-address=!10.89.1.0/24
  54. add action=accept chain=icmp comment="Allow only needed icmp:echo reply" \
  55.     icmp-options=0:0 protocol=icmp
  56. add action=accept chain=icmp comment="net unreachable" icmp-options=3:0 \
  57.     protocol=icmp
  58. add action=accept chain=icmp comment="host unreachable" icmp-options=3:1 \
  59.     protocol=icmp
  60. add action=accept chain=icmp comment=\
  61.     "host unreachable fragmentation required" icmp-options=3:4 protocol=icmp
  62. add action=accept chain=icmp comment="allow echo request" icmp-options=8:0 \
  63.     protocol=icmp
  64. add action=accept chain=icmp comment="allow time exceed" icmp-options=11:0 \
  65.     protocol=icmp
  66. add action=accept chain=icmp comment="allow parameter bad" icmp-options=12:0 \
  67.     protocol=icmp
  68. add action=drop chain=icmp comment="deny all other types"
  69. add action=return chain=detect-ddos comment="DDoS Protection" dst-limit=\
  70.     32,32,src-and-dst-addresses/10s
  71. add action=add-dst-to-address-list address-list=ddos-target \
  72.     address-list-timeout=10m chain=detect-ddos
  73. add action=add-src-to-address-list address-list=ddos-attackers \
  74.     address-list-timeout=10m chain=detect-ddos
  75. /ip firewall nat
  76. add action=endpoint-independent-nat chain=srcnat comment=FullCone-Nat \
  77.     protocol=udp randomise-ports=no
  78. add action=endpoint-independent-nat chain=dstnat comment=FullCone-Nat \
  79.     protocol=udp randomise-ports=no
  80. add action=masquerade chain=srcnat
  81. add action=masquerade chain=srcnat dst-address=10.89.1.0/24 out-interface=\
  82.     ether2-LAN src-address=10.89.1.0/24
  83. add action=dst-nat chain=dstnat comment=\
  84.     "Open 4443 TCP port for openconnect clients" dst-port=4443 protocol=tcp \
  85.     to-addresses=10.89.1.15 to-ports=4443
  86. /ip firewall raw
  87. add action=drop chain=prerouting dst-address-list=ddos-target \
  88.     src-address-list=ddos-attackers
复制代码


保存成文本文件(fullcone.rsc)上传RouterOS,然后用命令导入就行了。注意替换 ether1-WAN、ether2-LAN以及局域网地址
  1. import file-name=fullcone.rsc
复制代码







点评

为了避免有人踩坑需要指出这个防火墙规则存在的一点小问题: 第39行, 这一句可以酌情考虑删除或禁用,其作用是不允许私网IP地址作为目的地访问非LAN接口。问题在哪里呢?以访问桥接后的光猫为例,为了能够访问桥接  详情 回复 发表于 2024-2-28 16:52
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

谢谢指导 需要个域名 已搞定
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| | 显示全部楼层
白云朵朵 发表于 2024-2-22 09:56
我的防火墙规则来自这里:最新ROS防火墙初级和高级规则脚本,需要的拿去吧
在初级脚本基础上添加了openc ...

为了避免有人踩坑需要指出这个防火墙规则存在的一点小问题:
第39行,
  1. add action=drop chain=forward comment=\
  2.     "Drop tries to reach not public addresses from LAN" dst-address-list=\
  3.     not_in_internet in-interface=ether2-LAN log=yes log-prefix=\
  4.     !public_from_LAN out-interface=!ether2-LAN
复制代码
这一句可以酌情考虑删除或禁用,其作用是不允许私网IP地址作为目的地访问非LAN接口。问题在哪里呢?以访问桥接后的光猫为例,为了能够访问桥接后的光猫,我们需要给routeros的WAN口分配一个与光猫同网段的IP地址(私网IP),然后添加一条NAT规则,这样就能直接访问光猫地址。这一过程中,我们访问的光猫地址属于私网IP,出口是WAN,触发了上面这一条防火墙过滤规则,于是数据包直接被DROP掉了,结果就是没法访问光猫






我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

我的没有接收流量什么问题啊
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

每个设备终端都要重新生成个配置吗 公钥  私钥啥的
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| | 显示全部楼层
cw4774 发表于 2024-3-30 20:23
每个设备终端都要重新生成个配置吗 公钥  私钥啥的

对,公钥就像身份证一样,每个设备都要生成并告知,否则无法连接
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /1 下一条

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-4-30 16:03

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表