请选择 进入手机版 | 继续访问电脑版
查看: 9662|回复: 78

[分享] USG 双WAN策略路由配置示例

[复制链接]

19

主题

244

帖子

1356

积分

有线传输

Rank: 5

积分
1356
发表于 2018-2-23 14:11:37 | 显示全部楼层 |阅读模式
本帖最后由 benjaminlei 于 2018-5-10 10:23 编辑

场景:
本文以国外游戏加速为例,把国外的流量路由到WAN2,国内流量则走WAN1出口。
WAN2的上级是一个Ubuntu server,安装了国外游戏代理服务,所有进入的流量都会加速,本文暂不讨论 Ubuntu Server下各种服务的安装。
拓扑如下图:
abc.png
1、配置USG的双WAN。
2018-02-23_11-13-42.png
2、因为Unifi 5.6.30的双WAN模式暂不支持策略路由,只能在failover和weight模式中选一种(随便选,反正这部分配置后面要被删掉),配置完成以后,Unifi自动向USG产生了一系列的配置,包括Load Balance、Firewall、WAN2的NAT规则等,等待同步完成。
4、接下就是在这个配置上面改一改,通过config.gateway.json(本文以Ubuntu Server 16.04为例,放置在/var/lib/unifi/sites/default/下)文件中,覆盖Load Balance的设置,然后新建PBR规则,config.gateway.json,要点如下:
首先,用两处“”空字符串覆盖l自动load-balance,我们目的是做策略路由,并不需要failover和weight.
其中,rule 110-200,让访问本地的流量不走pbr,rule210是让x86路由不走pbr(很重要!!!),rule220-230,是两个访问控制rule,unifi web里创建了一个地址和端口群组,加到这个群组里的ip或端口,不走pbr。rule 1010-1060是让端口转发规则正常工作,如果创建了相关的端口转发,让相关服务端口不走pbr(本文示例443、8443、5000、5001、3389、6690端口)。rule 2030,让访问chnroute的ip不走pbr。rule 2040,最后剩下的全走pbr。

  1. {
  2.   "load-balance": "''",
  3.   "firewall": {
  4.     "group": {
  5.       "network-group": {
  6.         "chnroute": "''"
  7.       }
  8.     },
  9.     "modify": {
  10.       "LOAD_BALANCE": "''",
  11.       "POLICY_BASED_ROUTING": {
  12.         "rule": {
  13.           "110": {
  14.             "action": "accept",
  15.             "destination": {
  16.               "group": {
  17.                 "network-group": "corporate_network"
  18.               }
  19.             }
  20.           },
  21.           "120": {
  22.             "action": "accept",
  23.             "destination": {
  24.               "group": {
  25.                 "network-group": "remote_user_vpn_network"
  26.               }
  27.             }
  28.           },
  29.           "130": {
  30.             "action": "accept",
  31.             "destination": {
  32.               "group": {
  33.                 "network-group": "remote_site_vpn_network"
  34.               }
  35.             }
  36.           },
  37.           "140": {
  38.             "action": "accept",
  39.             "destination": {
  40.               "group": {
  41.                 "network-group": "remote_client_vpn_network"
  42.               }
  43.             }
  44.           },
  45.           "150": {
  46.             "action": "accept",
  47.             "destination": {
  48.               "group": {
  49.                 "network-group": "guest_network"
  50.               }
  51.             }
  52.           },
  53.           "160": {
  54.             "action": "accept",
  55.             "destination": {
  56.               "group": {
  57.                 "address-group": "guest_portal_address",
  58.                 "port-group": "guest_portal_ports"
  59.               }
  60.             },
  61.             "source": {
  62.               "group": {
  63.                 "network-group": "guest_network"
  64.               }
  65.             }
  66.           },
  67.           "170": {
  68.             "action": "accept",
  69.             "destination": {
  70.               "group": {
  71.                 "network-group": "captive_portal_subnets"
  72.               },
  73.               "port": "443"
  74.             },
  75.             "protocol": "tcp",
  76.             "source": {
  77.               "group": {
  78.                 "network-group": "guest_network"
  79.               }
  80.             }
  81.           },
  82.           "180": {
  83.             "action": "accept",
  84.             "destination": {
  85.               "group": {
  86.                 "address-group": "guest_allow_addresses"
  87.               }
  88.             },
  89.             "source": {
  90.               "group": {
  91.                 "network-group": "guest_network"
  92.               }
  93.             }
  94.           },
  95.           "190": {
  96.             "action": "accept",
  97.             "destination": {
  98.               "address": "127.0.0.0/8"
  99.             }
  100.           },
  101.           "200": {
  102.             "action": "accept",
  103.             "destination": {
  104.               "address": "224.0.0.0/4"
  105.             }
  106.           },
  107.           "210": {
  108.             "action": "accept",
  109.             "source": {
  110.               "address": "192.168.0.254/32"
  111.             }
  112.           },
  113.           "220": {
  114.             "action": "accept",
  115.             "source": {
  116.               "group": {
  117.                 "address-group": "5a43aacfe4b0fcf4541bf289"
  118.               }
  119.             }
  120.           },
  121.           "230": {
  122.             "action": "accept",
  123.             "source": {
  124.               "group": {
  125.                 "port-group": "5a43af76e4b01a55d60f2a20"
  126.               }
  127.             }
  128.           },
  129.           "1010": {
  130.             "action": "accept",
  131.             "protocol": "tcp",
  132.             "source": {
  133.               "port": "5000",
  134.               "group": {
  135.                 "network-group": "corporate_network"
  136.               }
  137.             }
  138.           },
  139.           "1020": {
  140.             "action": "accept",
  141.             "protocol": "tcp",
  142.             "source": {
  143.               "port": "5001",
  144.               "group": {
  145.                 "network-group": "corporate_network"
  146.               }
  147.             }
  148.           },
  149.           "1030": {
  150.             "action": "accept",
  151.             "protocol": "tcp",
  152.             "source": {
  153.               "port": "6690",
  154.               "group": {
  155.                 "network-group": "corporate_network"
  156.               }
  157.             }
  158.           },
  159.           "1040": {
  160.             "action": "accept",
  161.             "protocol": "tcp",
  162.             "source": {
  163.               "port": "8443",
  164.               "group": {
  165.                 "network-group": "corporate_network"
  166.               }
  167.             }
  168.           },
  169.           "1050": {
  170.             "action": "accept",
  171.             "protocol": "tcp",
  172.             "source": {
  173.               "port": "443",
  174.               "group": {
  175.                 "network-group": "corporate_network"
  176.               }
  177.             }
  178.           },
  179.           "1060": {
  180.             "action": "accept",
  181.             "protocol": "tcp",
  182.             "source": {
  183.               "port": "3389",
  184.               "group": {
  185.                 "network-group": "corporate_network"
  186.               }
  187.             }
  188.           },
  189.           "2030": {
  190.             "action": "accept",
  191.             "destination": {
  192.               "group": {
  193.                 "network-group": "chnroute"
  194.               }
  195.             }
  196.           },
  197.           "2040": {
  198.             "action": "modify",
  199.             "protocol": "tcp",
  200.             "modify": {
  201.               "table": "200"
  202.             }
  203.           }
  204.         }
  205.       }
  206.     }
  207.   },
  208.   "interfaces": {
  209.     "ethernet": {
  210.       "eth1": {
  211.         "firewall": {
  212.           "in": {
  213.             "modify": "POLICY_BASED_ROUTING"
  214.           }
  215.         }
  216.       }
  217.     }
  218.   },
  219.   "protocols": {
  220.     "static": {
  221.       "table": {
  222.         "200": {
  223.           "route": {
  224.             "0.0.0.0/0": {
  225.               "next-hop": {               
  226.                 "192.168.2.1": "''"
  227.               }
  228.             }
  229.           },
  230.           "interface-route": {
  231.             "192.168.0.0/24": {
  232.               "next-hop-interface": {               
  233.                 "eth1": "''"
  234.               }
  235.             },
  236.             "192.168.2.0/24": {
  237.               "next-hop-interface": {               
  238.                 "eht2": "''"
  239.               }
  240.             }
  241.           }
  242.         }
  243.       }
  244.     }
  245.   }
  246. }

