- config:
- added "debug" mode - updated documentation in README.md - BL downloader threads: added 2 seconds delay to allow local DNS service go up & runningpull/1/head
parent
c96c9f23e2
commit
31e05cb177
|
@ -43,9 +43,12 @@ func init() {
|
|||
ZabovPort := zabov["port"].(string)
|
||||
ZabovType := zabov["proto"].(string)
|
||||
ZabovAddr := zabov["ipaddr"].(string)
|
||||
DebugStr := (zabov["debug"].(string))
|
||||
ZabovCacheTTL = int(zabov["cachettl"].(float64))
|
||||
ZabovKillTTL = int(zabov["killfilettl"].(float64))
|
||||
|
||||
ZabovDebug = DebugStr == "true"
|
||||
|
||||
if MyConf["configs"] == nil {
|
||||
log.Println("configs not set: you shall set at least 'default' config")
|
||||
os.Exit(1)
|
||||
|
|
|
@ -53,7 +53,8 @@ Minimal config file should look like:
|
|||
"proto":"udp",
|
||||
"ipaddr":"0.0.0.0",
|
||||
"cachettl": 1,
|
||||
"killfilettl": 12
|
||||
"killfilettl": 12,
|
||||
"debug:"false"
|
||||
},
|
||||
"configs":{
|
||||
"default":{
|
||||
|
@ -74,6 +75,7 @@ Global zabov settings:
|
|||
- ipaddr is the port to listen to. Maybe empty, (which will result in listening to 0.0.0.0) to avoid issues with docker.
|
||||
- cachettl: amount of time the cache is kept (in hours)
|
||||
- killfilettl: refresh time for _killfiles_
|
||||
- debug: if set to "true" Zabov prints verbose logs, such as config selection and single DNS requests
|
||||
|
||||
configs:
|
||||
- contains multiple zabov configuration dictionaries. "default" configuration name is mandatory
|
||||
|
@ -84,7 +86,7 @@ configs:
|
|||
- hostsfile: path where you keep your local blacklistfile : this is in the format "singlefilter", meaning one domain per line, unlike hosts file.
|
||||
|
||||
|
||||
Advanced configuration includes support for multiple configuration based on IP Soruce and timetables:
|
||||
Advanced configuration includes support for multiple configurations based on IP Source and timetables:
|
||||
<pre>
|
||||
{
|
||||
"zabov":{
|
||||
|
|
|
@ -95,7 +95,7 @@ func getDoubleFilters(urls urlsMap) {
|
|||
|
||||
func downloadDoubleThread() {
|
||||
fmt.Println("Starting updater of DOUBLE lists, each (hours):", ZabovKillTTL)
|
||||
|
||||
time.Sleep(2 * time.Second) // wait for local DNS server up & running (may be our DNS)
|
||||
_urls := urlsMap{}
|
||||
|
||||
for {
|
||||
|
|
|
@ -93,6 +93,8 @@ func getSingleFilters(urls urlsMap) {
|
|||
|
||||
func downloadThread() {
|
||||
fmt.Println("Starting updater of SINGLE lists, each (hours): ", ZabovKillTTL)
|
||||
time.Sleep(2 * time.Second) // wait for local DNS server up & running (may be our DNS)
|
||||
|
||||
_urls := urlsMap{}
|
||||
|
||||
for {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"net"
|
||||
"strings"
|
||||
"time"
|
||||
|
@ -21,7 +22,9 @@ func getCurTime() (time.Time, error) {
|
|||
func confFromTimeTable(timetable string) string {
|
||||
tt := ZabovTimetables[timetable]
|
||||
if tt == nil {
|
||||
//fmt.Println("confFromTimeTable: return default")
|
||||
if ZabovDebug {
|
||||
log.Println("confFromTimeTable: return default")
|
||||
}
|
||||
return "default"
|
||||
}
|
||||
for _, ttentry := range tt.table {
|
||||
|
@ -35,14 +38,18 @@ func confFromTimeTable(timetable string) string {
|
|||
if (nowHour > t.start.hour || (nowHour == t.start.hour && nowMinute >= t.start.minute)) &&
|
||||
(nowHour < t.stop.hour || (nowHour == t.stop.hour && nowMinute <= t.stop.minute)) {
|
||||
go incrementStats("TIMETABLE IN: "+timetable, 1)
|
||||
//fmt.Println("confFromTimeTable: return IN", tt.cfgin)
|
||||
if ZabovDebug {
|
||||
log.Println("confFromTimeTable: return IN", tt.cfgin)
|
||||
}
|
||||
return tt.cfgin
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
go incrementStats("TIMETABLE OUT: "+timetable, 1)
|
||||
//fmt.Println("confFromTimeTable: return OUT", tt.cfgout)
|
||||
if ZabovDebug {
|
||||
log.Println("confFromTimeTable: return OUT", tt.cfgout)
|
||||
}
|
||||
return tt.cfgout
|
||||
}
|
||||
|
||||
|
@ -54,12 +61,16 @@ func confFromIP(clientIP net.IP) string {
|
|||
if len(ipgroup.timetable) > 0 {
|
||||
return confFromTimeTable(ipgroup.timetable)
|
||||
}
|
||||
//fmt.Println("confFromIP: ipgroup.cfg")
|
||||
if ZabovDebug {
|
||||
log.Println("confFromIP: ipgroup.cfg")
|
||||
}
|
||||
return ipgroup.cfg
|
||||
}
|
||||
}
|
||||
}
|
||||
//fmt.Println("confFromIP: return default")
|
||||
if ZabovDebug {
|
||||
log.Println("confFromIP: return default")
|
||||
}
|
||||
return "default"
|
||||
}
|
||||
func (mydns *handler) ServeDNS(w dns.ResponseWriter, r *dns.Msg) {
|
||||
|
@ -77,6 +88,9 @@ func (mydns *handler) ServeDNS(w dns.ResponseWriter, r *dns.Msg) {
|
|||
|
||||
config := confFromIP(net.ParseIP(remIP))
|
||||
|
||||
if ZabovDebug {
|
||||
log.Println("REQUEST:", remIP, config)
|
||||
}
|
||||
ZabovConfig := ZabovConfigs[config]
|
||||
switch r.Question[0].Qtype {
|
||||
case dns.TypeA:
|
||||
|
@ -84,6 +98,10 @@ func (mydns *handler) ServeDNS(w dns.ResponseWriter, r *dns.Msg) {
|
|||
domain := msg.Question[0].Name
|
||||
fqdn := strings.TrimRight(domain, ".")
|
||||
|
||||
if ZabovDebug {
|
||||
log.Println("TypeA: fqdn:", fqdn)
|
||||
}
|
||||
|
||||
if len(ZabovIPAliases[fqdn]) > 0 {
|
||||
config = "__aliases__"
|
||||
msg.Answer = append(msg.Answer, &dns.A{
|
||||
|
@ -113,6 +131,17 @@ func (mydns *handler) ServeDNS(w dns.ResponseWriter, r *dns.Msg) {
|
|||
ret := ForwardQuery(r, config, false)
|
||||
w.WriteMsg(ret)
|
||||
}
|
||||
case dns.TypePTR:
|
||||
if ZabovDebug {
|
||||
log.Println("TypePTR: Name:", msg.Question[0].Name)
|
||||
}
|
||||
|
||||
if len(ZabovLocalResponder) > 0 {
|
||||
// if set use local responder for reverse lookup (suffix ".in-addr.arpa.")
|
||||
config = "__localresponder__"
|
||||
}
|
||||
ret := ForwardQuery(r, config, true)
|
||||
w.WriteMsg(ret)
|
||||
default:
|
||||
ret := ForwardQuery(r, config, false)
|
||||
w.WriteMsg(ret)
|
||||
|
|
7
main.go
7
main.go
|
@ -16,12 +16,15 @@ var ZabovCacheTTL int
|
|||
//ZabovKillTTL is the amount of hours we cache the killfile (global)
|
||||
var ZabovKillTTL int
|
||||
|
||||
//ZabovLocalResponder is the default DNS server for loca domains
|
||||
//ZabovLocalResponder is the default DNS server for local domains (global)
|
||||
var ZabovLocalResponder string
|
||||
|
||||
//ZabovLocalDomain is the default local domain
|
||||
//ZabovLocalDomain is the default local domain (global)
|
||||
var ZabovLocalDomain string
|
||||
|
||||
//ZabovDebug activate more logging if set to true (global)
|
||||
var ZabovDebug bool
|
||||
|
||||
type handler struct{}
|
||||
|
||||
// ZabovConfig contains all Zabov configs
|
||||
|
|
Loading…
Reference in New Issue