RouterOS VPS隧道用于非CN-IP连接
搭建一台外部的RouterOS VPS主机,目的是使用隧道协议连接外部网络
完成在VPS的RouterOS CHR的安装后(参考 RouterOS CHR安装到VPS),测试本地到VPS的网络延迟和丢包在接受范围内,就可以开始正式部署
VPS端RouterOS
隧道协议选择SSTP(也可以选择其他隧道协议,如OVPN,L2TP或者v7支持的wireguard等,根据实际情况而定),启用SSTP协议服务器,默认端口为443,当然端口也可以自己定义
/interface sstp-server server set enabled=yes port=443
创建一个vps策略,定义local-address为10.200.1.1
/ppp profile add local-address=10.200.1.1 name=vps
创建客户端账号和密码为yus,分配该账号的IP地址为10.200.1.2
/ppp secret add name=yus password=yus profile=vps service=sstp remote-address=10.200.1.2
配置nat规则
/ip firewall nat add action=masquerade chain=srcnat
本地RouterOS
本地RouterOS配置,有两种方式,一种是静态路由,将CN地址在/ip route下配置静态路由,另一种是策略路由方式,通过mangle标记:
静态路由方式:
首先创建全国的静态路由表,网关指向拨号网关,这样RouterOS路由器也可以使用VPS的外部路由
/ip route add distance=1 dst-address=1.0.1.0/24 gateway=pppoe-out1 add distance=1 dst-address=1.0.2.0/23 gateway=pppoe-out1 add distance=1 dst-address=1.0.8.0/21 gateway=pppoe-out1 add distance=1 dst-address=1.0.32.0/19 gateway=pppoe-out1 add distance=1 dst-address=1.1.0.0/24 gateway=pppoe-out1 add distance=1 dst-address=1.1.2.0/23 gateway=pppoe-out1 add distance=1 dst-address=1.1.4.0/22 gateway=pppoe-out1 add distance=1 dst-address=1.1.8.0/24 gateway=pppoe-out1 add distance=1 dst-address=1.1.9.0/24 gateway=pppoe-out1 add distance=1 dst-address=1.1.10.0/23 gateway=pppoe-out1 add distance=1 dst-address=1.1.12.0/22 gateway=pppoe-out1
我做的静态路由,当然也可以选择address-list的策略路由,但策略路由配置较多,涉及路由标记和其他配置,所以使用静态路由操作简单,缺点是不易于管理。
静态路由脚本下载(注意:提供的不是.rsc脚本文件,是txt,因为gateway默认设置为pppoe-out1,如果拨号接口名称不一样,或者使用IP作为网关,请自行修改后,导入RouterOS)
提示:需要将指VPS服务器的IP地址走路由器默认路由,如本地光猫拨号pppoe-out1,避免VPS的IP走到隧道,会造成隧道无法建立的问题,如下配置:
/ip route
add distance=1 dst-address=VPS_IP gateway=pppoe-out1
如果你家是光猫拨号,修改pppoe-out1的默认路由距离为3,作为RouterOS的备份默认路由
/interface pppoe-client set name=pppoe-out1 default-route-distance=3
创建sstp客户端,设置了SSTP隧道为默认路由,默认路由距离为1,优先级高于pppoe-out1的默认路由,设置连接的VPS_ip和账号密码
/interface sstp-client add add-default-route=yes connect-to=vps_ip:443 disabled=no name=sstp-vps user=yus password=yus profile=default-encryption default-route-distance=1
配置sstp-out1到vps隧道连接的默认路由
/ip route add distance=1 gateway=sstp-out1
这样配置后,全国IP走静态路由,剩下的其他IP则走默认路由出去,路由部分已经配置完成,最后配置nat:
/ip firewall nat add action=masquerade chain=srcnat out-interface=pppoe-out1 add action=masquerade chain=srcnat out-interface=sstp-out1
策略路由方式
缺点,RouterOS路由器无法享受VPS的出口路由,内网用户可以通过策略标记走VPS出口
优点是:address-list方便管理
策略路由方式,需要使用address-list地址列表管理,将国内的出口设置为默认路由。
/ip route add distance=1 gateway=pppoe-out1
这样的配置无需将VPS的IP地址,单独配置静态路由,因为路由器本身不会走策略路由!
然后需要做manlge标记,
/ip firewall mangle add action=mark-routing chain=prerouting dst-address-list=!cnlist new-routing-mark=vps passthrough=yes src-address-list=lan
规则含义是:src-address-list定义内网主机IP段,dst-address-list定义除了cnlist列表的地址,都打上vps路由标记
注意:src-address-list=lan,是需要自己定义内网IP地址段列表,假如内网IP地址段为192.168.88.0/24,配置如下
/ip firewall address-list add address=192.168.88.0/24 list=lan
然后将标记好的路由指向sstp-out1
/ip route Add gateway=sstp-out1 routing-mark=vps
address-list的cnlist地址列表下载(改为rsc脚本文件,不定期更新,能通过http get方式获取,更新时间:2021-08-05)
RouterOS计划任务更新脚本,system schedule配置,每隔一天下载更新(脚本执行周期也可以自定义更长时间,比如7天)
/tool fetch url="http://irouteros.com/duibi/cnlist.rsc" dst-path=cnlist.rsc :delay 1s :local t [:time {/import cnlist.rsc}] :log info "import time is $t "
剩下的就是DNS,要求RouterOS版本是6.47以上,因为需要使用DNS转发功能,在6.47后的版本才支持该功能,关于DNS转发介绍可以参考RouterOS V6.47 DNS转发功能介绍。
本地的DNS服务器配置不变,新版本的RouterOS支持dns forward类型,所以我们可以指定相应网站的域名走指定dns解析,配置如下(注特别注意,regexp中是命令行配置,非Winbox配置,请勿直接复制到winbox中):
/ip dns static add forward-to=8.8.8.8 regexp=".*\\.google\\.com" type=FWD add forward-to=8.8.8.8 regexp=".*\\.youtube\\.com" type=FWD add forward-to=8.8.8.8 regexp=".*\\.ytimg\\.com" type=FWD add forward-to=8.8.8.8 regexp=".*\\.wikipedia\\.org" type=FWD
一个简单的RouterOS DNS转发配置文件供下载:dns配置文件
注意:确保转发域名和转发的DNS都指定到了VPS的线路,这样才能调度到就就近上网线路的资源(原理参见)