复制代码
5、加载chnroue
新建/config/scripts/post-config.d/gateway2.sh,并赋予执行权限,脚本内容如下:
  1. #!/bin/bash
  2. #把chnroute.txt放在/config/user-data/下
  3. CHNROUTE_RULES=/config/user-data/chnroute.txt
  4. CHNROUTE_RULES_CACHE=/config/user-data/chnroute.ipset

  5.   if [ -e $CHNROUTE_RULES_CACHE ]; then
  6.       ipset -! restore < $CHNROUTE_RULES_CACHE
  7.   else
  8.       sed -e "s/^/add chnroute &/g" $CHNROUTE_RULES | awk '{print $0} END{print "COMMIT"}' | ipset -R
  9.       ipset save chnroute > $CHNROUTE_RULES_CACHE
  10.   fi
复制代码

6、强制同步一次,重启生效。
7、本文仅用于国外游戏加速,其他用途可能需要DNS相关设置,本文不做讨论。
8、修改json文件时,特别注意,修改完了一定要用在线json校验一下语法。

评分

参与人数 1U币 +200 收起 理由
ubnt-tru + 200 很给力!

查看全部评分

回复

使用道具 举报

19

主题

244

帖子

1356

积分

有线传输

Rank: 5

积分
1356
 楼主| 发表于 2018-2-23 17:14:48 | 显示全部楼层
