ai188 发表于 2021-6-27 17:14:46

PPTP与PPPoE联动配置脚本问题

原为地址 http://www.irouteros.com/?p=463

客户通过windows电脑使用PPTP连接进入RouterOS,这时该PPTP账号对应一个运营商PPPoE拨号,并自动启动连接,这个PPPoE拨号获取一个公网IP上网,该账号的PPTP默认走这个PPPoE拨号上网,当PPTP账号断开后,对应的PPPoE拨号也同样断开。


On up脚本::local pptpname:local pppoename:log info “user login and script start”:foreach i in= do={   :if ( = true ) do={      :set pptpname       :log info “check $pptpname”            :set pppoename [:pick $pptpname [:len $pptpname]]      :set pppoename (“pppoe” . $pppoename)      :if ( disable ] = true) do={          /interface pppoe-client enable [ find name =$pppoename ]      :log info “$pptpname online $pppoename dail-up”      }   }}
On down脚本::local pptpname:local pppoename:log info “user logout and script start”:foreach i in= do={   :if ( = false ) do={      :set pptpname       :log info “check $pptpname”            :set pppoename [:pick $pptpname [:len $pptpname]]      :set pppoename (“pppoe” . $pppoename)      :if ( disable ] = false ) do={          /interface pppoe-client disable [ find name =$pppoename ]      :log info “$pptpname offline $pppoename dail-down”      }   }}

这个脚本在ros 6.48上运行有问题,请会的帮忙改下,谢谢!!:handshake

cspm333 发表于 2021-6-28 22:45:59

系統給您已經給您許多方便的工具,您不需用script做這麼多事。
如:帳號ppp1對應profile1


ppp1一旦上線,pptp-client的ip就會先存到address-list=vpn,並對pppoe-out2進行撥號。
透過src-address-list=vpn,透過路由策略,pptp-client能將封包往pppoe-out2送。

pptp-client一旦離線,pptp-client的ip就會從address-list=vpn移除,順便關閉pppoe-out2。
這是不是比您想像中簡潔的多:D

ai188 发表于 2021-6-29 07:58:03

楼上的这个方法是可以,但是在有多个账号的情况下每条都要配个profile来对应pppoe

cspm333 发表于 2021-6-29 11:41:42

本帖最后由 cspm333 于 2021-6-30 00:49 编辑

ai188 发表于 2021-6-29 07:58
楼上的这个方法是可以,但是在有多个账号的情况下每条都要配个profile来对应pppoe ...
多設個profile比較單純;共用profile的的話on-up不會有問題,但on-down問題會很大。

因為pptp-client離線時,interface會從名單消失。
on-down無從從名單找出那個client離線,並對對應的pppoe-out名稱進行斷網。

若要找離線的client名稱,比較可靠的方式是從log裡找。
但整體的script會變得很肥大,編寫出錯的機會也變多。與其如此還不如多建幾筆profile來的更可靠。


47771885 发表于 2021-7-1 00:42:17

本帖最后由 47771885 于 2021-7-1 01:07 编辑

你这个脚本能运行 真有点不可思议 令我差异 怎么会扯上 /interface pptp-server get $i name
这个就不纠结他了(默认系统有user参数)
      :set pppoename [:pick $pptpname [:len $pptpname]]      :set pppoename (“pppoe” . $pppoename)      :if ( disable ] = false ) do={          /interface pppoe-client disable [ find name =$pppoename ]
从上面的来看估计是 客户端拨号账号和pppoe出口尾数名称 是一样的用这个来做依据....

每个人环境需求不一样,该应用一般用于商业用途我就不发实例了 大概说下比较科学的关键点吧..一般是用IP 尾数作为依据 进行操作

实在不行那个就参考 楼上的使用多模板吧妥妥的

页: [1]
查看完整版本: PPTP与PPPoE联动配置脚本问题