電訊茶室's Archiver

gfx86674 發表於 2015-8-19 20:00

用noip當通行證,不讓陌生人連接ovpn-server

[i=s] 本帖最後由 gfx86674 於 2015-8-21 20:48 編輯 [/i]

打開Log看快暈了,竟有人不斷的trying小弟ovpn-server{:5_167:}
[attach]3689[/attach]
雖然ovpn-server有憑證和密碼保護著,但被洗Log看了也很不爽,所以...

[color=Red]乾脆將ovpn port鎖起來,只允許手機例外(假設手機public-ip為1.1.1.1)[/color]
[attach]3690[/attach]
[attach]3691[/attach]

[color=Red]但手機public-ip怎麼可能為1.1.1.1 ,而且又是固定ip.[/color]
[color=Blue]所以啊,這得請ddns來幫忙.
小弟請的是no-ip ,使用上需裝ddns-client app.[/color]

因小弟用的是Android手機,所以安裝[url=https://play.google.com/store/apps/details?id=pt.pedrobranco.noipupdater&hl=zh-TW]NO-IP Updater[/url]這個app.
[attach]3692[/attach]
[color=Blue]完成安裝並設定後,手機只要一連上網路,不管是Wifi或者4G網路,
都會將public-ip更新到noip-ddns上.[/color]

回到Router部份 ,總要將1.1.1.1更新成手機public-ip吧.
[color=Red]所以一樣得用Script ,將舊public-ip更新掉 [/color]:D

首先,我們得知道/ip firewall filter [color=Red]src-address="!1.1.1.1"[/color] 的array位置.
所以在命令視窗運行:
[attach]3693[/attach]
[color=Red]put [/ip firewall filter find src-address="!1.1.1.1"][/color]
如圖所顯示,所得的值是[color=Blue]*68[/color] [color=Pink](每台RouterOS裝置都會不同,這動作是必要的)[/color]

知道array的位置,複製Script將內容放到排程去.
(記得array 與ddns-host是個人的,要先修改才能貼上)

假設Router的網路接口為[color=Red]pppoe-out1[/color] ; ddns-host為[color=Red]abcd1234.no-ip.org[/color][code]:local routerip [/ip address get [find interface="pppoe-out1"] address]
:set routerip [:pick $routerip 0 [:find $routerip "/"]]
:local phone ("!".[:resolve abcd1234.no-ip.org])
:if (([/ip firewall filter get *68 src-address]!=$phone)&&($routerip!=$phone)) \
do={/ip firewall filter set src-address=$phone}[/code]新增排程:
[attach]3694[/attach]
如果Script有發揮作用,很快的src-address="!1.1.1.1"即被更新成其它address囉{:5_219:}
這樣也代表除手機目前所使用地址,其它對ovpn-server的連線皆不合法的.

gfx86674 發表於 2015-8-21 21:00

或許懂Script的人看得出有做Router-ip比對的動作,但是為何呢?

原因是連上ovpn後,手機的ddns-client仍會持續更新.
但更新的不是外地網路,而是ovpn-server的ip....這就糟了!

因為您不是真的與ovpn-server同一地,而是在別的地方.
所以比對router-ip的目的即當手機連上ovpn後,若更新的ip與Router相同,將不予理會.

若不這麼做等手機ddns-client一旦更新與Router同,ovpn將直接斷線!!

頁: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.