本帖最后由 benjaminlei 于 2018-2-23 17:16 编辑
KingWong 发表于 2018-2-23 16:35
多谢指点:
参考您的结构图,我针对自己的也画了一下如图。

你用的openwrt?如果没有其他服务部署,你图中eth0应该是WAN口,让openwrt的默认流量从eth0出去,我用的ubuntu,并没有WAN Zone和Lan Zone的划分。
回复 支持 1 反对 0

使用道具 举报

11

主题

120

帖子

952

积分

飞鸽传书

Rank: 4Rank: 4Rank: 4Rank: 4

积分
952
发表于 2018-2-23 15:12:50 | 显示全部楼层
给大神点个赞。
不过还是略感复杂,之前看过一个方法跑双美元的,用大神这个图来描述一下,1、上图Ubuntu server这个设备换成一台能跑梅林的设备;2、能跑梅林的设备接在上图LAN(交换机)的端口下;3、跑梅林的设备单独设一个SSID,需要跑双美元的设备连接梅林设备(应该无线SSID或走网线都可以吧)就OK了。
因为最近没有跑双美元的迫切需要,所以也只是看了没实施过,效果如何更不清楚了,请大神指点。
回复 支持 反对

使用道具 举报

41

主题

480

帖子

1856

积分

有线传输

Rank: 5

积分
1856
发表于 2018-2-23 15:41:29 | 显示全部楼层
多谢大神指点~~~~~~
回复 支持 反对

使用道具 举报

41

主题

480

帖子

1856

积分

有线传输

Rank: 5

积分
1856
发表于 2018-2-23 15:44:32 | 显示全部楼层
eyestart 发表于 2018-2-23 15:12
给大神点个赞。
不过还是略感复杂,之前看过一个方法跑双美元的,用大神这个图来描述一下,1、上图Ubuntu s ...

这个类似我的透明网关的方案。
回复 支持 反对

使用道具 举报

19

主题

244

帖子

1356

积分

有线传输

Rank: 5

积分
1356
 楼主| 发表于 2018-2-23 16:20:15 | 显示全部楼层
eyestart 发表于 2018-2-23 15:12
给大神点个赞。
不过还是略感复杂,之前看过一个方法跑双美元的,用大神这个图来描述一下,1、上图Ubuntu s ...

那种方案并不好,一是,手动切换太麻烦,google依赖者,用起来会太麻烦。二是,梅林平台跑代理性能一般,以前用AC68u,性能和USG直接跑差不多,30M极限了。USG擅长NAT,适合当主路由,通过策略把不擅长的功能甩出去,Ubuntu来接,除此之外,Ubuntu平台还可以部署Unifi,HomeKit等等,无论是性价比还是可玩性都比梅林设备高。
回复 支持 反对

使用道具 举报

41

主题

480

帖子

1856

积分

有线传输

Rank: 5

积分
1856
发表于 2018-2-23 16:35:07 | 显示全部楼层
本帖最后由 KingWong 于 2018-2-23 16:42 编辑

多谢指点:
参考您的结构图,我针对自己的也画了一下如图。
网络结构.jpg

确定一下。X86主机上Eth1这个口是设置为LAN没错吧。不用设为WAN吧。
回复 支持 反对

使用道具 举报

6

主题

37

帖子

370

积分

烽火狼烟

Rank: 3Rank: 3Rank: 3

积分
370
发表于 2018-2-23 17:12:03 来自手机 | 显示全部楼层
固件升级后,修改的配置文件不会被覆盖吧?
回复 支持 反对

使用道具 举报

41

主题

480

帖子

1856

积分

有线传输

Rank: 5

积分
1856
发表于 2018-2-23 17:19:23 | 显示全部楼层
benjaminlei 发表于 2018-2-23 17:14
你用的openwrt?如果没有其他服务部署,你图中eth0应该是WAN口,让openwrt的默认流量从eth0出去。 ...

这样我就明白了。多谢指点。
我就eth0设为WAN口,eth1设置为LAN口。之前没想明白~~~~~
用的LEDE(和openwrt合并了),没其他服务部署。
回复 支持 反对

使用道具 举报

41

主题

480

帖子

1856

积分

有线传输

Rank: 5

积分
1856
发表于 2018-2-23 17:26:00 | 显示全部楼层
benjaminlei 发表于 2018-2-23 17:14
你用的openwrt?如果没有其他服务部署,你图中eth0应该是WAN口,让openwrt的默认流量从eth0出去,我用的ub ...

这样设置后。X86主机的管理IP是哪一个啊
回复 支持 反对

使用道具 举报

19

主题

244

帖子

1356

积分

有线传输

Rank: 5

积分
1356
 楼主| 发表于 2018-2-23 17:36:32 | 显示全部楼层
KingWong 发表于 2018-2-23 17:26
这样设置后。X86主机的管理IP是哪一个啊

192.168.100.1,你在unifi配置好wan2,后,按理就可以通过192.168.99.x访问到192.168.100.1
回复 支持 反对

使用道具 举报

41

主题

480

帖子

1856

积分

有线传输

Rank: 5

积分
1856
发表于 2018-2-23 17:55:40 | 显示全部楼层
benjaminlei 发表于 2018-2-23 17:36
192.168.100.1,你在unifi配置好wan2,后,按理就可以通过192.168.99.x访问到192.168.100.1 ...

明白了,谢过,周末试一下,多谢指点。
回复 支持 反对

使用道具 举报

41

主题

480

帖子

1856

积分

有线传输

Rank: 5

积分
1856
发表于 2018-2-23 21:53:06 | 显示全部楼层
哈哈 多谢补充最后一段。刚把8000多行放进去,边放变想不会每次都这么复杂吧。
回复 支持 反对

使用道具 举报

41

主题

480

帖子

1856

积分

有线传输

Rank: 5

积分
1856
发表于 2018-2-24 16:03:00 | 显示全部楼层
UCK 控制器的目录: /srv/unifi/data/sites/default/
得回家才能弄了。
远程弄一开启WAN2,主界面的WWW图标就显示黄色,VPN等不进去了。
回复 支持 反对

使用道具 举报

3

主题

23

帖子

313

积分

烽火狼烟

Rank: 3Rank: 3Rank: 3

积分
313
发表于 2018-2-26 13:20:16 | 显示全部楼层
感谢感谢,这就开始搞
回复 支持 反对

使用道具 举报

41

主题

480

帖子

1856

积分

有线传输

Rank: 5

积分
1856
发表于 2018-2-26 14:34:21 | 显示全部楼层
honry 发表于 2018-2-26 13:20
感谢感谢,这就开始搞

周日搞了一半,先回滚了。强制同步后,USG一直无法正常采用。
回复 支持 反对

使用道具 举报

3

主题

23

帖子

313

积分

烽火狼烟

Rank: 3Rank: 3Rank: 3

积分
313
发表于 2018-2-26 16:16:33 | 显示全部楼层
本帖最后由 honry 于 2018-2-26 16:17 编辑
KingWong 发表于 2018-2-26 14:34
周日搞了一半,先回滚了。强制同步后,USG一直无法正常采用。

那我先不搞了,不在家,全部远程操作,不能采用,无法上网的话就GG了,兄弟先搞,没问题了我再远程搞
回复 支持 反对

使用道具 举报

41

主题

480

帖子

1856

积分

有线传输

Rank: 5

积分
1856
发表于 2018-2-26 16:19:53 | 显示全部楼层
honry 发表于 2018-2-26 16:16
那我先不搞了,不在家,全部远程操作,不能采用,无法上网的话就GG了,兄弟先搞,没问题了我再远程搞 ...

我是在家里搞的。
远程搞遇到的问题是一开WAN2. VPN就无法开启,就没办法SSH。
建议在家里搞,有问题可以随时现场弄。
远程有点麻烦,毕竟一改设置USG就要重新采用一次。
回复 支持 反对

使用道具 举报

41

主题

480

帖子

1856

积分

有线传输

Rank: 5

积分
1856
发表于 2018-2-26 16:29:54 | 显示全部楼层
本帖最后由 KingWong 于 2018-2-26 16:37 编辑

大神。问一下看您编辑过的第二次需要强制同步和config.gateway.json的代码和第一次的有很多变化,我周日用您第一稿的代码强制同步一直USG无法采用。所以放弃了。
1、我是按您第一稿代码的提示,把强制走WAN1的chnroute,主机IP、端口增加进去。其他没动,直接替换第一个JS,然后USG采用失败不停在重启了。
(USG 4 pro的WAN2 对应是eth3这个我修改了,第一个JS执行成功)

2、是不是用您更新过的代码比较好些,第二稿代码是把指定走WAN2的标出来了,我只有几台机器要跑WAN2,是在哪一段增加这几台机器的IP就可以吗?

求指教。

回复 支持 反对

使用道具 举报

19

主题

244

帖子

1356

积分

有线传输

Rank: 5

积分
1356
 楼主| 发表于 2018-2-26 16:44:54 | 显示全部楼层
KingWong 发表于 2018-2-26 16:29
大神。问一下看您编辑过的第二次需要强制同步和config.gateway.json的代码和第一次的有很多变化,我周日用 ...

忘了简化了。。。直接贴出来了。。。里面还有我的V_N设置。。。晚上回去改一下。。。
回复 支持 反对

使用道具 举报

41

主题

480

帖子

1856

积分

有线传输

Rank: 5

积分
1856
发表于 2018-2-26 16:58:59 | 显示全部楼层
benjaminlei 发表于 2018-2-26 16:44
忘了简化了。。。直接贴出来了。。。里面还有我的V_N设置。。。晚上回去改一下。。。 ...

哈哈。下午才发现代码变了。仔细研究了一下,没看懂~~~
能参考第一稿那样,标注一下哪里输入什么吗?
回复 支持 反对

使用道具 举报

3

主题

23

帖子

313

积分

烽火狼烟

Rank: 3Rank: 3Rank: 3

积分
313
发表于 2018-2-26 18:57:48 | 显示全部楼层
KingWong 发表于 2018-2-26 16:19
我是在家里搞的。
远程搞遇到的问题是一开WAN2. VPN就无法开启,就没办法SSH。
建议在家里搞,有问题可以 ...

兄弟搞好了麻烦到时分享下经验哈,我还在离家1000+KM的地方远程,实在不敢随便搞
回复 支持 反对

使用道具 举报

3

主题

23

帖子

313

积分

烽火狼烟

Rank: 3Rank: 3Rank: 3

积分
313
发表于 2018-2-27 17:08:22 | 显示全部楼层
KingWong 发表于 2018-2-23 16:35
多谢指点:
参考您的结构图,我针对自己的也画了一下如图。

我理解是USG的wan2是X86的一个客户端,x86是wan1的一个客户端,我准备用ks的openwrt,eth0设置成wan口dhcp模式,eth1是lan口固定IP开dhcp服务器,wan2开dhcp,,一进一出嘛不知道我理解对不对
回复 支持 反对

使用道具 举报

41

主题

480

帖子

1856

积分

有线传输

Rank: 5

积分
1856
发表于 2018-2-27 17:13:42 | 显示全部楼层
//chnroute太大了,unifi同步不过去,只能先定义,然后启动时用脚本填充。


我周末搞的时候USG一直采用不了。一直重启不会是这个原因把。我放了8000多行~~~~
回复 支持 反对

使用道具 举报

41

主题

480

帖子

1856

积分

有线传输

Rank: 5

积分
1856
发表于 2018-2-27 17:16:36 | 显示全部楼层
如果usg上启用了l2tp服务器,远程用户用户拨进来以后,并不会应用load balance,而且,USG CLI还不支持,把firewall 规则apply到l2tp接口。----------这就是我双WAN之后,L2TP 无法使用的原因把。

多谢大神
回复 支持 反对

使用道具 举报

41

主题

480

帖子

1856

积分

有线传输

Rank: 5

积分
1856
发表于 2018-2-27 17:25:46 | 显示全部楼层
honry 发表于 2018-2-27 17:08
我理解是USG的wan2是X86的一个客户端,x86是wan1的一个客户端,我准备用ks的openwrt,eth0设置成wan口dhc ...

openwrt和LEDE项目合并了。现在就是一个。我用的LEDE,如图的不是最终版本。但是建议不要DHCP。
正确链路应该是(举例)
外网接入WAN1口,内网IP段如果是:192.168.100.*/24,主路由为主网关(192.168.100.1)
X86主机的LAN口(静态192.268.99.1)作为主路由 WAN2(静态192.168.99 .X)的网关。
X86主机的WAN口(192.168.100.*)接到交换机,交换机接到主路由(192.168.100.1).
结合config.gateway.json。可以实现:
所有数据都从主路由先走,按配置需求指定走WAN2的从WAN2走到X86主机之后,回到WAN1出口。这样才能封闭。


回复 支持 反对

使用道具 举报

3

主题

23

帖子

313

积分

烽火狼烟

Rank: 3Rank: 3Rank: 3

积分
313
发表于 2018-2-27 17:29:50 | 显示全部楼层
KingWong 发表于 2018-2-27 17:25
openwrt和LEDE项目合并了。现在就是一个。我用的LEDE,如图的不是最终版本。但是建议不要DHCP。
正确链路 ...

嗯嗯,我就是想省去手动设置IP这步的,我远程好像也可以搞,开个虚拟机,放两张网卡,一张连光猫直接拨号,一张连unifi网络,这样就可以远程折腾了,还好我在临出差前把线都接好了
回复 支持 反对

使用道具 举报

19

主题

244

帖子

1356

积分

有线传输

Rank: 5

积分
1356
 楼主| 发表于 2018-2-27 17:32:01 来自手机 | 显示全部楼层
KingWong 发表于 2018-2-27 17:16
如果usg上启用了l2tp服务器,远程用户用户拨进来以后,并不会应用load balance,而且,USG CLI还不支持,把 ...

并不是,双wan启动后不会影响l2tp的可用性,只是l2tp拨入以后没有load balance的效果,所有流量全是wan1口出去。如果双wan启动后不能用,检查一下ddns。ddns和upnp等服务开了双wan后要指定一下哪个wan口。
回复 支持 反对

使用道具 举报

41

主题

480

帖子

1856

积分

有线传输

Rank: 5

积分
1856
发表于 2018-2-27 17:38:03 | 显示全部楼层
本帖最后由 KingWong 于 2018-2-27 17:40 编辑
benjaminlei 发表于 2018-2-27 17:32
并不是,双wan启动后不会影响l2tp的可用性,只是l2tp拨入以后没有load balance的效果,所有流量全是wan1 ...

好的。先不纠结了。在家里设置,不远程就是了,不影响服务就行。
多咨询一下刚在研究您的代码,其中提到如果gateway2通过pppoe连入,可以调整weight,有带宽叠加的效果。我还有一根宽带不能PPPOE的,只能光猫拨号的,可以用吗?还是必须PPPOE才可以实现带宽叠加的效果。



回复 支持 反对

使用道具 举报

41

主题

480

帖子

1856

积分

有线传输

Rank: 5

积分
1856
发表于 2018-2-27 17:49:03 | 显示全部楼层
honry 发表于 2018-2-27 17:29
嗯嗯,我就是想省去手动设置IP这步的,我远程好像也可以搞,开个虚拟机,放两张网卡,一张连光猫 ...

折腾呗。我只能周末搞,平时得保证网络不断:)
回复 支持 反对

使用道具 举报

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

本版积分规则

优倍快网络技术咨询(上海)有限公司 沪ICP备13034452

© ubnt.com.cn All Rights Reserved.本站发布的所有内容,未经许可,不得转载.

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