index.html 320 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009
  1. <!DOCTYPE html>
  2. <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta charset="utf-8" />
  5. <meta name="robots" content="noindex, nofollow" />
  6. <title>Technitium DNS Server</title>
  7. <script src="/js/jquery.min.js"></script>
  8. <link href="/css/bootstrap.min.css" rel="stylesheet">
  9. <script src="/js/bootstrap.min.js"></script>
  10. <script src="/js/Chart.min.js"></script>
  11. <link href="/css/font-awesome.min.css" rel="stylesheet" />
  12. <link href="/css/jquery-ui.min.css" rel="stylesheet">
  13. <script src="/js/jquery-ui.min.js"></script>
  14. <script src="/js/moment.min.js"></script>
  15. <script src="/js/bootstrap-datetimepicker.min.js"></script>
  16. <link rel="stylesheet" href="/css/bootstrap-datetimepicker.min.css">
  17. <link href="/css/main.css" rel="stylesheet" />
  18. <script src="/js/common.js"></script>
  19. <script src="/js/main.js"></script>
  20. <script src="/js/zone.js"></script>
  21. <script src="/js/other-zones.js"></script>
  22. <script src="/js/apps.js"></script>
  23. <script src="/js/dhcp.js"></script>
  24. <script src="/js/logs.js"></script>
  25. </head>
  26. <body>
  27. <div id="header">
  28. <div id="mnuUser" class="menu dropdown" style="display: none;">
  29. <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
  30. <span class="menu-title">
  31. <span class="glyphicon glyphicon-user" aria-hidden="true"></span>
  32. <span id="mnuUserDisplayName"></span>
  33. <span class="caret"></span>
  34. </span>
  35. </a>
  36. <ul class="dropdown-menu">
  37. <li><a href="#" onclick="resetChangePasswordModal(); return false;" data-toggle="modal" data-target="#modalChangePassword">Change Password</a></li>
  38. <li><a href="#" onclick="logout(); return false;">Logout</a></li>
  39. </ul>
  40. </div>
  41. </div>
  42. <div id="content">
  43. <div class="container">
  44. <div class="AlertPlaceholder"></div>
  45. <div id="pageLogin" class="pageLogin">
  46. <div class="panel panel-default">
  47. <div class="panel-heading">
  48. <h3 class="panel-title">DNS Server</h3>
  49. </div>
  50. <div class="panel-body">
  51. <form class="form-horizontal">
  52. <div class="form-group">
  53. <label for="txtUser" class="col-sm-3 control-label">Username</label>
  54. <div class="col-sm-8">
  55. <input type="text" class="form-control" id="txtUser" placeholder="username">
  56. </div>
  57. </div>
  58. <div class="form-group">
  59. <label for="txtPass" class="col-sm-3 control-label">Password</label>
  60. <div class="col-sm-8">
  61. <input type="password" class="form-control" id="txtPass" placeholder="password">
  62. </div>
  63. </div>
  64. <div class="form-group" style="margin-bottom: 0px;">
  65. <div class="col-sm-offset-3 col-sm-4">
  66. <button id="btnLogin" type="submit" class="btn btn-primary" data-loading-text="Working..." onclick="login(); return false;">Login</button>
  67. </div>
  68. <div class="col-sm-4" style="padding: 6px; text-align: right;">
  69. <a href="#" data-toggle="modal" data-target="#modalForgotPassword">Forgot Password?</a>
  70. </div>
  71. </div>
  72. </form>
  73. </div>
  74. </div>
  75. </div>
  76. <div id="pageMain" class="page">
  77. <div class="panel panel-default">
  78. <div class="panel-heading" style="height: 38px;">
  79. <div style="float: left;">
  80. <h3 class="panel-title">DNS Server<span id="lblDnsServerDomain"></span></h3>
  81. </div>
  82. <div style="float: right;">
  83. <a href="#" data-toggle="modal" data-target="#modalUpdateAvailable" id="lnkUpdateAvailable" style="display: none; color: red !important;">New Update Available!</a>
  84. </div>
  85. </div>
  86. <div class="panel-body" style="min-height: 500px;">
  87. <div>
  88. <ul class="nav nav-tabs" role="tablist">
  89. <li id="mainPanelTabListDashboard" role="presentation" class="active"><a href="#mainPanelTabPaneDashboard" aria-controls="mainPanelTabPaneDashboard" role="tab" data-toggle="tab" onclick="refreshDashboard();">Dashboard</a></li>
  90. <li id="mainPanelTabListZones" role="presentation"><a href="#mainPanelTabPaneZones" aria-controls="mainPanelTabPaneZones" role="tab" data-toggle="tab" onclick="refreshZones(true);">Zones</a></li>
  91. <li id="mainPanelTabListCachedZones" role="presentation"><a href="#mainPanelTabPaneCachedZones" aria-controls="mainPanelTabPaneCachedZones" role="tab" data-toggle="tab">Cache</a></li>
  92. <li id="mainPanelTabListAllowedZones" role="presentation"><a href="#mainPanelTabPaneAllowedZones" aria-controls="mainPanelTabPaneAllowedZones" role="tab" data-toggle="tab">Allowed</a></li>
  93. <li id="mainPanelTabListBlockedZones" role="presentation"><a href="#mainPanelTabPaneBlockedZones" aria-controls="mainPanelTabPaneBlockedZones" role="tab" data-toggle="tab">Blocked</a></li>
  94. <li id="mainPanelTabListApps" role="presentation"><a href="#mainPanelTabPaneApps" aria-controls="mainPanelTabPaneApps" role="tab" data-toggle="tab" onclick="refreshApps();">Apps</a></li>
  95. <li id="mainPanelTabListDnsClient" role="presentation"><a href="#mainPanelTabPaneDnsClient" aria-controls="mainPanelTabPaneDnsClient" role="tab" data-toggle="tab">DNS Client</a></li>
  96. <li id="mainPanelTabListSettings" role="presentation"><a href="#mainPanelTabPaneSettings" aria-controls="mainPanelTabPaneSettings" role="tab" data-toggle="tab" onclick="loadDnsSettings();">Settings</a></li>
  97. <li id="mainPanelTabListDhcp" role="presentation"><a href="#mainPanelTabPaneDhcp" aria-controls="mainPanelTabPaneDhcp" role="tab" data-toggle="tab" onclick="refreshDhcpTab();">DHCP</a></li>
  98. <li id="mainPanelTabListLogs" role="presentation"><a href="#mainPanelTabPaneLogs" aria-controls="mainPanelTabPaneLogs" role="tab" data-toggle="tab" onclick="refreshLogsTab();">Logs</a></li>
  99. <li id="mainPanelTabListAbout" role="presentation"><a href="#mainPanelTabPaneAbout" aria-controls="mainPanelTabPaneAbout" role="tab" data-toggle="tab">About</a></li>
  100. </ul>
  101. <div class="tab-content">
  102. <div id="mainPanelTabPaneDashboard" role="tabpanel" class="tab-pane active" style="padding: 10px 0 0 0;">
  103. <div>
  104. <div class="pull-left">
  105. <div class="btn-group" data-toggle="buttons">
  106. <label class="btn btn-default active">
  107. <input type="radio" name="rdStatType" value="lastHour" autocomplete="off" checked> Last Hour
  108. </label>
  109. <label class="btn btn-default">
  110. <input type="radio" name="rdStatType" value="lastDay" autocomplete="off"> Last Day
  111. </label>
  112. <label class="btn btn-default">
  113. <input type="radio" name="rdStatType" value="lastWeek" autocomplete="off"> Last Week
  114. </label>
  115. <label class="btn btn-default">
  116. <input type="radio" name="rdStatType" value="lastMonth" autocomplete="off"> Last Month
  117. </label>
  118. <label class="btn btn-default">
  119. <input type="radio" name="rdStatType" value="lastYear" autocomplete="off"> Last Year
  120. </label>
  121. <label class="btn btn-default">
  122. <input type="radio" name="rdStatType" value="custom" autocomplete="off"> Custom
  123. </label>
  124. </div>
  125. </div>
  126. <div id="divCustomDayWise" class="pull-left" style="padding: 4px 0px 4px 10px; display: none;">
  127. <span style="margin-right: 6px;"><label for="dpCustomDayWiseStart">Start</label> <input type="text" id="dpCustomDayWiseStart" size="10"></span>
  128. <span style="margin-right: 6px;"><label for="dpCustomDayWiseEnd">End</label> <input type="text" id="dpCustomDayWiseEnd" size="10"></span>
  129. <button id="btnCustomDayWise" class="btn btn-default" type="button" style="font-size: 12px; padding: 3px 0px; width: 60px; vertical-align: top;">Show</button>
  130. </div>
  131. <div class="clearfix"></div>
  132. </div>
  133. <div id="divDashboardLoader" style="margin-top: 10px; height: 400px;"></div>
  134. <div id="divDashboard" style="display: none;">
  135. <div class="stats-panel">
  136. <div class="stats-item total-queries">
  137. <div class="number" id="divDashboardStatsTotalQueries">100</div>
  138. <div class="percentage">100%</div>
  139. <div class="title">Total Queries</div>
  140. </div>
  141. <div class="stats-item no-error">
  142. <div class="number" id="divDashboardStatsTotalNoError">70</div>
  143. <div class="percentage" id="divDashboardStatsTotalNoErrorPercentage">0%</div>
  144. <div class="title">No Error</div>
  145. </div>
  146. <div class="stats-item server-failure">
  147. <div class="number" id="divDashboardStatsTotalServerFailure">5</div>
  148. <div class="percentage" id="divDashboardStatsTotalServerFailurePercentage">0%</div>
  149. <div class="title">Server Failure</div>
  150. </div>
  151. <div class="stats-item name-error">
  152. <div class="number" id="divDashboardStatsTotalNxDomain">5</div>
  153. <div class="percentage" id="divDashboardStatsTotalNxDomainPercentage">0%</div>
  154. <div class="title">NX Domain</div>
  155. </div>
  156. <div class="stats-item refused">
  157. <div class="number" id="divDashboardStatsTotalRefused">10</div>
  158. <div class="percentage" id="divDashboardStatsTotalRefusedPercentage">0%</div>
  159. <div class="title">Refused</div>
  160. </div>
  161. <div class="stats-item auth-hit">
  162. <div class="number" id="divDashboardStatsTotalAuthHit">10</div>
  163. <div class="percentage" id="divDashboardStatsTotalAuthHitPercentage">0%</div>
  164. <div class="title">Authoritative</div>
  165. </div>
  166. <div class="stats-item recursions">
  167. <div class="number" id="divDashboardStatsTotalRecursions">10</div>
  168. <div class="percentage" id="divDashboardStatsTotalRecursionsPercentage">0%</div>
  169. <div class="title">Recursive</div>
  170. </div>
  171. <div class="stats-item cache-hit">
  172. <div class="number" id="divDashboardStatsTotalCacheHit">10</div>
  173. <div class="percentage" id="divDashboardStatsTotalCacheHitPercentage">0%</div>
  174. <div class="title">Cached</div>
  175. </div>
  176. <div class="stats-item blocked">
  177. <div class="number" id="divDashboardStatsTotalBlocked">10</div>
  178. <div class="percentage" id="divDashboardStatsTotalBlockedPercentage">0%</div>
  179. <div class="title">Blocked</div>
  180. </div>
  181. <div class="stats-item clients">
  182. <div class="number" id="divDashboardStatsTotalClients">10</div>
  183. <div class="percentage">&nbsp;</div>
  184. <div class="title">Clients</div>
  185. </div>
  186. </div>
  187. <div>
  188. <canvas id="canvasDashboardMain" style="margin: 10px 0 10px 0;"></canvas>
  189. </div>
  190. <div style="margin-top: 15px;">
  191. <div style="float: left; width: 50%; padding-right: 7px;">
  192. <div id="divPieCharts" class="panel panel-default" style="margin-bottom: 0px;">
  193. <div class="panel-body">
  194. <div class="zone-stats-panel">
  195. <div class="stats-item zones">
  196. <div class="number" id="divDashboardStatsZones">10</div>
  197. <div class="title">Zones</div>
  198. </div>
  199. <div class="stats-item allowed-zones">
  200. <div class="number" id="divDashboardStatsAllowedZones">10</div>
  201. <div class="title">Allowed Zones</div>
  202. </div>
  203. <div class="stats-item blocked-zones">
  204. <div class="number" id="divDashboardStatsBlockedZones">10</div>
  205. <div class="title">Blocked Zones</div>
  206. </div>
  207. <div class="stats-item block-list-zones">
  208. <div class="number" id="divDashboardStatsBlockListZones">10</div>
  209. <div class="title">Block List Zones</div>
  210. </div>
  211. </div>
  212. <div style="margin-bottom: 20px;">
  213. <canvas id="canvasDashboardPie"></canvas>
  214. </div>
  215. <div>
  216. <canvas id="canvasDashboardPie2"></canvas>
  217. </div>
  218. </div>
  219. </div>
  220. </div>
  221. <div style="float: right; width: 50%; padding-left: 7px;">
  222. <div class="panel panel-default" style="margin-bottom: 0px;">
  223. <div class="panel-heading">
  224. <div class="pull-left">Top Clients</div>
  225. <div class="pull-right"><a href="#" onclick="showTopStats('TopClients', 1000); return false;">[more]</a></div>
  226. <div class="clearfix"></div>
  227. </div>
  228. <table class="table table-hover">
  229. <thead>
  230. <tr>
  231. <th>Client</th>
  232. <th>Queries</th>
  233. </tr>
  234. </thead>
  235. <tbody id="tableTopClients">
  236. </tbody>
  237. </table>
  238. </div>
  239. </div>
  240. <div style="clear: both;"></div>
  241. </div>
  242. <div style="margin-top: 15px;">
  243. <div style="float: left; width: 50%; padding-right: 7px;">
  244. <div class="panel panel-default" style="margin-bottom: 0px;">
  245. <div class="panel-heading">
  246. <div class="pull-left">Top Domains</div>
  247. <div class="pull-right"><a href="#" onclick="showTopStats('TopDomains', 1000); return false;">[more]</a></div>
  248. <div class="clearfix"></div>
  249. </div>
  250. <table class="table table-hover">
  251. <thead>
  252. <tr>
  253. <th>Domain</th>
  254. <th>Hits</th>
  255. </tr>
  256. </thead>
  257. <tbody id="tableTopDomains">
  258. </tbody>
  259. </table>
  260. </div>
  261. </div>
  262. <div style="float: right; width: 50%; padding-left: 7px;">
  263. <div class="panel panel-default" style="margin-bottom: 0px;">
  264. <div class="panel-heading">
  265. <div class="pull-left">Top Blocked Domains</div>
  266. <div class="pull-right"><a href="#" onclick="showTopStats('TopBlockedDomains', 1000); return false;">[more]</a></div>
  267. <div class="clearfix"></div>
  268. </div>
  269. <table class="table table-hover">
  270. <thead>
  271. <tr>
  272. <th>Domain</th>
  273. <th>Hits</th>
  274. </tr>
  275. </thead>
  276. <tbody id="tableTopBlockedDomains">
  277. </tbody>
  278. </table>
  279. </div>
  280. </div>
  281. <div style="clear: both;"></div>
  282. </div>
  283. </div>
  284. </div>
  285. <div id="mainPanelTabPaneZones" role="tabpanel" class="tab-pane" style="padding: 10px 0 0 0;">
  286. <div id="divViewZonesLoader" style=" display: none; margin-top: 10px; height: 400px;"></div>
  287. <div id="divViewZones" style="margin-top: 10px;">
  288. <div>
  289. <div style="float: right;">
  290. <button type="button" class="btn btn-primary" style="padding: 2px 0px; width: 100px;" onclick="showAddZoneModal();">Add Zone</button>
  291. </div>
  292. <div style="clear: both;"></div>
  293. </div>
  294. <table id="tableZones" class="table table-hover">
  295. <thead>
  296. <tr>
  297. <th onclick="sortTable('tableZonesBody', 0);">Zone</th>
  298. <th onclick="sortTable('tableZonesBody', 1);">Type</th>
  299. <th onclick="sortTable('tableZonesBody', 2);">DNSSEC</th>
  300. <th onclick="sortTable('tableZonesBody', 3);">Status</th>
  301. <th onclick="sortTable('tableZonesBody', 4);">Expiry</th>
  302. <th></th>
  303. </tr>
  304. </thead>
  305. <tbody id="tableZonesBody">
  306. </tbody>
  307. <tfoot id="tableZonesFooter">
  308. <tr><td colspan="6"><b>Total Records: 0</b></td></tr>
  309. </tfoot>
  310. </table>
  311. </div>
  312. <div id="divEditZone" style="display: none;">
  313. <ul class="pager" style="margin: 0px;">
  314. <li class="previous"><a href="#" onclick="refreshZones(); return false;"><span aria-hidden="true">&larr;</span> Back</a></li>
  315. </ul>
  316. <div style="padding: 10px 0px;">
  317. <h3 style="margin: 4px 0;"><span id="titleEditZone" style="margin-right: 10px;">example.com</span><a href="#" onclick="showEditZone($('#titleEditZone').text()); return false;"><span class="glyphicon glyphicon-refresh" style="font-size: 20px;" aria-hidden="true"></span></a></h3>
  318. <div style="float: left;">
  319. <span id="titleEditZoneType" class="label label-default">Primary</span>
  320. <span id="tdDnssecStatusEditZone" class="label label-default">DNSSEC</span>
  321. <span id="tdStatusEditZone" data-id="EditZone" class="label label-success">Enabled</span>
  322. <span id="titleEditZoneExpiry" style="font-size: 10px; font-weight: bold;">Expiry: 01 Jan 2020 00:00:00</span>
  323. </div>
  324. <div style="float: right; padding: 2px 0px;">
  325. <button id="btnEditZoneAddRecord" type="button" class="btn btn-primary" style="padding: 2px 0px; width: 100px;" onclick="showAddRecordModal(this);" data-loading-text="Loading...">Add Record</button>
  326. <button id="btnEnableZoneEditZone" data-id="EditZone" type="button" class="btn btn-default" style="padding: 2px 0px; width: 100px;" onclick="enableZone(this, $('#titleEditZone').text());">Enable Zone</button>
  327. <button id="btnDisableZoneEditZone" data-id="EditZone" type="button" class="btn btn-warning" style="padding: 2px 0px; width: 100px;" onclick="disableZone(this, $('#titleEditZone').text());">Disable Zone</button>
  328. <button id="btnEditZoneDeleteZone" type="button" class="btn btn-danger" style="padding: 2px 0px; width: 100px;" onclick="deleteZone(this, $('#titleEditZone').text(), true);">Delete Zone</button>
  329. <button id="btnZoneResync" type="button" class="btn btn-primary" style="padding: 2px 0px; width: 100px;" onclick="resyncZone(this, $('#titleEditZone').text());" data-loading-text="Resyncing...">Resync</button>
  330. <button id="btnZoneOptions" type="button" class="btn btn-primary" style="padding: 2px 0px; width: 100px;" onclick="showZoneOptionsModal($('#titleEditZone').text());">Options</button>
  331. <div id="divZoneDnssecOptions" class="btn-group">
  332. <button type="button" class="btn btn-primary dropdown-toggle" style="padding: 2px 0px; width: 100px;" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  333. DNSSEC <span class="caret"></span>
  334. </button>
  335. <ul class="dropdown-menu">
  336. <li id="lnkZoneDnssecSignZone"><a href="#" onclick="showSignZoneModal($('#titleEditZone').text()); return false;">Sign Zone</a></li>
  337. <li id="lnkZoneDnssecProperties"><a href="#" onclick="showDnssecPropertiesModal($('#titleEditZone').text()); return false;">Properties</a></li>
  338. <li id="lnkZoneDnssecUnsignZone"><a href="#" onclick="showUnsignZoneModal($('#titleEditZone').text()); return false;">Unsign Zone</a></li>
  339. </ul>
  340. </div>
  341. </div>
  342. <div style="clear: both;"></div>
  343. </div>
  344. <table id="tableEditZone" class="table table-hover">
  345. <thead>
  346. <tr>
  347. <th onclick="sortTable('tableEditZoneBody', 0);">Name</th>
  348. <th onclick="sortTable('tableEditZoneBody', 1);">Type</th>
  349. <th onclick="sortTable('tableEditZoneBody', 2);">TTL</th>
  350. <th onclick="sortTable('tableEditZoneBody', 3);">Data</th>
  351. <th></th>
  352. </tr>
  353. </thead>
  354. <tbody id="tableEditZoneBody">
  355. </tbody>
  356. <tfoot id="tableEditZoneFooter">
  357. <tr><td><b>Total Records: 0</b></td></tr>
  358. </tfoot>
  359. </table>
  360. </div>
  361. </div>
  362. <div id="mainPanelTabPaneCachedZones" role="tabpanel" class="tab-pane" style="padding: 10px 0 0 0;">
  363. <div class="well well-sm zone-list-pane">
  364. <form class="form-inline">
  365. <div class="form-group" style="width: 100%">
  366. <input type="text" class="form-control" style="width: inherit;" id="txtCacheZone" placeholder="example.com">
  367. </div>
  368. <div class="form-group">
  369. <button id="btnBrowseCacheZone" type="submit" class="btn btn-primary" data-loading-text="Browse" onclick="refreshCachedZonesList($('#txtCacheZone').val()); return false;">Browse</button>
  370. </div>
  371. </form>
  372. <div id="lstCachedZones" class="zones">
  373. </div>
  374. </div>
  375. <div id="divCachedZoneViewer" class="zone-viewer-pane">
  376. <div class="panel panel-default">
  377. <div class="panel-heading" style="height: 36px; padding: 4px 6px;">
  378. <div id="txtCachedZoneViewerTitle" style="float: left; padding: 4px;">technitium.com</div>
  379. <div style="float: right;">
  380. <button id="btnDeleteCachedZone" type="button" class="btn btn-warning" data-loading-text="Delete" onclick="deleteCachedZone();" style="font-size: 12px; padding: 4px 6px;">Delete</button>
  381. <button type="button" class="btn btn-danger" data-loading-text="Delete" onclick="flushDnsCache(this);" style="font-size: 12px; padding: 4px 6px;">Flush</button>
  382. </div>
  383. </div>
  384. <div class="panel-body">
  385. <pre id="preCachedZoneViewerBody">
  386. </pre>
  387. </div>
  388. </div>
  389. </div>
  390. </div>
  391. <div id="mainPanelTabPaneAllowedZones" role="tabpanel" class="tab-pane" style="padding: 10px 0 0 0;">
  392. <div class="well well-sm zone-list-pane">
  393. <form class="form-inline">
  394. <div class="form-group" style="width: 100%">
  395. <input type="text" class="form-control" style="width: inherit;" id="txtAllowZone" placeholder="example.com">
  396. </div>
  397. <div class="form-group">
  398. <button id="btnAllowZone" type="submit" class="btn btn-primary" data-loading-text="Allow" onclick="allowZone(); return false;">Allow</button>
  399. <button id="btnBrowseAllowZone" type="button" class="btn btn-default" data-loading-text="Browse" onclick="refreshAllowedZonesList($('#txtAllowZone').val());">Browse</button>
  400. </div>
  401. </form>
  402. <div id="lstAllowedZones" class="zones">
  403. </div>
  404. </div>
  405. <div id="divAllowedZoneViewer" class="zone-viewer-pane">
  406. <div class="panel panel-default">
  407. <div class="panel-heading" style="height: 36px; padding: 4px 6px;">
  408. <div id="txtAllowedZoneViewerTitle" style="float: left; padding: 4px;">technitium.com</div>
  409. <div style="float: right;">
  410. <button type="button" class="btn btn-default" data-loading-text="Import" onclick="resetImportAllowedZonesModal();" data-toggle="modal" data-target="#modalImportAllowedZones" style="font-size: 12px; padding: 4px 6px;">Import</button>
  411. <button type="button" class="btn btn-default" data-loading-text="Export" onclick="exportAllowedZones();" style="font-size: 12px; padding: 4px 6px;">Export</button>
  412. <button id="btnDeleteAllowedZone" type="button" class="btn btn-warning" data-loading-text="Delete" onclick="deleteAllowedZone();" style="font-size: 12px; padding: 4px 6px;">Delete</button>
  413. <button id="btnFlushAllowedZone" type="button" class="btn btn-danger" data-loading-text="Flush" onclick="flushAllowedZone();" style="font-size: 12px; padding: 4px 6px;">Flush</button>
  414. </div>
  415. </div>
  416. <div class="panel-body">
  417. <pre id="preAllowedZoneViewerBody">
  418. </pre>
  419. </div>
  420. </div>
  421. </div>
  422. </div>
  423. <div id="mainPanelTabPaneBlockedZones" role="tabpanel" class="tab-pane" style="padding: 10px 0 0 0;">
  424. <div class="well well-sm zone-list-pane">
  425. <form class="form-inline">
  426. <div class="form-group" style="width: 100%">
  427. <input type="text" class="form-control" style="width: inherit;" id="txtBlockZone" placeholder="example.com">
  428. </div>
  429. <div class="form-group">
  430. <button id="btnBlockZone" type="submit" class="btn btn-primary" data-loading-text="Block" onclick="blockZone(); return false;">Block</button>
  431. <button id="btnBrowseBlockZone" type="button" class="btn btn-default" data-loading-text="Browse" onclick="refreshBlockedZonesList($('#txtBlockZone').val());">Browse</button>
  432. </div>
  433. </form>
  434. <div id="lstBlockedZones" class="zones">
  435. </div>
  436. </div>
  437. <div id="divBlockedZoneViewer" class="zone-viewer-pane">
  438. <div class="panel panel-default">
  439. <div class="panel-heading" style="height: 36px; padding: 4px 6px;">
  440. <div id="txtBlockedZoneViewerTitle" style="float: left; padding: 4px;">technitium.com</div>
  441. <div style="float: right;">
  442. <button id="btnImportBlockedZone" type="button" class="btn btn-default" data-loading-text="Import" onclick="resetImportBlockedZonesModal();" data-toggle="modal" data-target="#modalImportBlockedZones" style="font-size: 12px; padding: 4px 6px;">Import</button>
  443. <button id="btnExportBlockedZone" type="button" class="btn btn-default" data-loading-text="Export" onclick="exportBlockedZones();" style="font-size: 12px; padding: 4px 6px;">Export</button>
  444. <button id="btnDeleteBlockedZone" type="button" class="btn btn-warning" data-loading-text="Delete" onclick="deleteBlockedZone();" style="font-size: 12px; padding: 4px 6px;">Delete</button>
  445. <button id="btnFlushBlockedZone" type="button" class="btn btn-danger" data-loading-text="Flush" onclick="flushBlockedZone();" style="font-size: 12px; padding: 4px 6px;">Flush</button>
  446. </div>
  447. </div>
  448. <div class="panel-body">
  449. <pre id="preBlockedZoneViewerBody">
  450. </pre>
  451. </div>
  452. </div>
  453. </div>
  454. </div>
  455. <div id="mainPanelTabPaneApps" role="tabpanel" class="tab-pane" style="padding: 10px 0 0 0;">
  456. <div id="divViewAppsLoader" style=" display: none; margin-top: 10px; height: 400px;"></div>
  457. <div id="divViewApps" style="margin-top: 10px;">
  458. <div>
  459. <div style="float: right;">
  460. <button type="button" class="btn btn-primary" style="padding: 2px 0px; width: 100px;" onclick="showStoreAppsModal();">App Store</button>
  461. <button type="button" class="btn btn-primary" style="padding: 2px 0px; width: 100px;" onclick="showInstallAppModal();">Install</button>
  462. </div>
  463. <div style="clear: both;"></div>
  464. </div>
  465. <table id="tableApps" class="table table-hover">
  466. <thead>
  467. <tr>
  468. <th style="min-width: 100px;" onclick="sortTable('tableAppsBody', 0);">Installed Apps</th>
  469. <th style="width: 96px;"></th>
  470. </tr>
  471. </thead>
  472. <tbody id="tableAppsBody">
  473. </tbody>
  474. <tfoot id="tableAppsFooter">
  475. <tr><td colspan="3"><b>Total Apps: 0</b></td></tr>
  476. </tfoot>
  477. </table>
  478. </div>
  479. </div>
  480. <div id="mainPanelTabPaneDnsClient" role="tabpanel" class="tab-pane" style="padding: 10px 0 0 0;">
  481. <form class="form-inline well" style="padding-bottom: 6px;">
  482. <div class="form-group">
  483. <label for="txtDnsClientNameServer">Server</label>
  484. <div class="input-group dropdown">
  485. <input type="text" class="form-control dropdown-toggle" style="min-width: 230px; border-right: 0px;" id="txtDnsClientNameServer" value="This Server {this-server}">
  486. <ul id="optDnsClientNameServers" class="dropdown-menu" style="max-height: 500px; overflow-y: scroll;">
  487. <li><a href="#">This Server {this-server}</a></li>
  488. <li><a href="#">Recursive Query {recursive-resolver}</a></li>
  489. <li><a href="#">Cloudflare {1.1.1.1}</a></li>
  490. <li><a href="#">Cloudflare {1.0.0.1}</a></li>
  491. <li><a href="#">Cloudflare {[2606:4700:4700::1111]}</a></li>
  492. <li><a href="#">Cloudflare {[2606:4700:4700::1001]}</a></li>
  493. <li><a href="#">Cloudflare TLS {cloudflare-dns.com (1.1.1.1:853)}</a></li>
  494. <li><a href="#">Cloudflare TLS {cloudflare-dns.com (1.0.0.1:853)}</a></li>
  495. <li><a href="#">Cloudflare TLS {cloudflare-dns.com ([2606:4700:4700::1111]:853)}</a></li>
  496. <li><a href="#">Cloudflare TLS {cloudflare-dns.com ([2606:4700:4700::1001]:853)}</a></li>
  497. <li><a href="#">Cloudflare HTTPS {https://cloudflare-dns.com/dns-query (1.1.1.1)}</a></li>
  498. <li><a href="#">Cloudflare HTTPS-JSON {https://cloudflare-dns.com/dns-query (1.1.1.1)}</a></li>
  499. <li><a href="#">Google {8.8.8.8}</a></li>
  500. <li><a href="#">Google {8.8.4.4}</a></li>
  501. <li><a href="#">Google {[2001:4860:4860::8888]}</a></li>
  502. <li><a href="#">Google {[2001:4860:4860::8844]}</a></li>
  503. <li><a href="#">Google TLS {dns.google (8.8.8.8:853)}</a></li>
  504. <li><a href="#">Google TLS {dns.google (8.8.4.4:853)}</a></li>
  505. <li><a href="#">Google TLS {dns.google ([2001:4860:4860::8888]:853)}</a></li>
  506. <li><a href="#">Google TLS {dns.google ([2001:4860:4860::8844]:853)}</a></li>
  507. <li><a href="#">Google HTTPS {https://dns.google/dns-query (8.8.8.8)}</a></li>
  508. <li><a href="#">Google HTTPS-JSON {https://dns.google/resolve (8.8.8.8)}</a></li>
  509. <li><a href="#">Quad9 Secure {9.9.9.9}</a></li>
  510. <li><a href="#">Quad9 Secure {[2620:fe::fe]}</a></li>
  511. <li><a href="#">Quad9 Secure TLS {dns.quad9.net (9.9.9.9:853)}</a></li>
  512. <li><a href="#">Quad9 Secure TLS {dns.quad9.net ([2620:fe::fe]:853)}</a></li>
  513. <li><a href="#">Quad9 Secure HTTPS {https://dns.quad9.net/dns-query (9.9.9.9)}</a></li>
  514. <li><a href="#">Quad9 Unsecure {9.9.9.10}</a></li>
  515. <li><a href="#">Quad9 Unsecure {[2620:fe::10]}</a></li>
  516. <li><a href="#">Quad9 Unsecure TLS {dns10.quad9.net (9.9.9.10:853)}</a></li>
  517. <li><a href="#">Quad9 Unsecure TLS {dns10.quad9.net ([2620:fe::10]:853)}</a></li>
  518. <li><a href="#">Quad9 Unsecure HTTPS {https://dns10.quad9.net/dns-query (9.9.9.10)}</a></li>
  519. <li><a href="#">OpenDNS {208.67.222.222}</a></li>
  520. <li><a href="#">OpenDNS {208.67.220.220}</a></li>
  521. <li><a href="#">OpenDNS {[2620:0:ccc::2]}</a></li>
  522. <li><a href="#">OpenDNS {[2620:0:ccd::2]}</a></li>
  523. <li><a href="#">OpenDNS FamilyShield {208.67.222.123}</a></li>
  524. <li><a href="#">OpenDNS FamilyShield {208.67.220.123}</a></li>
  525. <li><a href="#">Level3 {4.2.2.1}</a></li>
  526. <li><a href="#">Level3 {4.2.2.2}</a></li>
  527. <li><a href="#">Ultra {156.154.70.1}</a></li>
  528. <li><a href="#">Ultra {156.154.71.1}</a></li>
  529. <li><a href="#">Dyn {216.146.35.35}</a></li>
  530. <li><a href="#">Dyn {216.146.36.36}</a></li>
  531. <li><a href="#">a.root-servers.net</a></li>
  532. <li><a href="#">b.root-servers.net</a></li>
  533. <li><a href="#">c.root-servers.net</a></li>
  534. <li><a href="#">d.root-servers.net</a></li>
  535. <li><a href="#">e.root-servers.net</a></li>
  536. <li><a href="#">f.root-servers.net</a></li>
  537. <li><a href="#">g.root-servers.net</a></li>
  538. <li><a href="#">h.root-servers.net</a></li>
  539. <li><a href="#">i.root-servers.net</a></li>
  540. <li><a href="#">j.root-servers.net</a></li>
  541. <li><a href="#">k.root-servers.net</a></li>
  542. <li><a href="#">l.root-servers.net</a></li>
  543. <li><a href="#">m.root-servers.net</a></li>
  544. </ul>
  545. <span role="button" class="input-group-addon dropdown-toggle" style="background-color: white;" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="caret"></span></span>
  546. </div>
  547. </div>
  548. <div class="form-group">
  549. <label for="txtDnsClientDomain">Domain</label>
  550. <input type="text" class="form-control" style="min-width: 240px;" id="txtDnsClientDomain" placeholder="example.com">
  551. </div>
  552. <div class="form-group">
  553. <label for="optDnsClientType">Type</label>
  554. <select class="form-control" id="optDnsClientType" style="padding-left: 6px; padding-right: 0px;">
  555. <option>A</option>
  556. <option>NS</option>
  557. <option>CNAME</option>
  558. <option>SOA</option>
  559. <option>PTR</option>
  560. <option>MX</option>
  561. <option>TXT</option>
  562. <option>AAAA</option>
  563. <option>SRV</option>
  564. <option>DNAME</option>
  565. <option>DS</option>
  566. <option>RRSIG</option>
  567. <option>NSEC</option>
  568. <option>DNSKEY</option>
  569. <option>NSEC3</option>
  570. <option>NSEC3PARAM</option>
  571. <option>CAA</option>
  572. <option>ANY</option>
  573. <option>AXFR</option>
  574. <option>ANAME</option>
  575. </select>
  576. </div>
  577. <div class="form-group">
  578. <label for="optDnsClientProtocol">DNS-over-</label>
  579. <select class="form-control" id="optDnsClientProtocol" style="padding-left: 6px; padding-right: 0px;">
  580. <option>UDP</option>
  581. <option>TCP</option>
  582. <option>TLS</option>
  583. <option value="Https">HTTPS</option>
  584. <option value="HttpsJson">HTTPS (JSON)</option>
  585. </select>
  586. </div>
  587. <div class="form-group">
  588. <button type="submit" class="btn btn-primary" id="btnDnsClientResolve" data-loading-text="Resolving..." onclick="resolveQuery(); return false;" style="margin-right: 6px;">Resolve</button>
  589. <button type="button" class="btn btn-warning" id="btnDnsClientImport" data-loading-text="Importing..." onclick="resolveQuery(true);">Import</button>
  590. </div>
  591. <div class="form-group">
  592. <div class="checkbox">
  593. <label>
  594. <input type="checkbox" id="chkDnsClientDnssecValidation"> Enable DNSSEC Validation
  595. </label>
  596. </div>
  597. </div>
  598. </form>
  599. <div id="divDnsClientLoader" style="margin-top: 20px; height: 300px;"></div>
  600. <pre id="preDnsClientOutput" style="display: none;"></pre>
  601. </div>
  602. <div id="mainPanelTabPaneSettings" role="tabpanel" class="tab-pane">
  603. <div id="divDnsSettingsLoader" style="margin-top: 10px; height: 400px;"></div>
  604. <div id="divDnsSettings" style="display: none;">
  605. <form style="margin-top: 10px;" onsubmit="return false;">
  606. <ul class="nav nav-tabs" role="tablist">
  607. <li id="settingsTabListGeneral" role="presentation" class="active"><a href="#settingsTabPaneGeneral" aria-controls="settingsTabPaneGeneral" role="tab" data-toggle="tab">General</a></li>
  608. <li id="settingsTabListWebService" role="presentation"><a href="#settingsTabPaneWebService" aria-controls="settingsTabPaneWebService" role="tab" data-toggle="tab">Web Service</a></li>
  609. <li id="settingsTabListOptionalProtocols" role="presentation"><a href="#settingsTabPaneOptionalProtocols" aria-controls="settingsTabPaneOptionalProtocols" role="tab" data-toggle="tab">Optional Protocols</a></li>
  610. <li id="settingsTabListTsig" role="presentation"><a href="#settingsTabPaneTsig" aria-controls="settingsTabPaneTsig" role="tab" data-toggle="tab">TSIG</a></li>
  611. <li id="settingsTabListRecursion" role="presentation"><a href="#settingsTabPaneRecursion" aria-controls="settingsTabPaneRecursion" role="tab" data-toggle="tab">Recursion</a></li>
  612. <li id="settingsTabListCache" role="presentation"><a href="#settingsTabPaneCache" aria-controls="settingsTabPaneCache" role="tab" data-toggle="tab">Cache</a></li>
  613. <li id="settingsTabListBlocking" role="presentation"><a href="#settingsTabPaneBlocking" aria-controls="settingsTabPaneBlocking" role="tab" data-toggle="tab">Blocking</a></li>
  614. <li id="settingsTabListProxyForwarders" role="presentation"><a href="#settingsTabPaneProxyForwarders" aria-controls="settingsTabPaneProxyForwarders" role="tab" data-toggle="tab">Proxy &amp; Forwarders</a></li>
  615. <li id="settingsTabListLogging" role="presentation"><a href="#settingsTabPaneLogging" aria-controls="settingsTabPaneLogging" role="tab" data-toggle="tab">Logging</a></li>
  616. </ul>
  617. <div class="tab-content" style="min-height: 350px; padding-top: 15px;">
  618. <div id="settingsTabPaneGeneral" role="tabpanel" class="tab-pane active">
  619. <div class="well well-sm form-horizontal">
  620. <div class="form-group">
  621. <label for="txtDnsServerDomain" class="col-sm-3 control-label">DNS Server Domain</label>
  622. <div class="col-sm-6">
  623. <input type="text" class="form-control" id="txtDnsServerDomain" placeholder="domain name">
  624. </div>
  625. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The primary fully qualified domain name used by this DNS Server to identify itself.</div>
  626. </div>
  627. <div class="form-group">
  628. <label for="txtDnsServerLocalEndPoints" class="col-sm-3 control-label">DNS Server Local End Points</label>
  629. <div class="col-sm-6">
  630. <textarea id="txtDnsServerLocalEndPoints" class="form-control" rows="3" spellcheck="false"></textarea>
  631. </div>
  632. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">Local end points are the network interface IP addresses and ports you want the DNS Server to listen for requests. The default values work for most scenarios so, do not change these defaults unless you have a requirement for the DNS server to listen on specific networks or ports.</div>
  633. </div>
  634. <div>Note! The DNS Server local end point changes will be automatically applied and so you do not need to manually restart the main service.</div>
  635. </div>
  636. <div class="well well-sm form-horizontal">
  637. <div class="form-group">
  638. <label for="txtDefaultRecordTtl" class="col-sm-3 control-label">Default Record TTL</label>
  639. <div class="col-sm-6">
  640. <input type="number" class="form-control" id="txtDefaultRecordTtl" placeholder="TTL" style="width: 100px; display: inline;">
  641. <span>seconds (default 3600)</span>
  642. </div>
  643. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The default TTL value to use if not specified when adding or updating records in a Zone.</div>
  644. </div>
  645. </div>
  646. <div class="well well-sm form-horizontal">
  647. <div class="form-group">
  648. <label class="col-sm-3 control-label">IPv6 Support</label>
  649. <div class="col-sm-8">
  650. <div class="checkbox">
  651. <label>
  652. <input id="chkPreferIPv6" type="checkbox"> Prefer IPv6
  653. </label>
  654. </div>
  655. <div style="padding-top: 5px; padding-left: 20px;">DNS Server will use IPv6 for querying whenever possible with this option enabled.</div>
  656. </div>
  657. </div>
  658. <div>Warning! Use this option only if this DNS server has native IPv6 Internet access otherwise it will affect performance.</div>
  659. </div>
  660. <div class="well well-sm form-horizontal">
  661. <div class="form-group">
  662. <label for="txtEdnsUdpPayloadSize" class="col-sm-3 control-label">EDNS UDP Payload Size</label>
  663. <div class="col-sm-6">
  664. <input type="number" class="form-control" id="txtEdnsUdpPayloadSize" placeholder="size" style="width: 100px; display: inline;">
  665. <span>bytes (valid range 512-4096; default 1232)</span>
  666. </div>
  667. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The maximum UDP payload size that can be used to avoid IP fragmentation.</div>
  668. </div>
  669. </div>
  670. <div class="well well-sm form-horizontal">
  671. <div class="form-group">
  672. <label class="col-sm-3 control-label">DNSSEC</label>
  673. <div class="col-sm-8">
  674. <div class="checkbox">
  675. <label>
  676. <input id="chkDnssecValidation" type="checkbox"> Enable DNSSEC Validation
  677. </label>
  678. </div>
  679. <div style="padding-top: 5px; padding-left: 20px;">DNS Server will validate all responses from name servers or forwarders when this option is enabled.</div>
  680. </div>
  681. </div>
  682. <div>
  683. <p>Warning! Devices that do not have a real-time clock and rely on NTP when booting (e.g. Raspberry Pi), enabling DNSSEC validation will cause failure to resolve the NTP server domain name thus causing the DNS server to fail to validate all other domain names too due to invalid system date/time. To fix this issue, just create a Conditional Forwarder zone for the NTP server domain name (e.g. ntp.org) with forwarder set to <code>this-server</code> and Enable DNSSEC Validation option unchecked. This conditional forwarder zone will disable DNSSEC validation for the NTP server domain name and allow the device to update its system data/time on boot.</p>
  684. <p>Warning! When forwarders are configured, DNSSEC validation will work only if the forwarders are security aware i.e. can respond to DNSSEC requests correctly.</p>
  685. <p>Note! Enabling DNSSEC may increase delays in resolving domain names when the cache is initially empty. As the cache fills up, the performance will be normal as expected.</p>
  686. </div>
  687. </div>
  688. <div class="well well-sm form-horizontal">
  689. <div class="form-group">
  690. <label for="txtQpmLimitRequests" class="col-sm-3 control-label">Queries Per Minute (QPM) Limit (Requests)</label>
  691. <div class="col-sm-6">
  692. <input type="number" class="form-control" id="txtQpmLimitRequests" placeholder="limit" style="width: 100px; display: inline;">
  693. <span>(set 0 to disable)</span>
  694. </div>
  695. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The maximum queries a client subnet can make per minute on average based on the sample size.</div>
  696. </div>
  697. <div class="form-group">
  698. <label for="txtQpmLimitErrors" class="col-sm-3 control-label">Queries Per Minute (QPM) Limit (Errors)</label>
  699. <div class="col-sm-6">
  700. <input type="number" class="form-control" id="txtQpmLimitErrors" placeholder="limit" style="width: 100px; display: inline;">
  701. <span>(set 0 to disable)</span>
  702. </div>
  703. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The maximum queries that generate an error response a client subnet can make per minute on average based on the sample size. Responses with RCODE as FormatError, ServerFailure, or Refused are considered as error responses.</div>
  704. </div>
  705. <div class="form-group">
  706. <label for="txtQpmLimitSampleMinutes" class="col-sm-3 control-label">QPM Sample Size</label>
  707. <div class="col-sm-8">
  708. <input type="number" class="form-control" id="txtQpmLimitSampleMinutes" placeholder="sample" style="width: 100px; display: inline;">
  709. <span>minutes (valid range 1-60; default 5)</span>
  710. </div>
  711. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The sample size in minutes to be used for limiting queries per client.</div>
  712. </div>
  713. <div class="form-group">
  714. <label for="txtQpmLimitIPv4PrefixLength" class="col-sm-3 control-label">QPM Limit IPv4 Prefix Length</label>
  715. <div class="col-sm-6">
  716. <input type="number" class="form-control" id="txtQpmLimitIPv4PrefixLength" placeholder="prefix" style="width: 100px; display: inline;">
  717. <span>(valid range 0-32; default 24)</span>
  718. </div>
  719. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The IPv4 prefix length to define the client subnet.</div>
  720. </div>
  721. <div class="form-group">
  722. <label for="txtQpmLimitIPv6PrefixLength" class="col-sm-3 control-label">QPM Limit IPv6 Prefix Length</label>
  723. <div class="col-sm-6">
  724. <input type="number" class="form-control" id="txtQpmLimitIPv6PrefixLength" placeholder="prefix" style="width: 100px; display: inline;">
  725. <span>(valid range 0-64; default 56)</span>
  726. </div>
  727. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The IPv6 prefix length to define the client subnet.</div>
  728. </div>
  729. <div>Note! Queries Per Minute (QPM) feature will limit requests from a client subnet based on its IP address and the specified subnet prefix lengths. The QPM limit configured will be compared with the average count from the sample size which means a client may exceed the QPM limit for a given minute but won't exceed for the given sample size in minutes.</div>
  730. </div>
  731. <div class="well well-sm form-horizontal">
  732. <div class="form-group">
  733. <label for="txtClientTimeout" class="col-sm-3 control-label">Client Timeout</label>
  734. <div class="col-sm-6">
  735. <input type="number" class="form-control" id="txtClientTimeout" placeholder="timeout" style="width: 100px; display: inline;">
  736. <span>milliseconds (valid range 1000-10000; default 4000)</span>
  737. </div>
  738. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The amount of time the DNS server must wait before responding with a <code>ServerFailure</code> response to a client request when no answer is available.</div>
  739. </div>
  740. <div class="form-group">
  741. <label for="txtTcpSendTimeout" class="col-sm-3 control-label">TCP Send Timeout</label>
  742. <div class="col-sm-6">
  743. <input type="number" class="form-control" id="txtTcpSendTimeout" placeholder="timeout" style="width: 100px; display: inline;">
  744. <span>milliseconds (valid range 1000-90000; default 10000)</span>
  745. </div>
  746. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The amount of time a TCP socket must wait for an <code>ACK</code> before closing the connection. This option will apply for DNS requests being received by the DNS Server over TCP, TLS, or HTTPS transports.</div>
  747. </div>
  748. <div class="form-group">
  749. <label for="txtTcpReceiveTimeout" class="col-sm-3 control-label">TCP Receive Timeout</label>
  750. <div class="col-sm-6">
  751. <input type="number" class="form-control" id="txtTcpReceiveTimeout" placeholder="timeout" style="width: 100px; display: inline;">
  752. <span>milliseconds (valid range 1000-90000; default 10000)</span>
  753. </div>
  754. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The amount of time a TCP socket must wait for data before closing the connection. This option will apply for DNS requests being received by the DNS Server over TCP, TLS, or HTTPS transports.</div>
  755. </div>
  756. </div>
  757. </div>
  758. <div id="settingsTabPaneWebService" role="tabpanel" class="tab-pane">
  759. <div class="well well-sm form-horizontal">
  760. <div class="form-group">
  761. <label for="txtWebServiceLocalAddresses" class="col-sm-3 control-label">Web Service Local Addresses</label>
  762. <div class="col-sm-6">
  763. <textarea id="txtWebServiceLocalAddresses" class="form-control" rows="3" spellcheck="false"></textarea>
  764. </div>
  765. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">Local addresses are the network interface IP addresses you want the web service to listen for requests. The default values work for most scenarios so, do not change these defaults unless you have a requirement for the web service to listen on specific networks.</div>
  766. </div>
  767. <div class="form-group">
  768. <label for="txtWebServiceHttpPort" class="col-sm-3 control-label">Web Service HTTP Port</label>
  769. <div class="col-sm-6">
  770. <input type="number" class="form-control" id="txtWebServiceHttpPort" placeholder="port" style="width: 100px;">
  771. </div>
  772. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">Specify the TCP port number for this web console over HTTP protocol.</div>
  773. </div>
  774. <div class="form-group">
  775. <label class="col-sm-3 control-label">HTTPS Options</label>
  776. <div class="col-sm-8">
  777. <div class="checkbox">
  778. <label>
  779. <input id="chkWebServiceEnableTls" type="checkbox"> Enable HTTPS
  780. </label>
  781. </div>
  782. <div class="checkbox">
  783. <label>
  784. <input id="chkWebServiceHttpToTlsRedirect" type="checkbox"> Enable HTTP to HTTPS Redirection
  785. </label>
  786. </div>
  787. <div class="checkbox">
  788. <label>
  789. <input id="chkWebServiceUseSelfSignedTlsCertificate" type="checkbox"> Use A Self Signed TLS Certificate When TLS Certificate File Path Is Unspecified
  790. </label>
  791. </div>
  792. </div>
  793. </div>
  794. <div class="form-group">
  795. <label for="txtWebServiceTlsPort" class="col-sm-3 control-label">Web Service HTTPS Port</label>
  796. <div class="col-sm-6">
  797. <input type="number" class="form-control" id="txtWebServiceTlsPort" placeholder="port" style="width: 100px;">
  798. </div>
  799. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">Specify the TCP port number for this web console over TLS protocol.</div>
  800. </div>
  801. <div class="form-group">
  802. <label for="txtWebServiceTlsCertificatePath" class="col-sm-3 control-label">TLS Certificate File Path</label>
  803. <div class="col-sm-6">
  804. <input type="text" class="form-control" id="txtWebServiceTlsCertificatePath" placeholder="Web Service TLS Certificate File Path On Server">
  805. </div>
  806. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">Specify a PKCS #12 certificate (.pfx) file path on the server. The certificate must contain private key.</div>
  807. </div>
  808. <div class="form-group">
  809. <label for="txtWebServiceTlsCertificatePassword" class="col-sm-3 control-label">TLS Certificate Password</label>
  810. <div class="col-sm-6">
  811. <input type="password" class="form-control" id="txtWebServiceTlsCertificatePassword" placeholder="Web Service TLS Certificate Password">
  812. </div>
  813. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">Enter the certificate (.pfx) password, if any.</div>
  814. </div>
  815. <div>
  816. <p>Note! The web service port changes will be automatically applied and so you do not need to manually restart the main service. This web page will be automatically redirected to the new web console URL after saving settings. The HTTPS protocol will be enabled only when a TLS certificate is configured.</p>
  817. <p>When using a reverse proxy with the Web Service, you need to add <code>X-Real-IP</code> header to the proxy request with the IP address of the client to allow the Web server to know the real IP address of the client originating the request. For example, if you are using nginx as the reverse proxy, you can add <code>proxy_set_header X-Real-IP $remote_addr;</code> to make it work.</p>
  818. <p>Use the following openssl command to convert your TLS certificate that is in PEM format to PKCS #12 certificate (.pfx) format:</p>
  819. <pre>openssl pkcs12 -export -out "example.com.pfx" -inkey "privkey.pem" -in "cert.pem" -certfile "chain.pem"</pre>
  820. </div>
  821. </div>
  822. </div>
  823. <div id="settingsTabPaneOptionalProtocols" role="tabpanel" class="tab-pane">
  824. <div class="well well-sm form-horizontal">
  825. <div class="form-group">
  826. <label class="col-sm-3 control-label">Optional DNS Server Protocols</label>
  827. <div class="col-sm-8">
  828. <div class="checkbox">
  829. <label>
  830. <input id="chkEnableDnsOverHttp" type="checkbox"> Enable DNS-over-HTTP <code>(TCP Port 8053)</code>
  831. </label>
  832. </div>
  833. <div style="padding-top: 5px; padding-left: 20px;">Enable this option to accept DNS-over-HTTP requests for both wire and json response formats. It must be used with a TLS terminating reverse proxy like nginx and will work only on private networks.</div>
  834. <div class="checkbox">
  835. <label>
  836. <input id="chkEnableDnsOverTls" type="checkbox"> Enable DNS-over-TLS <code>(TCP Port 853)</code>
  837. </label>
  838. </div>
  839. <div style="padding-top: 5px; padding-left: 20px;">Enable this option to accept DNS-over-TLS requests.</div>
  840. <div class="checkbox">
  841. <label>
  842. <input id="chkEnableDnsOverHttps" type="checkbox"> Enable DNS-over-HTTPS <code>(TCP Port 80 &amp; 443)</code>
  843. </label>
  844. </div>
  845. <div style="padding-top: 5px; padding-left: 20px;">Enable this option to accept DNS-over-HTTPS requests for both wire and json response formats.</div>
  846. </div>
  847. </div>
  848. <div class="form-group">
  849. <label for="txtDnsTlsCertificatePath" class="col-sm-3 control-label">TLS Certificate File Path</label>
  850. <div class="col-sm-6">
  851. <input type="text" class="form-control" id="txtDnsTlsCertificatePath" placeholder="DNS Service TLS Certificate File Path On Server">
  852. </div>
  853. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">Specify a PKCS #12 certificate (.pfx) file path on the server. The certificate must contain private key.</div>
  854. </div>
  855. <div class="form-group">
  856. <label for="txtDnsTlsCertificatePassword" class="col-sm-3 control-label">TLS Certificate Password</label>
  857. <div class="col-sm-6">
  858. <input type="password" class="form-control" id="txtDnsTlsCertificatePassword" placeholder="DNS Service TLS Certificate Password">
  859. </div>
  860. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">Enter the certificate (.pfx) password, if any.</div>
  861. </div>
  862. <div>
  863. <p>Note! These optional DNS server protocol changes will be automatically applied and so you do not need to manually restart the main service. The DNS-over-TLS and DNS-over-HTTPS protocols will be enabled only when a TLS certificate is configured.</p>
  864. <p>These optional DNS server protocols are used to host these as a service. You do not need to enable these optional protocols to use them with Forwarders or Conditional Forwarder Zones.</p>
  865. <p>For DNS-over-HTTP, use <code>http://<span id="lblDoHHost">localhost:8053</span>/dns-query</code> with a TLS terminating reverse proxy like nginx. For DNS-over-TLS, use <code>tls-certificate-domain:853</code> and for DNS-over-HTTPS use <code>https://tls-certificate-domain/dns-query</code> to configure supported DNS clients.</p>
  866. <p>When using a reverse proxy with the DNS-over-HTTP service, you need to add <code>X-Real-IP</code> header to the proxy request with the IP address of the client to allow the DNS server to know the real IP address of the client originating the request. For example, if you are using nginx as the reverse proxy, you can add <code>proxy_set_header X-Real-IP $remote_addr;</code> to make it work.</p>
  867. <p>Use the following openssl command to convert your TLS certificate that is in PEM format to PKCS #12 certificate (.pfx) format:</p>
  868. <pre>openssl pkcs12 -export -out "example.com.pfx" -inkey "privkey.pem" -in "cert.pem" -certfile "chain.pem"</pre>
  869. </div>
  870. <div style="margin-top: 10px;"><a href="https://blog.technitium.com/2020/07/how-to-host-your-own-dns-over-https-and.html" target="_blank">Help: How To Host Your Own DNS-over-HTTPS And DNS-over-TLS Services</a></div>
  871. </div>
  872. </div>
  873. <div id="settingsTabPaneTsig" role="tabpanel" class="tab-pane">
  874. <div class="well well-sm form-horizontal">
  875. <div class="form-group">
  876. <label for="tableTsigKeys" class="col-sm-2 control-label">TSIG Keys</label>
  877. <div class="col-sm-10">
  878. <table class="table table-hover" style="margin-bottom: 0px;">
  879. <thead>
  880. <tr>
  881. <th>Key Name</th>
  882. <th>Shared Secret</th>
  883. <th>Algorithm</th>
  884. <th><button type="button" class="btn btn-default" style="padding: 0px 20px;" onclick="addTsigKeyRow('', '', 'hmac-sha256');">Add</button></th>
  885. </tr>
  886. </thead>
  887. <tbody id="tableTsigKeys"></tbody>
  888. </table>
  889. </div>
  890. <div class="col-sm-offset-2 col-sm-10" style="padding-top: 5px;">The shared secret can be a base64 string or a literal string. Keep the shared secret empty if you want to auto generate a strong key.</div>
  891. </div>
  892. <div>Note! You will need to configure these TSIG keys names for zone transfer in the zone options and in the secondary zone SOA record options separately.</div>
  893. </div>
  894. </div>
  895. <div id="settingsTabPaneRecursion" role="tabpanel" class="tab-pane">
  896. <div class="well well-sm form-horizontal">
  897. <div class="form-group">
  898. <label class="col-sm-3 control-label">Recursion</label>
  899. <div class="col-sm-8">
  900. <div class="radio">
  901. <label>
  902. <input type="radio" name="rdRecursion" id="rdRecursionDeny" value="Deny">
  903. Deny Recursion
  904. </label>
  905. <div style="padding-top: 5px; padding-left: 20px;">Disables recursion so that this DNS Server works as authoritative only.</div>
  906. </div>
  907. <div class="radio">
  908. <label>
  909. <input type="radio" name="rdRecursion" id="rdRecursionAllow" value="Allow">
  910. Allow Recursion
  911. </label>
  912. <div style="padding-top: 5px; padding-left: 20px;">Enables recursion to allow this DNS Server to resolve any domain name.</div>
  913. </div>
  914. <div class="radio">
  915. <label>
  916. <input type="radio" name="rdRecursion" id="rdRecursionAllowOnlyForPrivateNetworks" value="AllowOnlyForPrivateNetworks" checked>
  917. Allow Recursion Only For Private Networks (default)
  918. </label>
  919. <div style="padding-top: 5px; padding-left: 20px;">Select this option if you want to support recursion only on private networks. Any recursive request from a public network will be refused.</div>
  920. </div>
  921. <div class="radio">
  922. <label>
  923. <input type="radio" name="rdRecursion" id="rdRecursionUseSpecifiedNetworks" value="UseSpecifiedNetworks">
  924. Allow/Deny Recursion For Specified Networks
  925. </label>
  926. <div style="padding-top: 5px; padding-left: 20px;">Select this option to specify which networks (in CIDR form) must be allowed or denied. Denied networks are always matched first.</div>
  927. </div>
  928. </div>
  929. <div class="col-sm-offset-3 col-sm-6">
  930. <label for="txtRecursionDeniedNetworks" class="control-label">Denied Networks (CIDR)</label>
  931. <textarea id="txtRecursionDeniedNetworks" class="form-control" rows="5" spellcheck="false"></textarea>
  932. <label for="txtRecursionAllowedNetworks" class="control-label">Allowed Networks (CIDR)</label>
  933. <textarea id="txtRecursionAllowedNetworks" class="form-control" rows="5" spellcheck="false"></textarea>
  934. </div>
  935. </div>
  936. <div>Note! Disable recursion if you wish this server to act only as authoritative name server for the configured zones.</div>
  937. </div>
  938. <div class="well well-sm form-horizontal">
  939. <div class="form-group">
  940. <label class="col-sm-3 control-label">Recursive Resolver</label>
  941. <div class="col-sm-8">
  942. <div class="checkbox">
  943. <label>
  944. <input id="chkRandomizeName" type="checkbox"> Randomize Name
  945. </label>
  946. </div>
  947. <div style="padding-top: 5px; padding-left: 20px;">Enables <a href="https://datatracker.ietf.org/doc/html/draft-vixie-dnsext-dns0x20-00" target="_blank">QNAME randomization</a> when using UDP as the transport protocol to improve security.</div>
  948. <div class="checkbox">
  949. <label>
  950. <input id="chkQnameMinimization" type="checkbox"> QNAME Minimization
  951. </label>
  952. </div>
  953. <div style="padding-top: 5px; padding-left: 20px;">Enables <a href="https://datatracker.ietf.org/doc/html/draft-ietf-dnsop-rfc7816bis-04" target="_blank">QNAME minimization</a> for recursive resolution to improve privacy.</div>
  954. <div class="checkbox">
  955. <label>
  956. <input id="chkNsRevalidation" type="checkbox"> NS Revalidation
  957. </label>
  958. </div>
  959. <div style="padding-top: 5px; padding-left: 20px;">Enables <a href="https://datatracker.ietf.org/doc/draft-ietf-dnsop-ns-revalidation/" target="_blank">Delegation Revalidation</a> for recursive resolution.</div>
  960. </div>
  961. </div>
  962. </div>
  963. <div class="well well-sm form-horizontal">
  964. <div class="form-group">
  965. <label for="txtResolverRetries" class="col-sm-3 control-label">Resolver Retries</label>
  966. <div class="col-sm-6">
  967. <input type="number" class="form-control" id="txtResolverRetries" placeholder="retries" style="width: 100px; display: inline;">
  968. <span>(valid range 1-10; default 3)</span>
  969. </div>
  970. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The total number of retries the recursive resolver must do per name server.</div>
  971. </div>
  972. <div class="form-group">
  973. <label for="txtResolverTimeout" class="col-sm-3 control-label">Resolver Timeout</label>
  974. <div class="col-sm-6">
  975. <input type="number" class="form-control" id="txtResolverTimeout" placeholder="timeout" style="width: 100px; display: inline;">
  976. <span>milliseconds (valid range 1000-10000; default 2000)</span>
  977. </div>
  978. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The amount of time the recursive resolver must wait between retries.</div>
  979. </div>
  980. <div class="form-group">
  981. <label for="txtResolverMaxStackCount" class="col-sm-3 control-label">Resolver Max Stack Count</label>
  982. <div class="col-sm-6">
  983. <input type="number" class="form-control" id="txtResolverMaxStackCount" placeholder="count" style="width: 100px; display: inline;">
  984. <span>(valid range 10-30; default 16)</span>
  985. </div>
  986. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The maximum stack count the recursive resolver must use for resolving a domain name.</div>
  987. </div>
  988. </div>
  989. </div>
  990. <div id="settingsTabPaneCache" role="tabpanel" class="tab-pane">
  991. <div class="well well-sm form-horizontal">
  992. <div class="form-group">
  993. <label class="col-sm-3 control-label">DNS Cache</label>
  994. <div class="col-sm-8">
  995. <div class="checkbox">
  996. <label>
  997. <input id="chkServeStale" type="checkbox"> Serve Stale
  998. </label>
  999. </div>
  1000. <div style="padding-top: 5px; padding-left: 20px;">Enable the <a href="https://datatracker.ietf.org/doc/rfc8767/" target="_blank">Serve Stale</a> feature to improve resiliency by using expired or stale records in cache when the DNS server is unable to reach the upstream or authoritative name servers.</div>
  1001. </div>
  1002. </div>
  1003. <div class="form-group">
  1004. <label for="txtServeStaleTtl" class="col-sm-3 control-label">Serve Stale TTL</label>
  1005. <div class="col-sm-6">
  1006. <input type="number" class="form-control" id="txtServeStaleTtl" placeholder="seconds" style="width: 100px; display: inline;">
  1007. <span>seconds (recommended 259200 i.e. 3 days)</span>
  1008. </div>
  1009. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The TTL value in seconds which should be used for cached records that are expired. When the serve stale TTL too expires for a stale record, it gets removed from the cache. Recommended value is between 1-3 days and maximum supported value is 7 days.</div>
  1010. </div>
  1011. </div>
  1012. <div class="well well-sm form-horizontal">
  1013. <div class="form-group">
  1014. <label for="txtCacheMinimumRecordTtl" class="col-sm-3 control-label">Cache Minimum TTL</label>
  1015. <div class="col-sm-6">
  1016. <input type="number" class="form-control" id="txtCacheMinimumRecordTtl" placeholder="min TTL" style="width: 100px; display: inline;">
  1017. <span>seconds (recommended 10)</span>
  1018. </div>
  1019. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The minimum TTL value that a record can have in the cache. Set a value to make sure that the records with TTL value less than that stays in cache for a minimum duration.</div>
  1020. </div>
  1021. <div class="form-group">
  1022. <label for="txtCacheMaximumRecordTtl" class="col-sm-3 control-label">Cache Maximum TTL</label>
  1023. <div class="col-sm-8">
  1024. <input type="number" class="form-control" id="txtCacheMaximumRecordTtl" placeholder="max TTL" style="width: 100px; display: inline;">
  1025. <span>seconds (default 604800)</span>
  1026. </div>
  1027. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The maximum TTL value that a record can have in the cache. Set a lower value to allow the records to expire early.</div>
  1028. </div>
  1029. <div class="form-group">
  1030. <label for="txtCacheNegativeRecordTtl" class="col-sm-3 control-label">Cache Negative TTL</label>
  1031. <div class="col-sm-6">
  1032. <input type="number" class="form-control" id="txtCacheNegativeRecordTtl" placeholder="-ve TTL" style="width: 100px; display: inline;">
  1033. <span>seconds (recommended 300)</span>
  1034. </div>
  1035. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The negative TTL value to use when there is no SOA MINIMUM value available.</div>
  1036. </div>
  1037. <div class="form-group">
  1038. <label for="txtCacheFailureRecordTtl" class="col-sm-3 control-label">Cache Failure TTL</label>
  1039. <div class="col-sm-6">
  1040. <input type="number" class="form-control" id="txtCacheFailureRecordTtl" placeholder="fail TTL" style="width: 100px; display: inline;">
  1041. <span>seconds (recommended 60)</span>
  1042. </div>
  1043. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The failure TTL value to be used for caching failure responses. This allows storing failure record in cache and prevent frequent recursive resolution requests to the name servers that are responding with <code>ServerFailure</code>.</div>
  1044. </div>
  1045. </div>
  1046. <div class="well well-sm form-horizontal">
  1047. <div class="form-group">
  1048. <label for="txtCachePrefetchEligibility" class="col-sm-3 control-label">Prefetch Eligibility</label>
  1049. <div class="col-sm-6">
  1050. <input type="number" class="form-control" id="txtCachePrefetchEligibility" placeholder="eligibility" style="width: 100px; display: inline;">
  1051. <span>seconds (recommended 2)</span>
  1052. </div>
  1053. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The minimum initial TTL value of a record needed to be eligible for prefetching.</div>
  1054. </div>
  1055. <div class="form-group">
  1056. <label for="txtCachePrefetchTrigger" class="col-sm-3 control-label">Prefetch Trigger</label>
  1057. <div class="col-sm-8">
  1058. <input type="number" class="form-control" id="txtCachePrefetchTrigger" placeholder="trigger" style="width: 100px; display: inline;">
  1059. <span>seconds (recommended 9; set 0 to disable prefetching &amp; auto prefetching)</span>
  1060. </div>
  1061. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">A record with TTL value less than trigger value will initiate prefetch operation immediately for itself.</div>
  1062. </div>
  1063. <div class="form-group">
  1064. <label for="txtCachePrefetchSampleIntervalInMinutes" class="col-sm-3 control-label">Auto Prefetch Sampling</label>
  1065. <div class="col-sm-6">
  1066. <input type="number" class="form-control" id="txtCachePrefetchSampleIntervalInMinutes" placeholder="interval" style="width: 100px; display: inline;">
  1067. <span>minutes (valid range 1-60; default 5)</span>
  1068. </div>
  1069. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The interval to sample eligible domain names from last hour stats for auto prefetch.</div>
  1070. </div>
  1071. <div class="form-group">
  1072. <label for="txtCachePrefetchSampleEligibilityHitsPerHour" class="col-sm-3 control-label">Auto Prefetch Eligibility</label>
  1073. <div class="col-sm-6">
  1074. <input type="number" class="form-control" id="txtCachePrefetchSampleEligibilityHitsPerHour" placeholder="hits" style="width: 100px; display: inline;">
  1075. <span>hits/hour (default 30)</span>
  1076. </div>
  1077. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">Minimum required hits per hour for a domain name to be eligible for auto prefetch.</div>
  1078. </div>
  1079. <div>The DNS Server cache auto prefetch option can keep eligible domain names from last hour stats "hot" in cache. Auto prefetch eligibility value can be decided by keeping an eye on the hits shown for last hour on the dashboard. Experiment with auto prefetch sampling interval and eligibility to get best results.</div>
  1080. </div>
  1081. </div>
  1082. <div id="settingsTabPaneBlocking" role="tabpanel" class="tab-pane">
  1083. <div class="well well-sm form-horizontal">
  1084. <div class="form-group">
  1085. <label class="col-sm-3 control-label">Blocking</label>
  1086. <div class="col-sm-8">
  1087. <div class="checkbox">
  1088. <label>
  1089. <input id="chkEnableBlocking" type="checkbox"> Enable Blocking
  1090. </label>
  1091. </div>
  1092. <div style="padding-top: 5px; padding-left: 20px;">Sets the DNS server to block domain names using Blocked Zone and Block List Zone.</div>
  1093. <div class="checkbox">
  1094. <label>
  1095. <input id="chkAllowTxtBlockingReport" type="checkbox"> Allow TXT Blocking Report
  1096. </label>
  1097. </div>
  1098. <div style="padding-top: 5px; padding-left: 20px;">Specifies if the DNS Server should respond with TXT records containing a blocked domain report for TXT type requests.</div>
  1099. </div>
  1100. </div>
  1101. <div class="form-group">
  1102. <label class="col-sm-3 control-label">Blocking Temporarily Disabled Till</label>
  1103. <div class="col-sm-8">
  1104. <div id="lblTemporaryDisableBlockingTill" style="padding-top: 7px;"></div>
  1105. <div style="padding-top: 12px;">
  1106. <input type="number" class="form-control" id="txtTemporaryDisableBlockingMinutes" placeholder="minutes" style="width: 100px; display: inline;">
  1107. <span>minutes</span>
  1108. </div>
  1109. <div style="padding-top: 6px;">
  1110. <button id="btnTemporaryDisableBlockingNow" type="button" class="btn btn-default" style="padding: 2px 0; width: 170px;" data-loading-text="Disabling..." onclick="temporaryDisableBlockingNow();">Temporary Disable Now</button>
  1111. </div>
  1112. </div>
  1113. </div>
  1114. <div class="form-group">
  1115. <label class="col-sm-3 control-label">Blocking Type</label>
  1116. <div class="col-sm-8">
  1117. <div class="radio">
  1118. <label>
  1119. <input type="radio" name="rdBlockingType" id="rdBlockingTypeAnyAddress" value="AnyAddress">
  1120. Any Address (default)
  1121. </label>
  1122. <div style="padding-top: 5px; padding-left: 20px;">Uses <code>0.0.0.0</code> and <code>::</code> IP addresses for blocked domain names.</div>
  1123. </div>
  1124. <div class="radio">
  1125. <label>
  1126. <input type="radio" name="rdBlockingType" id="rdBlockingTypeNxDomain" value="NxDomain">
  1127. NX Domain
  1128. </label>
  1129. <div style="padding-top: 5px; padding-left: 20px;">Uses <code>NX Domain</code> response for blocked domain names.</div>
  1130. </div>
  1131. <div class="radio">
  1132. <label>
  1133. <input type="radio" name="rdBlockingType" id="rdBlockingTypeCustomAddress" value="CustomAddress">
  1134. Custom Address
  1135. </label>
  1136. <div style="padding-top: 5px; padding-left: 20px;">Uses custom IP addresses provided below for blocked domain names.</div>
  1137. </div>
  1138. </div>
  1139. <div class="col-sm-offset-3 col-sm-6" style="margin-bottom: 10px;">
  1140. <label for="txtCustomBlockingAddresses" class="control-label">Custom Blocking Addresses (IP Address)</label>
  1141. <textarea id="txtCustomBlockingAddresses" class="form-control" rows="3" spellcheck="false"></textarea>
  1142. </div>
  1143. </div>
  1144. <div class="form-group">
  1145. <label for="txtBlockListUrls" class="col-sm-3 control-label">Block List URLs</label>
  1146. <div class="col-sm-6">
  1147. <textarea id="txtBlockListUrls" class="form-control" rows="7" spellcheck="false"></textarea>
  1148. <label for="optQuickBlockList" class="control-label">Quick Add</label>
  1149. <select id="optQuickBlockList" class="form-control" style="width: 100%;">
  1150. <option value="blank" selected></option>
  1151. <option value="none">None</option>
  1152. <option value="default">Default</option>
  1153. <option id="optCustomLocalBlockList" value="http://localhost:5380/blocklist.txt">Custom Local Block List (http://localhost:5380/blocklist.txt)</option>
  1154. <option value="https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts">Steven Black [adware + malware] (https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts)</option>
  1155. <option value="https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews/hosts">Steven Black [adware + malware + fakenews] (https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews/hosts)</option>
  1156. <option value="https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/gambling/hosts">Steven Black [adware + malware + gambling] (https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/gambling/hosts)</option>
  1157. <option value="https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/porn/hosts">Steven Black [adware + malware + porn] (https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/porn/hosts)</option>
  1158. <option value="https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/social/hosts">Steven Black [adware + malware + social] (https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/social/hosts)</option>
  1159. <option value="https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-gambling/hosts">Steven Black [adware + malware + fakenews + gambling] (https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-gambling/hosts)</option>
  1160. <option value="https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-porn/hosts">Steven Black [adware + malware + fakenews + porn] (https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-porn/hosts)</option>
  1161. <option value="https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-social/hosts">Steven Black [adware + malware + fakenews + social] (https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-social/hosts)</option>
  1162. <option value="https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/gambling-porn/hosts">Steven Black [adware + malware + gambling + porn] (https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/gambling-porn/hosts)</option>
  1163. <option value="https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/gambling-social/hosts">Steven Black [adware + malware + gambling + social] (https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/gambling-social/hosts)</option>
  1164. <option value="https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/porn-social/hosts">Steven Black [adware + malware + porn + social] (https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/porn-social/hosts)</option>
  1165. <option value="https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-gambling-porn/hosts">Steven Black [adware + malware + fakenews + gambling + porn] (https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-gambling-porn/hosts)</option>
  1166. <option value="https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-gambling-social/hosts">Steven Black [adware + malware + fakenews + gambling + social] (https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-gambling-social/hosts)</option>
  1167. <option value="https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-porn-social/hosts">Steven Black [adware + malware + fakenews + porn + social] (https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-porn-social/hosts)</option>
  1168. <option value="https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/gambling-porn-social/hosts">Steven Black [adware + malware + gambling + porn + social] (https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/gambling-porn-social/hosts)</option>
  1169. <option value="https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-gambling-porn-social/hosts">Steven Black [adware + malware + fakenews + gambling + porn + social] (https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-gambling-porn-social/hosts)</option>
  1170. <option value="https://s3.amazonaws.com/lists.disconnect.me/simple_tracking.txt">Disconnect.me [tracking] (https://s3.amazonaws.com/lists.disconnect.me/simple_tracking.txt)</option>
  1171. <option value="https://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt">Disconnect.me [ads] (https://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt)</option>
  1172. <option value="https://dbl.oisd.nl/">OISD Block List by sjhgvr (https://dbl.oisd.nl/)</option>
  1173. </select>
  1174. </div>
  1175. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">
  1176. <p>Enter block list URL one below another in the above text field or use the Quick Add list to add known block list URLs.</p>
  1177. <p>Add <code>!</code> character at the start of an URL to make it an allow list URL. Domain names in such an allow list URL are prevented from being added to the block list zone.</p>
  1178. </div>
  1179. </div>
  1180. <div class="form-group">
  1181. <label for="txtBlockListUpdateIntervalHours" class="col-sm-3 control-label">Block List Update Interval</label>
  1182. <div class="col-sm-6">
  1183. <input type="number" class="form-control" id="txtBlockListUpdateIntervalHours" placeholder="hours" style="width: 100px; display: inline;">
  1184. <span>hours (default 24, valid range 1-168)</span>
  1185. </div>
  1186. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The interval in hours to automatically download and update the block lists.</div>
  1187. </div>
  1188. <div class="form-group">
  1189. <label for="lblBlockListNextUpdatedOn" class="col-sm-3 control-label">Block List Next Update On</label>
  1190. <div class="col-sm-6" style="padding-top: 5px;">
  1191. <span id="lblBlockListNextUpdatedOn" style="margin-right: 15px;"></span>
  1192. <button id="btnUpdateBlockListsNow" type="button" class="btn btn-default" style="padding: 2px 0; width: 100px;" data-loading-text="Updating..." onclick="forceUpdateBlockLists();">Update Now</button>
  1193. </div>
  1194. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">Click the 'Update Now' button to reset the next update schedule and force download and update of the block lists.</div>
  1195. </div>
  1196. <div style="margin-top: 10px;">DNS Server will use the data returned by the block list URLs to update the block list zone automatically. The expected file format is standard <code>hosts</code> file format or plain text file containing list of domains to block.</div>
  1197. <div style="margin-top: 10px;"><a href="https://blog.technitium.com/2018/10/blocking-internet-ads-using-dns-sinkhole.html" target="_blank">Help: Blocking Internet Ads Using DNS Sinkhole</a></div>
  1198. </div>
  1199. </div>
  1200. <div id="settingsTabPaneProxyForwarders" role="tabpanel" class="tab-pane">
  1201. <div class="well well-sm form-horizontal">
  1202. <div class="form-group">
  1203. <label class="col-sm-3 control-label">Network Proxy</label>
  1204. <div class="col-sm-6">
  1205. <div class="radio">
  1206. <label>
  1207. <input type="radio" name="rdProxyType" id="rdProxyTypeNone" value="None" checked>
  1208. No Proxy (default)
  1209. </label>
  1210. </div>
  1211. <div class="radio">
  1212. <label>
  1213. <input type="radio" name="rdProxyType" id="rdProxyTypeHttp" value="Http">
  1214. HTTP Proxy
  1215. </label>
  1216. </div>
  1217. <div class="radio">
  1218. <label>
  1219. <input type="radio" name="rdProxyType" id="rdProxyTypeSocks5" value="Socks5">
  1220. SOCKS5 Proxy
  1221. </label>
  1222. </div>
  1223. </div>
  1224. </div>
  1225. <div class="form-group">
  1226. <label for="txtProxyAddress" class="col-sm-3 control-label">Proxy Server Address</label>
  1227. <div class="col-sm-6">
  1228. <input type="text" class="form-control" id="txtProxyAddress" placeholder="domain name or IP address">
  1229. </div>
  1230. </div>
  1231. <div class="form-group">
  1232. <label for="txtProxyPort" class="col-sm-3 control-label">Proxy Server Port</label>
  1233. <div class="col-sm-6">
  1234. <input type="number" class="form-control" id="txtProxyPort" placeholder="port" style="width: 100px;">
  1235. </div>
  1236. </div>
  1237. <div class="form-group">
  1238. <label for="txtProxyUsername" class="col-sm-3 control-label">Username</label>
  1239. <div class="col-sm-6">
  1240. <input type="text" class="form-control" id="txtProxyUsername" placeholder="username">
  1241. </div>
  1242. </div>
  1243. <div class="form-group">
  1244. <label for="txtProxyPassword" class="col-sm-3 control-label">Password</label>
  1245. <div class="col-sm-6">
  1246. <input type="password" class="form-control" id="txtProxyPassword" placeholder="password">
  1247. </div>
  1248. </div>
  1249. <div class="form-group">
  1250. <label for="txtProxyBypassList" class="col-sm-3 control-label">Proxy Bypass List</label>
  1251. <div class="col-sm-6">
  1252. <textarea id="txtProxyBypassList" class="form-control" rows="5" spellcheck="false"></textarea>
  1253. </div>
  1254. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">Enter IP addresses, network addresses or domain names to never proxy.</div>
  1255. </div>
  1256. <div style="margin-top: 10px;">When proxy server is configured, DNS Server will use it for all outbound network requests.</div>
  1257. </div>
  1258. <div class="well well-sm form-horizontal">
  1259. <div class="form-group">
  1260. <label for="txtForwarders" class="col-sm-3 control-label">Forwarders</label>
  1261. <div class="col-sm-6">
  1262. <textarea id="txtForwarders" class="form-control" rows="3" spellcheck="false"></textarea>
  1263. <label for="optQuickForwarders" class="control-label">Quick Select</label>
  1264. <select id="optQuickForwarders" class="form-control" style="width: 100%;">
  1265. <option value="blank" selected></option>
  1266. <option value="none">None</option>
  1267. <option value="cloudflare-udp">Cloudflare (DNS-over-UDP)</option>
  1268. <option value="cloudflare-udp-ipv6">Cloudflare (DNS-over-UDP IPv6)</option>
  1269. <option value="cloudflare-tcp">Cloudflare (DNS-over-TCP)</option>
  1270. <option value="cloudflare-tcp-ipv6">Cloudflare (DNS-over-TCP IPv6)</option>
  1271. <option value="cloudflare-tls">Cloudflare (DNS-over-TLS)</option>
  1272. <option value="cloudflare-tls-ipv6">Cloudflare (DNS-over-TLS IPv6)</option>
  1273. <option value="cloudflare-https">Cloudflare (DNS-over-HTTPS)</option>
  1274. <option value="cloudflare-json">Cloudflare (DNS-over-HTTPS-JSON)</option>
  1275. <option value="cloudflare-tor">Cloudflare (DNS-over-TOR!)</option>
  1276. <option value="google-udp">Google (DNS-over-UDP)</option>
  1277. <option value="google-udp-ipv6">Google (DNS-over-UDP IPv6)</option>
  1278. <option value="google-tcp">Google (DNS-over-TCP)</option>
  1279. <option value="google-tcp-ipv6">Google (DNS-over-TCP IPv6)</option>
  1280. <option value="google-tls">Google (DNS-over-TLS)</option>
  1281. <option value="google-tls-ipv6">Google (DNS-over-TLS IPv6)</option>
  1282. <option value="google-https">Google (DNS-over-HTTPS)</option>
  1283. <option value="google-json">Google (DNS-over-HTTPS-JSON)</option>
  1284. <option value="quad9-udp">Quad9 Secure (DNS-over-UDP)</option>
  1285. <option value="quad9-udp-ipv6">Quad9 Secure (DNS-over-UDP IPv6)</option>
  1286. <option value="quad9-tcp">Quad9 Secure (DNS-over-TCP)</option>
  1287. <option value="quad9-tcp-ipv6">Quad9 Secure (DNS-over-TCP IPv6)</option>
  1288. <option value="quad9-tls">Quad9 Secure (DNS-over-TLS)</option>
  1289. <option value="quad9-tls-ipv6">Quad9 Secure (DNS-over-TLS IPv6)</option>
  1290. <option value="quad9-https">Quad9 Secure (DNS-over-HTTPS)</option>
  1291. <option value="quad9-unsecure-udp">Quad9 Unsecure (DNS-over-UDP)</option>
  1292. <option value="quad9-unsecure-udp-ipv6">Quad9 Unsecure (DNS-over-UDP IPv6)</option>
  1293. <option value="quad9-unsecure-tcp">Quad9 Unsecure (DNS-over-TCP)</option>
  1294. <option value="quad9-unsecure-tcp-ipv6">Quad9 Unsecure (DNS-over-TCP IPv6)</option>
  1295. <option value="quad9-unsecure-tls">Quad9 Unsecure (DNS-over-TLS)</option>
  1296. <option value="quad9-unsecure-tls-ipv6">Quad9 Unsecure (DNS-over-TLS IPv6)</option>
  1297. <option value="quad9-unsecure-https">Quad9 Unsecure (DNS-over-HTTPS)</option>
  1298. <option value="opendns-udp">OpenDNS (DNS-over-UDP)</option>
  1299. <option value="opendns-udp-ipv6">OpenDNS (DNS-over-UDP IPv6)</option>
  1300. <option value="opendns-tcp">OpenDNS (DNS-over-TCP)</option>
  1301. <option value="opendns-tcp-ipv6">OpenDNS (DNS-over-TCP IPv6)</option>
  1302. <option value="opendns-fs-udp">OpenDNS FamilyShield (DNS-over-UDP)</option>
  1303. </select>
  1304. <div style="margin-top: 10px;">Enter forwarder DNS Server IP addresses or URLs one below another in above text field or use the Quick Select list to select desired forwarder.</div>
  1305. </div>
  1306. </div>
  1307. <div class="form-group">
  1308. <label class="col-sm-3 control-label">Forwarder Protocol</label>
  1309. <div class="col-sm-8">
  1310. <div class="radio">
  1311. <label>
  1312. <input type="radio" name="rdForwarderProtocol" id="rdForwarderProtocolUdp" value="Udp" checked>
  1313. DNS-over-UDP (default)
  1314. </label>
  1315. </div>
  1316. <div class="radio">
  1317. <label>
  1318. <input type="radio" name="rdForwarderProtocol" id="rdForwarderProtocolTcp" value="Tcp">
  1319. DNS-over-TCP
  1320. </label>
  1321. </div>
  1322. <div class="radio">
  1323. <label>
  1324. <input type="radio" name="rdForwarderProtocol" id="rdForwarderProtocolTls" value="Tls">
  1325. DNS-over-TLS
  1326. </label>
  1327. </div>
  1328. <div class="radio">
  1329. <label>
  1330. <input type="radio" name="rdForwarderProtocol" id="rdForwarderProtocolHttps" value="Https">
  1331. DNS-over-HTTPS
  1332. </label>
  1333. </div>
  1334. <div class="radio">
  1335. <label>
  1336. <input type="radio" name="rdForwarderProtocol" id="rdForwarderProtocolHttpsJson" value="HttpsJson">
  1337. DNS-over-HTTPS (JSON)
  1338. </label>
  1339. </div>
  1340. <div style="margin-top: 10px;">Select a protocol that this DNS server must use to query the forwarders specified above.</div>
  1341. </div>
  1342. </div>
  1343. <div style="margin-top: 10px;">Forwarders are DNS servers which this DNS Server should use to resolve recursive queries. If no forwarders are configured then this DNS server will use preconfigured ROOT SERVERS to perform recursive resolution.</div>
  1344. <div style="margin-top: 10px;"><a href="https://blog.technitium.com/2018/06/configuring-dns-server-for-privacy.html" target="_blank">Help: Configuring DNS Server For Privacy & Security</a></div>
  1345. </div>
  1346. <div class="well well-sm form-horizontal">
  1347. <div class="form-group">
  1348. <label for="txtForwarderRetries" class="col-sm-3 control-label">Forwarder Retries</label>
  1349. <div class="col-sm-6">
  1350. <input type="number" class="form-control" id="txtForwarderRetries" placeholder="retries" style="width: 100px; display: inline;">
  1351. <span>(valid range 1-10; default 3)</span>
  1352. </div>
  1353. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The total number of retries the forwarder or conditional forwarder resolver must do per upstream DNS server.</div>
  1354. </div>
  1355. <div class="form-group">
  1356. <label for="txtForwarderTimeout" class="col-sm-3 control-label">Forwarder Timeout</label>
  1357. <div class="col-sm-6">
  1358. <input type="number" class="form-control" id="txtForwarderTimeout" placeholder="timeout" style="width: 100px; display: inline;">
  1359. <span>milliseconds (valid range 1000-10000; default 2000)</span>
  1360. </div>
  1361. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The amount of time the forwarder or conditional forwarder resolver must wait between retries.</div>
  1362. </div>
  1363. <div class="form-group">
  1364. <label for="txtForwarderConcurrency" class="col-sm-3 control-label">Forwarder Concurrency</label>
  1365. <div class="col-sm-6">
  1366. <input type="number" class="form-control" id="txtForwarderConcurrency" placeholder="count" style="width: 100px; display: inline;">
  1367. <span>(valid range 1-10; default 2)</span>
  1368. </div>
  1369. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The number of concurrent requests that the forwarder or conditional forwarder resolver must send when resolving a domain name.</div>
  1370. </div>
  1371. </div>
  1372. </div>
  1373. <div id="settingsTabPaneLogging" role="tabpanel" class="tab-pane">
  1374. <div class="well well-sm form-horizontal">
  1375. <div class="form-group">
  1376. <label class="col-sm-3 control-label">Logging</label>
  1377. <div class="col-sm-8">
  1378. <div class="checkbox">
  1379. <label>
  1380. <input id="chkEnableLogging" type="checkbox"> Enable Logging
  1381. </label>
  1382. </div>
  1383. <div style="padding-top: 5px; padding-left: 20px;">Enable this option to log error and audit logs into the log file.</div>
  1384. <div class="checkbox">
  1385. <label>
  1386. <input id="chkLogQueries" type="checkbox"> Log All Queries
  1387. </label>
  1388. </div>
  1389. <div style="padding-top: 5px; padding-left: 20px;">Enable this option to log every query received by this DNS Server and the corresponding response answers into the log file.</div>
  1390. <div class="checkbox">
  1391. <label>
  1392. <input id="chkUseLocalTime" type="checkbox"> Use Local Time
  1393. </label>
  1394. </div>
  1395. <div style="padding-top: 5px; padding-left: 20px;">Enable this option to use local time instead of UTC for logging.</div>
  1396. </div>
  1397. </div>
  1398. <div class="form-group">
  1399. <label for="txtLogFolderPath" class="col-sm-3 control-label">Log Folder Path</label>
  1400. <div class="col-sm-6">
  1401. <input type="text" class="form-control" id="txtLogFolderPath" placeholder="Log Folder Path On Server">
  1402. </div>
  1403. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The folder path on the server where the log files should be saved. The path can be relative to the DNS server config folder.</div>
  1404. </div>
  1405. <div class="form-group">
  1406. <label for="txtMaxLogFileDays" class="col-sm-3 control-label">Max Log File Days</label>
  1407. <div class="col-sm-6">
  1408. <input type="number" class="form-control" id="txtMaxLogFileDays" placeholder="Max Days" style="width: 100px; display: inline;">
  1409. <span>days (default 365, set 0 to disable auto delete)</span>
  1410. </div>
  1411. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">Max number of days to keep the log files. Log files older than the specified number of days will be deleted automatically.</div>
  1412. </div>
  1413. <div class="form-group">
  1414. <label for="txtMaxStatFileDays" class="col-sm-3 control-label">Max Stat File Days</label>
  1415. <div class="col-sm-6">
  1416. <input type="number" class="form-control" id="txtMaxStatFileDays" placeholder="Max Days" style="width: 100px; display: inline;">
  1417. <span>days (default 365, set 0 to disable auto delete)</span>
  1418. </div>
  1419. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">Max number of days to keep the dashboard stats. Stat files older than the specified number of days will be deleted automatically.</div>
  1420. </div>
  1421. <div>Warning! Enabling query logging will significantly increase the log file size and use up disk space.</div>
  1422. </div>
  1423. </div>
  1424. </div>
  1425. <div class="form-group" style="margin-bottom: 0px;">
  1426. <div class="pull-left">
  1427. <button id="btnSaveDnsSettings" type="button" class="btn btn-primary" data-loading-text="Saving..." onclick="saveDnsSettings();">Save Settings</button>
  1428. <button type="button" class="btn btn-danger" data-loading-text="Flushing..." onclick="flushDnsCache(this);" style="margin-left: 6px;">Flush Cache</button>
  1429. </div>
  1430. <div class="pull-right">
  1431. <button type="button" class="btn btn-success" onclick="resetBackupSettingsModal();" data-toggle="modal" data-target="#modalBackupSettings">Backup Settings</button>
  1432. <button type="button" class="btn btn-warning" onclick="resetRestoreSettingsModal();" data-toggle="modal" data-target="#modalRestoreSettings" style="margin-left: 6px;">Restore Settings</button>
  1433. </div>
  1434. <div class="clearfix"></div>
  1435. </div>
  1436. </form>
  1437. </div>
  1438. </div>
  1439. <div id="mainPanelTabPaneDhcp" role="tabpanel" class="tab-pane" style="padding: 10px 0 0 0;">
  1440. <ul class="nav nav-tabs" role="tablist">
  1441. <li id="dhcpTabListLeases" role="presentation" class="active"><a href="#dhcpTabPaneLeases" aria-controls="dhcpTabPaneLeases" role="tab" data-toggle="tab" onclick="refreshDhcpLeases();">Leases</a></li>
  1442. <li id="dhcpTabListScopes" role="presentation"><a href="#dhcpTabPaneScopes" aria-controls="dhcpTabPaneScopes" role="tab" data-toggle="tab" onclick="refreshDhcpScopes(true);">Scopes</a></li>
  1443. </ul>
  1444. <div class="tab-content">
  1445. <div id="dhcpTabPaneLeases" class="tab-pane active">
  1446. <div id="divDhcpLeasesLoader" style="margin-top: 10px; height: 350px;"></div>
  1447. <div id="divDhcpLeases" style="margin-top: 10px;">
  1448. <table class="table table-hover">
  1449. <thead>
  1450. <tr>
  1451. <th onclick="sortTable('tableDhcpLeasesBody', 0);">Scope</th>
  1452. <th onclick="sortTable('tableDhcpLeasesBody', 1);">MAC Address</th>
  1453. <th onclick="sortTable('tableDhcpLeasesBody', 2);">IP Address</th>
  1454. <th onclick="sortTable('tableDhcpLeasesBody', 3);"></th>
  1455. <th onclick="sortTable('tableDhcpLeasesBody', 4);">Host Name</th>
  1456. <th onclick="sortTable('tableDhcpLeasesBody', 5);">Lease Obtained</th>
  1457. <th onclick="sortTable('tableDhcpLeasesBody', 6);">Lease Expires</th>
  1458. <th style="width: 30px;" align="right"></th>
  1459. </tr>
  1460. </thead>
  1461. <tbody id="tableDhcpLeasesBody">
  1462. </tbody>
  1463. <tfoot id="tableDhcpLeasesFooter">
  1464. <tr><td><b>Total Leases: 0</b></td></tr>
  1465. </tfoot>
  1466. </table>
  1467. </div>
  1468. </div>
  1469. <div id="dhcpTabPaneScopes" class="tab-pane">
  1470. <div id="divDhcpViewScopesLoader" style="margin-top: 10px; height: 350px;"></div>
  1471. <div id="divDhcpViewScopes" style="margin-top: 10px;">
  1472. <div style="float: right; padding: 2px 0px;">
  1473. <button type="button" class="btn btn-primary" style="padding: 2px 0px; width: 100px;" onclick="showAddDhcpScope();">Add Scope</button>
  1474. </div>
  1475. <div style="clear: both;"></div>
  1476. <table class="table table-hover">
  1477. <thead>
  1478. <tr>
  1479. <th onclick="sortTable('tableDhcpScopesBody', 0);">Name</th>
  1480. <th onclick="sortTable('tableDhcpScopesBody', 1);">Scope Range/Subnet Mask</th>
  1481. <th onclick="sortTable('tableDhcpScopesBody', 2);">Network/Broadcast</th>
  1482. <th onclick="sortTable('tableDhcpScopesBody', 3);">Interface</th>
  1483. <th></th>
  1484. </tr>
  1485. </thead>
  1486. <tbody id="tableDhcpScopesBody">
  1487. </tbody>
  1488. <tfoot id="tableDhcpScopesFooter">
  1489. <tr><td><b>Total Leases: 0</b></td></tr>
  1490. </tfoot>
  1491. </table>
  1492. </div>
  1493. <div id="divDhcpEditScope" style="display: none;">
  1494. <form style="margin-top: 10px; margin-bottom: 0px;" onsubmit="return false;">
  1495. <h4 style="padding: 10px 0px;" id="titleDhcpEditScope">Edit Scope</h4>
  1496. <div class="well well-sm form-horizontal">
  1497. <div class="form-group">
  1498. <label for="txtDhcpScopeName" class="col-sm-3 control-label">Name</label>
  1499. <div class="col-sm-6">
  1500. <input type="text" class="form-control" id="txtDhcpScopeName" data-name="" placeholder="Scope Name">
  1501. </div>
  1502. </div>
  1503. <div class="form-group">
  1504. <label for="txtDhcpScopeStartingAddress" class="col-sm-3 control-label">Starting Address</label>
  1505. <div class="col-sm-3">
  1506. <input type="text" class="form-control" id="txtDhcpScopeStartingAddress" placeholder="Starting Address">
  1507. </div>
  1508. </div>
  1509. <div class="form-group">
  1510. <label for="txtDhcpScopeEndingAddress" class="col-sm-3 control-label">Ending Address</label>
  1511. <div class="col-sm-3">
  1512. <input type="text" class="form-control" id="txtDhcpScopeEndingAddress" placeholder="Ending Address">
  1513. </div>
  1514. </div>
  1515. <div class="form-group">
  1516. <label for="txtDhcpScopeSubnetMask" class="col-sm-3 control-label">Subnet Mask</label>
  1517. <div class="col-sm-3">
  1518. <input type="text" class="form-control" id="txtDhcpScopeSubnetMask" placeholder="Subnet Mask">
  1519. </div>
  1520. </div>
  1521. <div class="form-group">
  1522. <label for="txtDhcpScopeLeaseTimeDays" class="col-sm-3 control-label">Lease Time</label>
  1523. <div class="col-sm-7">
  1524. <label for="txtDhcpScopeLeaseTimeDays" class="control-label">Days</label>
  1525. <input type="number" class="form-control" style="display: inline; width: 80px; margin-right: 15px;" id="txtDhcpScopeLeaseTimeDays" placeholder="Days">
  1526. <label for="txtDhcpScopeLeaseTimeHours" class="control-label">Hours</label>
  1527. <input type="number" class="form-control" style="display: inline; width: 80px; margin-right: 15px;" id="txtDhcpScopeLeaseTimeHours" placeholder="Hrs">
  1528. <label for="txtDhcpScopeLeaseTimeMinutes" class="control-label">Minutes</label>
  1529. <input type="number" class="form-control" style="display: inline; width: 80px; margin-right: 15px;" id="txtDhcpScopeLeaseTimeMinutes" placeholder="Mins">
  1530. </div>
  1531. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The duration for which the clients should be leased the IP address.</div>
  1532. </div>
  1533. <div class="form-group" style="margin-bottom: 0px;">
  1534. <label for="txtDhcpScopeOfferDelayTime" class="col-sm-3 control-label">Offer Delay Time</label>
  1535. <div class="col-sm-3">
  1536. <input type="number" class="form-control" style="width: 80px; display: inline;" id="txtDhcpScopeOfferDelayTime" placeholder="Delay">
  1537. <span>milliseconds</span>
  1538. </div>
  1539. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The time duration that the DHCP server delays sending an DHCPOFFER message.</div>
  1540. </div>
  1541. </div>
  1542. <div class="well well-sm form-horizontal">
  1543. <div class="form-group">
  1544. <label for="chkDhcpScopePingCheckEnabled" class="col-sm-3 control-label">Ping Check</label>
  1545. <div class="col-sm-6">
  1546. <div class="checkbox">
  1547. <label>
  1548. <input id="chkDhcpScopePingCheckEnabled" type="checkbox"> Enable Ping Check
  1549. </label>
  1550. </div>
  1551. </div>
  1552. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px; margin-bottom: 10px;">Enable this option to allow DHCP server to find out if an IP address is already in use to prevent IP address conflict when some of the devices on the network have manually configured IP addresses.</div>
  1553. </div>
  1554. <div class="form-group">
  1555. <label for="txtDhcpScopePingCheckTimeout" class="col-sm-3 control-label">Ping Check Timeout</label>
  1556. <div class="col-sm-4">
  1557. <input type="number" class="form-control" style="width: 100px; display: inline;" id="txtDhcpScopePingCheckTimeout" placeholder="timeout">
  1558. <span>milliseconds (default 1000)</span>
  1559. </div>
  1560. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The timeout interval to wait for an ping reply.</div>
  1561. </div>
  1562. <div class="form-group">
  1563. <label for="txtDhcpScopePingCheckRetries" class="col-sm-3 control-label">Ping Check Retries</label>
  1564. <div class="col-sm-3">
  1565. <input type="number" class="form-control" style="width: 100px; display: inline;" id="txtDhcpScopePingCheckRetries" placeholder="retry">
  1566. <span>(default 2)</span>
  1567. </div>
  1568. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The maximum number of ping requests to try.</div>
  1569. </div>
  1570. <div style="padding-top: 5px;">Warning! Ping check would work as expected only when you make sure that all the client devices with manually configured IP addresses on the network respond to a ping request. Devices running Microsoft Windows by default drop ping requests at host firewall and will cause this ping check to fail to detect in use IP addresses. It is recommended to not rely on this option and instead make sure that you exclude a range of addresses using Exclusions and manually assign IP addresses to your devices only in the excluded range.</div>
  1571. </div>
  1572. <div class="well well-sm form-horizontal">
  1573. <div class="form-group">
  1574. <label for="txtDhcpScopeDomainName" class="col-sm-3 control-label">Domain Name</label>
  1575. <div class="col-sm-6">
  1576. <input type="text" class="form-control" id="txtDhcpScopeDomainName" placeholder="Domain Name">
  1577. </div>
  1578. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The domain name for this network to allow updating DNS forward and reverse records for all clients. Use a domain name that you own or that is not in common use like 'local' so that you don't block out an existing domain name.</div>
  1579. </div>
  1580. <div class="form-group">
  1581. <label for="txtDhcpScopeDnsTtl" class="col-sm-3 control-label">DNS TTL</label>
  1582. <div class="col-sm-3">
  1583. <input type="number" class="form-control" style="width: 100px; display: inline;" id="txtDhcpScopeDnsTtl" placeholder="DNS TTL">
  1584. <span>seconds (default 900)</span>
  1585. </div>
  1586. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The TTL value of the DNS records updated for the above provided domain name.</div>
  1587. </div>
  1588. </div>
  1589. <div class="well well-sm form-horizontal">
  1590. <div class="form-group">
  1591. <label for="txtDhcpScopeRouterAddress" class="col-sm-3 control-label">Router Address</label>
  1592. <div class="col-sm-3">
  1593. <input type="text" class="form-control" id="txtDhcpScopeRouterAddress" placeholder="Router Address">
  1594. </div>
  1595. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The default gateway IP address to be used by the clients.</div>
  1596. </div>
  1597. <div class="form-group">
  1598. <label for="txtDhcpScopeDnsServers" class="col-sm-3 control-label">DNS Servers</label>
  1599. <div class="col-sm-6">
  1600. <div class="checkbox">
  1601. <label>
  1602. <input id="chkUseThisDnsServer" type="checkbox" onclick="$('#txtDhcpScopeDnsServers').prop('disabled', $(this).prop('checked'));"> Use This DNS Server
  1603. </label>
  1604. </div>
  1605. </div>
  1606. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px; margin-bottom: 10px;">Enable this option to automatically use this DNS Server.</div>
  1607. <div class="col-sm-offset-3 col-sm-3">
  1608. <textarea id="txtDhcpScopeDnsServers" class="form-control" rows="2" spellcheck="false"></textarea>
  1609. </div>
  1610. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The DNS server IP addresses to be used by the clients.</div>
  1611. </div>
  1612. <div class="form-group">
  1613. <label for="txtDhcpScopeWinsServers" class="col-sm-3 control-label">WINS Servers</label>
  1614. <div class="col-sm-3">
  1615. <textarea id="txtDhcpScopeWinsServers" class="form-control" rows="2" spellcheck="false"></textarea>
  1616. </div>
  1617. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The NBNS/WINS server IP addresses to be used by the clients.</div>
  1618. </div>
  1619. <div class="form-group">
  1620. <label for="txtDhcpScopeNtpServers" class="col-sm-3 control-label">NTP Servers</label>
  1621. <div class="col-sm-3">
  1622. <textarea id="txtDhcpScopeNtpServers" class="form-control" rows="2" spellcheck="false"></textarea>
  1623. </div>
  1624. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The Network Time Protocol (NTP) server IP addresses to be used by the clients.</div>
  1625. </div>
  1626. </div>
  1627. <div class="well well-sm form-horizontal">
  1628. <div class="form-group" style="margin-bottom: 0px;">
  1629. <label for="tableDhcpScopeStaticRoutes" class="col-sm-3 control-label">Static Routes</label>
  1630. <div class="col-sm-7">
  1631. <table class="table table-hover" style="margin-bottom: 0px;">
  1632. <thead>
  1633. <tr>
  1634. <th>Destination</th>
  1635. <th>Subnet Mask</th>
  1636. <th>Router</th>
  1637. <th><button type="button" class="btn btn-default" style="padding: 0px 20px;" onclick="addDhcpScopeStaticRouteRow('', '', '');">Add</button></th>
  1638. </tr>
  1639. </thead>
  1640. <tbody id="tableDhcpScopeStaticRoutes"></tbody>
  1641. </table>
  1642. </div>
  1643. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The static routes to be used by the clients for accessing specified destination networks.</div>
  1644. </div>
  1645. </div>
  1646. <div class="well well-sm form-horizontal">
  1647. <div class="form-group">
  1648. <label for="txtDhcpScopeServerAddress" class="col-sm-3 control-label">Bootstrap Server Address</label>
  1649. <div class="col-sm-3">
  1650. <input type="text" class="form-control" id="txtDhcpScopeServerAddress" placeholder="Bootstrap Server Address">
  1651. </div>
  1652. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The bootstrap TFTP server IP address to be used by the clients. If not specified, the DHCP server's IP address is used.</div>
  1653. </div>
  1654. <div class="form-group">
  1655. <label for="txtDhcpScopeServerHostName" class="col-sm-3 control-label">Bootstrap Server Host Name</label>
  1656. <div class="col-sm-3">
  1657. <input type="text" class="form-control" id="txtDhcpScopeServerHostName" placeholder="Bootstrap Server Host Name">
  1658. </div>
  1659. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The optional bootstrap TFTP server host name to be used by the clients to identify the TFTP server.</div>
  1660. </div>
  1661. <div class="form-group">
  1662. <label for="txtDhcpScopeBootFileName" class="col-sm-3 control-label">Boot File Name</label>
  1663. <div class="col-sm-3">
  1664. <input type="text" class="form-control" id="txtDhcpScopeBootFileName" placeholder="Bootstrap File Name">
  1665. </div>
  1666. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The boot file name stored on the bootstrap TFTP server to be used by the clients.</div>
  1667. </div>
  1668. </div>
  1669. <div class="well well-sm form-horizontal">
  1670. <div class="form-group" style="margin-bottom: 0px;">
  1671. <label for="tableDhcpScopeVendorInfo" class="col-sm-3 control-label">Vendor Specific Information</label>
  1672. <div class="col-sm-9">
  1673. <table class="table table-hover" style="margin-bottom: 0px;">
  1674. <thead>
  1675. <tr>
  1676. <th>Vendor Class Identifier</th>
  1677. <th>Vendor Specific Information</th>
  1678. <th><button type="button" class="btn btn-default" style="padding: 0px 20px;" onclick="addDhcpScopeVendorInfoRow('', '');">Add</button></th>
  1679. </tr>
  1680. </thead>
  1681. <tbody id="tableDhcpScopeVendorInfo"></tbody>
  1682. </table>
  1683. </div>
  1684. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The vendor specific information option (43) to be sent to the clients that match the vendor class identifier option (60) in the request. The vendor class identifier can be empty string to match any identifier, or matched exactly, or match a substring, for example <code>substring(vendor-class-identifier,0,9)=="PXEClient"</code>. The vendor specific information must be a colon (:) separated hex string, for example <code>06:01:03:0A:04:00:50:58:45:09:14:00:00:11:52:61:73:70:62:65:72:72:79:20:50:69:20:42:6F:6F:74:FF</code>.</div>
  1685. </div>
  1686. </div>
  1687. <div class="well well-sm form-horizontal">
  1688. <div class="form-group">
  1689. <label for="tableDhcpScopeExclusions" class="col-sm-3 control-label">Exclusions</label>
  1690. <div class="col-sm-6">
  1691. <table class="table table-hover" style="margin-bottom: 0px;">
  1692. <thead>
  1693. <tr>
  1694. <th>Starting Address</th>
  1695. <th>Ending Address</th>
  1696. <th><button type="button" class="btn btn-default" style="padding: 0px 20px;" onclick="addDhcpScopeExclusionRow('', '');">Add</button></th>
  1697. </tr>
  1698. </thead>
  1699. <tbody id="tableDhcpScopeExclusions"></tbody>
  1700. </table>
  1701. </div>
  1702. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The IP address range that must be excluded or not assigned dynamically to any client by the DHCP server.</div>
  1703. </div>
  1704. <div style="padding-top: 5px;">Note! Make sure to exclude address ranges if you plan to manually assign IP addresses to some of the devices or to assign reserved leases so that these IP addresses are not dynamically allocated in the first place.</div>
  1705. </div>
  1706. <div class="well well-sm form-horizontal">
  1707. <div class="form-group" style="margin-bottom: 0px;">
  1708. <label for="tableDhcpScopeReservedLeases" class="col-sm-3 control-label">Reserved Leases</label>
  1709. <div class="col-sm-6">
  1710. <div class="checkbox">
  1711. <label>
  1712. <input id="chkAllowOnlyReservedLeases" type="checkbox"> Allow Only Reserved Lease Allocations
  1713. </label>
  1714. </div>
  1715. </div>
  1716. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">Enable this option to stop dynamic IP address allocation and allocate only reserved IP addresses.</div>
  1717. <div class="col-sm-offset-3 col-sm-9">
  1718. <table class="table table-hover" style="margin-bottom: 0px;">
  1719. <thead>
  1720. <tr>
  1721. <th>Host Name</th>
  1722. <th>MAC Address</th>
  1723. <th>IP Address</th>
  1724. <th>Comments</th>
  1725. <th><button type="button" class="btn btn-default" style="padding: 0px 20px;" onclick="addDhcpScopeReservedLeaseRow('', '', '', '');">Add</button></th>
  1726. </tr>
  1727. </thead>
  1728. <tbody id="tableDhcpScopeReservedLeases"></tbody>
  1729. </table>
  1730. </div>
  1731. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The reserved IP addresses to be assigned to specific clients based on their MAC address. Set a hostname to override the client's hostname.</div>
  1732. </div>
  1733. </div>
  1734. <div class="form-group" style="margin-bottom: 0px;">
  1735. <button type="submit" class="btn btn-primary" style="width: 100px;" id="btnSaveDhcpScope" data-loading-text="Saving..." onclick="saveDhcpScope(); return false;">Save</button>
  1736. <button type="button" class="btn btn-default" style="width: 100px;" onclick="refreshDhcpScopes();">Cancel</button>
  1737. </div>
  1738. </form>
  1739. </div>
  1740. </div>
  1741. </div>
  1742. </div>
  1743. <div id="mainPanelTabPaneLogs" role="tabpanel" class="tab-pane" style="padding: 10px 0 0 0;">
  1744. <ul class="nav nav-tabs" role="tablist">
  1745. <li id="logsTabListLogViewer" role="presentation" class="active"><a href="#logsTabPaneLogViewer" aria-controls="logsTabPaneLogViewer" role="tab" data-toggle="tab" onclick="refreshLogFilesList();">View Logs</a></li>
  1746. <li id="logsTabListQueryLogs" role="presentation"><a href="#logsTabPaneQueryLogs" aria-controls="logsTabPaneQueryLogs" role="tab" data-toggle="tab" onclick="refreshQueryLogsTab();">Query Logs</a></li>
  1747. </ul>
  1748. <div class="tab-content">
  1749. <div id="logsTabPaneLogViewer" class="tab-pane active" style="padding-top: 15px;">
  1750. <div class="well well-sm log-list-pane">
  1751. <div id="lstLogFiles" class="logs">
  1752. </div>
  1753. </div>
  1754. <div id="divLogViewer" class="log-viewer-pane">
  1755. <div class="panel panel-default">
  1756. <div class="panel-heading" style="height: 36px; padding: 4px 6px;">
  1757. <div id="txtLogViewerTitle" style="float: left; padding: 4px;">20171012</div>
  1758. <div style="float: right;">
  1759. <button type="button" class="btn btn-default" data-loading-text="Download" onclick="downloadLog();" style="font-size: 12px; padding: 4px 6px;">Download</button>
  1760. <button id="btnDeleteLog" type="button" class="btn btn-danger" data-loading-text="Delete" onclick="deleteLog();" style="font-size: 12px; padding: 4px 6px;">Delete</button>
  1761. </div>
  1762. </div>
  1763. <div class="panel-body">
  1764. <div id="divLogViewerLoader" style="margin-top: 20px; height: 400px;"></div>
  1765. <pre id="preLogViewerBody" style="display: none; word-wrap: normal; word-break: normal;"></pre>
  1766. </div>
  1767. </div>
  1768. </div>
  1769. </div>
  1770. <div id="logsTabPaneQueryLogs" class="tab-pane active" style="padding-top: 15px;">
  1771. <form id="frmQueryLogs" class="form-inline well" style="padding-bottom: 6px;">
  1772. <div class="form-group">
  1773. <label for="optQueryLogsAppName">App Name</label>
  1774. <select class="form-control" id="optQueryLogsAppName">
  1775. </select>
  1776. </div>
  1777. <div class="form-group">
  1778. <label for="optQueryLogsClassPath">Class Path</label>
  1779. <select class="form-control" id="optQueryLogsClassPath">
  1780. </select>
  1781. </div>
  1782. <div class="form-group">
  1783. <label for="txtQueryLogPageNumber">Page Number</label>
  1784. <input id="txtQueryLogPageNumber" type="number" class="form-control" style="width: 120px;" value="1" />
  1785. </div>
  1786. <div class="form-group">
  1787. <label for="optQueryLogsEntriesPerPage">Logs Per Page</label>
  1788. <select class="form-control" id="optQueryLogsEntriesPerPage">
  1789. <option>10</option>
  1790. <option>25</option>
  1791. <option>50</option>
  1792. <option>100</option>
  1793. <option>250</option>
  1794. <option>500</option>
  1795. </select>
  1796. </div>
  1797. <div class="form-group">
  1798. <label for="optQueryLogsDescendingOrder">Order</label>
  1799. <select class="form-control" id="optQueryLogsDescendingOrder">
  1800. <option value="false">Ascending</option>
  1801. <option value="true" selected>Descending</option>
  1802. </select>
  1803. </div>
  1804. <div class="form-group">
  1805. <label for="txtQueryLogStart">From</label>
  1806. <div class='input-group date' id='dtpQueryLogStart'>
  1807. <input id="txtQueryLogStart" type='text' class="form-control" />
  1808. <span class="input-group-addon">
  1809. <span class="glyphicon glyphicon-calendar"></span>
  1810. </span>
  1811. </div>
  1812. </div>
  1813. <div class="form-group">
  1814. <label for="txtQueryLogEnd">To</label>
  1815. <div class='input-group date' id='dtpQueryLogEnd'>
  1816. <input id="txtQueryLogEnd" type='text' class="form-control" />
  1817. <span class="input-group-addon">
  1818. <span class="glyphicon glyphicon-calendar"></span>
  1819. </span>
  1820. </div>
  1821. </div>
  1822. <div class="form-group">
  1823. <label for="txtQueryLogClientIpAddress">Client IP Address</label>
  1824. <input id="txtQueryLogClientIpAddress" type='text' class="form-control" style="min-width: 170px;" />
  1825. </div>
  1826. <div class="form-group">
  1827. <label for="optQueryLogsProtocol">Protocol</label>
  1828. <select class="form-control" id="optQueryLogsProtocol">
  1829. <option selected></option>
  1830. <option value="Udp">UDP</option>
  1831. <option value="Tcp">TCP</option>
  1832. <option value="Tls">TLS</option>
  1833. <option value="Https">HTTPS</option>
  1834. <option value="HttpsJson">HTTPS (JSON)</option>
  1835. </select>
  1836. </div>
  1837. <div class="form-group">
  1838. <label for="optQueryLogsResponseType">Response Type</label>
  1839. <select class="form-control" id="optQueryLogsResponseType">
  1840. <option selected></option>
  1841. <option>Authoritative</option>
  1842. <option>Recursive</option>
  1843. <option>Cached</option>
  1844. <option>Blocked</option>
  1845. </select>
  1846. </div>
  1847. <div class="form-group">
  1848. <label for="optQueryLogsResponseCode">RCODE</label>
  1849. <select class="form-control" id="optQueryLogsResponseCode">
  1850. <option selected></option>
  1851. <option value="NoError">No Error</option>
  1852. <option value="FormatError">Format Error</option>
  1853. <option value="ServerFailure">Server Failure</option>
  1854. <option value="NxDomain">NX Domain</option>
  1855. <option value="NotImplemented">Not Implemented</option>
  1856. <option value="Refused">Refused</option>
  1857. <option value="YXDomain">YX Domain</option>
  1858. <option value="NotAuthorized">Not Authorized</option>
  1859. </select>
  1860. </div>
  1861. <div class="form-group">
  1862. <label for="txtQueryLogQName">Domain</label>
  1863. <input id="txtQueryLogQName" type='text' class="form-control" style="min-width: 300px;" />
  1864. </div>
  1865. <div class="form-group">
  1866. <label for="txtQueryLogQType">Type</label>
  1867. <input id="txtQueryLogQType" type='text' class="form-control" />
  1868. </div>
  1869. <div class="form-group">
  1870. <label for="optQueryLogQClass">Class</label>
  1871. <select class="form-control" id="optQueryLogQClass">
  1872. <option selected></option>
  1873. <option>IN</option>
  1874. <option>CS</option>
  1875. <option>CH</option>
  1876. <option>HS</option>
  1877. <option>NONE</option>
  1878. <option>ANY</option>
  1879. </select>
  1880. </div>
  1881. <div class="form-group" style="display: block;">
  1882. <button type="submit" class="btn btn-primary" id="btnQueryLogs" data-loading-text="Querying..." onclick="queryLogs(); return false;" style="margin-right: 6px;">Query</button>
  1883. <button type="reset" class="btn btn-default">Reset</button>
  1884. </div>
  1885. </form>
  1886. <div id="divQueryLogsLoader" style="margin-top: 20px; height: 300px;"></div>
  1887. <div id="divQueryLogsTable">
  1888. <div>
  1889. <div class="pull-left" style="padding: 8px;">
  1890. <b id="tableQueryLogsTopStatus">Found: 0 logs</b>
  1891. </div>
  1892. <div class="pull-right">
  1893. <nav aria-label="Page navigation">
  1894. <ul id="tableQueryLogsTopPagination" class="pagination" style="margin: 0;">
  1895. <li><a href="#" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li>
  1896. <li><a href="#">1</a></li>
  1897. <li><a href="#" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li>
  1898. </ul>
  1899. </nav>
  1900. </div>
  1901. <div class="clearfix"></div>
  1902. </div>
  1903. <table class="table table-hover">
  1904. <thead>
  1905. <tr>
  1906. <th>#</th>
  1907. <th style="width: 95px;">Timestamp</th>
  1908. <th>Client IP Address</th>
  1909. <th>Protocol</th>
  1910. <th>Response Type</th>
  1911. <th>RCODE</th>
  1912. <th style="min-width: 200px;">Domain</th>
  1913. <th>Type</th>
  1914. <th>Class</th>
  1915. <th>Answer</th>
  1916. </tr>
  1917. </thead>
  1918. <tbody id="tableQueryLogsBody">
  1919. </tbody>
  1920. <tfoot>
  1921. <tr>
  1922. <td colspan="10">
  1923. <div>
  1924. <div class="pull-left">
  1925. <b id="tableQueryLogsFooterStatus">Found: 0 logs</b>
  1926. </div>
  1927. <div class="pull-right">
  1928. <nav aria-label="Page navigation">
  1929. <ul id="tableQueryLogsFooterPagination" class="pagination" style="margin: 0;">
  1930. <li><a href="#" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li>
  1931. <li><a href="#">1</a></li>
  1932. <li><a href="#" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li>
  1933. </ul>
  1934. </nav>
  1935. </div>
  1936. <div class="clearfix"></div>
  1937. </div>
  1938. </td>
  1939. </tr>
  1940. </tfoot>
  1941. </table>
  1942. </div>
  1943. </div>
  1944. </div>
  1945. </div>
  1946. <div id="mainPanelTabPaneAbout" role="tabpanel" class="tab-pane" style="padding: 40px 0 20px 0;">
  1947. <div class="about" style="text-align: center;">
  1948. <img src="/img/logo.png" alt="Technitium Logo" />
  1949. <h1>Technitium DNS Server</h1>
  1950. <p>Version <span id="lblAboutVersion"></span></p>
  1951. <p style="max-width: 800px; margin: 0 auto 10px auto;">
  1952. Copyright (C) 2022 Shreyas Zare (shreyas@technitium.com)<br />
  1953. This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions.<br />
  1954. </p>
  1955. <p>Source code available under <a href="https://go.technitium.com/?id=24" target="_blank">GNU General Public License v3.0</a> on <a href="https://github.com/TechnitiumSoftware/DnsServer" target="_blank"><i class="fa fa-github"></i>&nbsp;GitHub</a></p>
  1956. <h3 style="margin-top: 40px;"><a style="color: rgb(51,51,51) !important;" href="https://go.technitium.com/?id=23" target="_blank">What's New?</a></h3>
  1957. <p>Read the <a href="https://go.technitium.com/?id=23" target="_blank">change log</a> to know whats new in this release.</p>
  1958. <h3 style="margin-top: 40px;"><a style="color: rgb(51,51,51) !important;" href="https://github.com/TechnitiumSoftware/DnsServer/blob/master/APIDOCS.md" target="_blank">API Documentation</a></h3>
  1959. <p>The DNS server HTTP API allows any 3rd party app or script to configure the DNS server. The HTTP API is used by this web console and thus all the actions that this web console does can be performed via the API. Read the <a href="https://github.com/TechnitiumSoftware/DnsServer/blob/master/APIDOCS.md" target="_blank">HTTP API documentation</a> for complete details.</p>
  1960. <h3 style="margin-top: 40px;"><a style="color: rgb(51,51,51) !important;" href="https://go.technitium.com/?id=25" target="_blank">Help Topics</a></h3>
  1961. <p>Read the latest <a href="https://go.technitium.com/?id=25" target="_blank">online help topics</a> which contains the DNS Server user manual and covers frequently asked questions.</p>
  1962. <h3 style="margin-top: 40px;">Support</h3>
  1963. <p>For support, send an email to <a href="mailto:support@technitium.com" target="_blank">support@technitium.com</a>.</p>
  1964. <p>
  1965. Follow <a href="https://twitter.com/Technitium" target="_blank">@technitium</a> on Twitter.<br />
  1966. Checkout <a href="https://blog.technitium.com/" target="_blank">Technitium Blog</a>.
  1967. </p>
  1968. <p>
  1969. Join <a href="https://www.reddit.com/r/technitium/" target="_blank">/r/technitium</a> on Reddit.
  1970. </p>
  1971. <h3 style="margin-top: 40px;"><a style="color: rgb(51,51,51) !important;" href="https://go.technitium.com/?id=35" target="_blank">Donate</a></h3>
  1972. <p>Make a contribution to Technitium by becoming a Patron and help making new software, updates, and features possible.</p>
  1973. <p>
  1974. <a href="https://go.technitium.com/?id=35" target="_blank">Become A Patron Now!</a>
  1975. </p>
  1976. </div>
  1977. </div>
  1978. </div>
  1979. </div>
  1980. </div>
  1981. </div>
  1982. </div>
  1983. </div>
  1984. </div>
  1985. <div id="modalChangePassword" class="modal fade" tabindex="-1" role="dialog">
  1986. <form class="form-horizontal">
  1987. <div class="modal-dialog" role="document">
  1988. <div class="modal-content">
  1989. <div class="modal-header">
  1990. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  1991. <h4 class="modal-title">Change Password</h4>
  1992. </div>
  1993. <div class="modal-body">
  1994. <div id="divChangePasswordAlert"></div>
  1995. <div class="form-group">
  1996. <label for="txtChangePasswordUsername" class="col-sm-4 control-label">Username</label>
  1997. <div class="col-sm-7">
  1998. <input id="txtChangePasswordUsername" type="text" class="form-control" placeholder="username" disabled>
  1999. </div>
  2000. </div>
  2001. <div class="form-group">
  2002. <label for="txtChangePasswordNewPassword" class="col-sm-4 control-label">New Password</label>
  2003. <div class="col-sm-7">
  2004. <input id="txtChangePasswordNewPassword" type="password" class="form-control" placeholder="new password">
  2005. </div>
  2006. </div>
  2007. <div class="form-group">
  2008. <label for="txtChangePasswordConfirmPassword" class="col-sm-4 control-label">Confirm Password</label>
  2009. <div class="col-sm-7">
  2010. <input id="txtChangePasswordConfirmPassword" type="password" class="form-control" placeholder="confirm password">
  2011. </div>
  2012. </div>
  2013. </div>
  2014. <div class="modal-footer">
  2015. <button id="btnChangePasswordSave" type="submit" class="btn btn-primary" data-loading-text="Saving..." onclick="changePassword(); return false;">Save</button>
  2016. <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
  2017. </div>
  2018. </div>
  2019. </div>
  2020. </form>
  2021. </div>
  2022. <div id="modalForgotPassword" class="modal fade" tabindex="-1" role="dialog">
  2023. <div class="modal-dialog" role="document">
  2024. <div class="modal-content">
  2025. <div class="modal-header">
  2026. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  2027. <h4 class="modal-title">Forgot Password?</h4>
  2028. </div>
  2029. <div class="modal-body">
  2030. <p>Follow these steps to reset 'admin' password:</p>
  2031. <ol>
  2032. <li>Find the DNS Server config folder and locate the <b>dns.config</b> file. The config folder will be found where the DNS Server is installed.</li>
  2033. <li>Rename the <b>dns.config</b> file as <b>reset.config</b></li>
  2034. <li>Restart the DNS Server to complete the password reset process.</li>
  2035. <li>Just refresh this web page in the web browser to auto login with default credentials and quickly change the password.</li>
  2036. </ol>
  2037. <p>Note: To reset 'admin' password, you will need file system access on the server running this DNS Server. </p>
  2038. </div>
  2039. <div class="modal-footer">
  2040. <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
  2041. </div>
  2042. </div>
  2043. </div>
  2044. </div>
  2045. <div id="modalUpdateAvailable" class="modal fade" tabindex="-1" role="dialog">
  2046. <div class="modal-dialog" role="document">
  2047. <div class="modal-content">
  2048. <div class="modal-header">
  2049. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  2050. <h4 class="modal-title" id="lblUpdateAvailableTitle">New Update Available</h4>
  2051. </div>
  2052. <div class="modal-body">
  2053. <div style="margin-bottom: 20px;">
  2054. <div id="lblUpdateMessage" style="margin-bottom: 10px;"></div>
  2055. <a id="lnkUpdateDownload" href="#" target="_blank" style="font-weight: bold; font-size: 18px;">Download Now!</a>
  2056. <a id="lnkUpdateInstructions" href="#" target="_blank" style="font-weight: bold; font-size: 18px;">Update Instructions</a>
  2057. </div>
  2058. <div style="margin-bottom: 10px;">
  2059. <div style="font-weight: bold;">Update Version: <span id="lblUpdateVersion"></span></div>
  2060. <div>Current Version: <span id="lblCurrentVersion"></span></div>
  2061. </div>
  2062. <div style="margin-bottom: 10px;">
  2063. <a id="lnkUpdateChangeLog" href="#" target="_blank" style="font-weight: bold;">Read Change Logs</a>
  2064. </div>
  2065. <div>
  2066. Note! It is highly recommended to Backup Settings before installing the update.
  2067. </div>
  2068. </div>
  2069. <div class="modal-footer">
  2070. <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
  2071. </div>
  2072. </div>
  2073. </div>
  2074. </div>
  2075. <div id="modalAddZone" class="modal fade" tabindex="-1" role="dialog">
  2076. <form class="form-horizontal">
  2077. <div class="modal-dialog" role="document" style="width: 780px;">
  2078. <div class="modal-content">
  2079. <div class="modal-header">
  2080. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  2081. <h4 class="modal-title">Add Zone</h4>
  2082. </div>
  2083. <div class="modal-body">
  2084. <div id="divAddZoneAlert"></div>
  2085. <div style="max-height: 500px; overflow-y: auto; padding: 0 6px; overflow-x: hidden;">
  2086. <div class="form-group">
  2087. <label for="txtAddZone" class="col-sm-4 control-label">Zone</label>
  2088. <div class="col-sm-7">
  2089. <input id="txtAddZone" type="text" class="form-control" placeholder="example.com or 192.168.0.0/24 or 2001:db8::/64">
  2090. </div>
  2091. </div>
  2092. <div class="form-group">
  2093. <label class="col-sm-4 control-label">Type</label>
  2094. <div class="col-sm-7">
  2095. <div class="radio">
  2096. <label>
  2097. <input type="radio" name="rdAddZoneType" id="rdAddZoneTypePrimary" value="Primary" checked>
  2098. Primary Zone (default)
  2099. </label>
  2100. </div>
  2101. <div class="radio">
  2102. <label>
  2103. <input type="radio" name="rdAddZoneType" id="rdAddZoneTypeSecondary" value="Secondary">
  2104. Secondary Zone
  2105. </label>
  2106. </div>
  2107. <div class="radio">
  2108. <label>
  2109. <input type="radio" name="rdAddZoneType" id="rdAddZoneTypeStub" value="Stub">
  2110. Stub Zone
  2111. </label>
  2112. </div>
  2113. <div class="radio">
  2114. <label>
  2115. <input type="radio" name="rdAddZoneType" id="rdAddZoneTypeForwarder" value="Forwarder">
  2116. Conditional Forwarder Zone
  2117. </label>
  2118. </div>
  2119. </div>
  2120. </div>
  2121. <div class="form-group" id="divAddZonePrimaryNameServerAddresses">
  2122. <label for="txtAddZonePrimaryNameServerAddresses" class="col-sm-4 control-label">Primary Name Server Addresses (Optional)</label>
  2123. <div class="col-sm-7">
  2124. <textarea id="txtAddZonePrimaryNameServerAddresses" class="form-control" rows="3" spellcheck="false" placeholder="192.168.1.1
  2125. 2001:db8::
  2126. ns1.example.com (192.168.1.1)
  2127. ns1.example.com ([2001:db8::])
  2128. "></textarea>
  2129. </div>
  2130. </div>
  2131. <div class="form-group" id="divAddZoneZoneTransferProtocol">
  2132. <label class="col-sm-4 control-label">Zone Transfer Protocol</label>
  2133. <div class="col-sm-7">
  2134. <div class="radio">
  2135. <label>
  2136. <input type="radio" name="rdAddZoneZoneTransferProtocol" id="rdAddZoneZoneTransferProtocolTcp" value="Tcp" checked>
  2137. XFR-over-TCP (default)
  2138. </label>
  2139. </div>
  2140. <div class="radio">
  2141. <label>
  2142. <input type="radio" name="rdAddZoneZoneTransferProtocol" value="Tls">
  2143. XFR-over-TLS
  2144. </label>
  2145. </div>
  2146. </div>
  2147. </div>
  2148. <div class="form-group" id="divAddZoneTsigKeyName">
  2149. <label for="optAddZoneTsigKeyName" class="col-sm-4 control-label">TSIG Key Name (Optional)</label>
  2150. <div class="col-sm-7">
  2151. <select id="optAddZoneTsigKeyName" class="form-control"></select>
  2152. </div>
  2153. </div>
  2154. <div class="form-group" id="divAddZoneForwarderProtocol">
  2155. <label class="col-sm-4 control-label">Protocol</label>
  2156. <div class="col-sm-7">
  2157. <div class="radio">
  2158. <label>
  2159. <input type="radio" name="rdAddZoneForwarderProtocol" id="rdAddZoneForwarderProtocolUdp" value="Udp" checked>
  2160. DNS-over-UDP (default)
  2161. </label>
  2162. </div>
  2163. <div class="radio">
  2164. <label>
  2165. <input type="radio" name="rdAddZoneForwarderProtocol" value="Tcp">
  2166. DNS-over-TCP
  2167. </label>
  2168. </div>
  2169. <div class="radio">
  2170. <label>
  2171. <input type="radio" name="rdAddZoneForwarderProtocol" value="Tls">
  2172. DNS-over-TLS
  2173. </label>
  2174. </div>
  2175. <div class="radio">
  2176. <label>
  2177. <input type="radio" name="rdAddZoneForwarderProtocol" value="Https">
  2178. DNS-over-HTTPS
  2179. </label>
  2180. </div>
  2181. <div class="radio">
  2182. <label>
  2183. <input type="radio" name="rdAddZoneForwarderProtocol" value="HttpsJson">
  2184. DNS-over-HTTPS (JSON)
  2185. </label>
  2186. </div>
  2187. </div>
  2188. </div>
  2189. <div class="form-group" id="divAddZoneForwarder">
  2190. <label for="txtAddZoneForwarder" class="col-sm-4 control-label">Forwarder</label>
  2191. <div class="col-sm-7">
  2192. <div class="checkbox">
  2193. <label>
  2194. <input id="chkAddZoneForwarderThisServer" type="checkbox" onclick="updateAddZoneFormForwarderThisServer();"> Use "This Server"
  2195. </label>
  2196. </div>
  2197. <div style="padding-top: 5px; padding-left: 20px; padding-bottom: 10px;">
  2198. When using "This Server", if a record does not exists in the zone then the request is forwarded to the DNS server's resolver internally. This allows you to override any record for the forwarded domain name or control its DNSSEC validation.
  2199. </div>
  2200. <input id="txtAddZoneForwarder" type="text" class="form-control" placeholder="8.8.8.8">
  2201. </div>
  2202. </div>
  2203. <div class="form-group" id="divAddZoneForwarderDnssecValidation">
  2204. <label class="col-sm-4 control-label">DNSSEC</label>
  2205. <div class="col-sm-7">
  2206. <div class="checkbox" style="margin-bottom: 6px;">
  2207. <label>
  2208. <input id="chkAddZoneForwarderDnssecValidation" type="checkbox"> Enable DNSSEC Validation
  2209. </label>
  2210. </div>
  2211. </div>
  2212. </div>
  2213. <div id="divAddZoneForwarderProxy">
  2214. <div class="form-group">
  2215. <label class="col-sm-4 control-label">Network Proxy</label>
  2216. <div class="col-sm-7">
  2217. <div class="radio">
  2218. <label>
  2219. <input type="radio" name="rdAddZoneForwarderProxyType" id="rdAddZoneForwarderProxyTypeNone" value="None" checked>
  2220. No Proxy (default)
  2221. </label>
  2222. </div>
  2223. <div class="radio">
  2224. <label>
  2225. <input type="radio" name="rdAddZoneForwarderProxyType" value="Http">
  2226. HTTP Proxy
  2227. </label>
  2228. </div>
  2229. <div class="radio">
  2230. <label>
  2231. <input type="radio" name="rdAddZoneForwarderProxyType" value="Socks5">
  2232. SOCKS5 Proxy
  2233. </label>
  2234. </div>
  2235. </div>
  2236. </div>
  2237. <div class="form-group">
  2238. <label for="txtAddZoneForwarderProxyAddress" class="col-sm-4 control-label">Proxy Server Address</label>
  2239. <div class="col-sm-7">
  2240. <input id="txtAddZoneForwarderProxyAddress" type="text" class="form-control" placeholder="domain name or IP address">
  2241. </div>
  2242. </div>
  2243. <div class="form-group">
  2244. <label for="txtAddZoneForwarderProxyPort" class="col-sm-4 control-label">Proxy Server Port</label>
  2245. <div class="col-sm-7">
  2246. <input id="txtAddZoneForwarderProxyPort" type="number" class="form-control" placeholder="port" style="width: 100px;">
  2247. </div>
  2248. </div>
  2249. <div class="form-group">
  2250. <label for="txtAddZoneForwarderProxyUsername" class="col-sm-4 control-label">Proxy Server Username</label>
  2251. <div class="col-sm-7">
  2252. <input id="txtAddZoneForwarderProxyUsername" type="text" class="form-control" placeholder="username">
  2253. </div>
  2254. </div>
  2255. <div class="form-group">
  2256. <label for="txtAddZoneForwarderProxyPassword" class="col-sm-4 control-label">Proxy Server Password</label>
  2257. <div class="col-sm-7">
  2258. <input id="txtAddZoneForwarderProxyPassword" type="password" class="form-control" placeholder="password">
  2259. </div>
  2260. </div>
  2261. </div>
  2262. </div>
  2263. </div>
  2264. <div class="modal-footer">
  2265. <button id="btnAddZone" type="submit" class="btn btn-primary" data-loading-text="Adding..." onclick="addZone(); return false;">Add</button>
  2266. <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
  2267. </div>
  2268. </div>
  2269. </div>
  2270. </form>
  2271. </div>
  2272. <div id="modalAddEditRecord" class="modal fade" tabindex="-1" role="dialog">
  2273. <form class="form-horizontal">
  2274. <div class="modal-dialog" role="document" style="width: 780px;">
  2275. <div class="modal-content">
  2276. <div class="modal-header">
  2277. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  2278. <h4 id="titleAddEditRecord" class="modal-title">Add Edit Record</h4>
  2279. </div>
  2280. <div class="modal-body">
  2281. <div id="divAddEditRecordAlert"></div>
  2282. <div style="max-height: 500px; overflow-y: auto; padding: 0 15px; overflow-x: hidden;">
  2283. <div class="form-group">
  2284. <label for="txtAddEditRecordName" class="col-sm-4 control-label">Name</label>
  2285. <div class="col-sm-7">
  2286. <input id="txtAddEditRecordName" type="text" class="form-control" placeholder="@">
  2287. <div style="margin-top: 6px; font-weight: 700;">.<span id="lblAddEditRecordZoneName">example.com</span></div>
  2288. </div>
  2289. </div>
  2290. <div class="form-group">
  2291. <label for="optAddEditRecordType" class="col-sm-4 control-label">Type</label>
  2292. <div class="col-sm-7">
  2293. <select id="optAddEditRecordType" class="form-control" onchange="modifyAddRecordFormByType();" style="width: auto;">
  2294. <option>A</option>
  2295. <option>NS</option>
  2296. <option id="optEditRecordTypeSoa">SOA</option>
  2297. <option>CNAME</option>
  2298. <option>PTR</option>
  2299. <option>MX</option>
  2300. <option>TXT</option>
  2301. <option>AAAA</option>
  2302. <option>SRV</option>
  2303. <option>DNAME</option>
  2304. <option id="optAddEditRecordTypeDs">DS</option>
  2305. <option>CAA</option>
  2306. <option id="optAddEditRecordTypeAName">ANAME</option>
  2307. <option id="optAddEditRecordTypeFwd">FWD</option>
  2308. <option id="optAddEditRecordTypeApp">APP</option>
  2309. </select>
  2310. </div>
  2311. </div>
  2312. <div class="form-group" id="divAddEditRecordTtl">
  2313. <label for="txtAddEditRecordTtl" class="col-sm-4 control-label">TTL</label>
  2314. <div class="col-sm-7">
  2315. <input id="txtAddEditRecordTtl" type="number" class="form-control" placeholder="3600" style="width: 100px;">
  2316. </div>
  2317. </div>
  2318. <div id="divAddEditRecordData">
  2319. <div class="form-group">
  2320. <label id="lblAddEditRecordDataValue" for="txtAddEditRecordDataValue" class="col-sm-4 control-label">Value</label>
  2321. <div class="col-sm-7">
  2322. <input id="txtAddEditRecordDataValue" type="text" class="form-control">
  2323. </div>
  2324. </div>
  2325. <div id="divAddEditRecordDataPtr" class="form-group">
  2326. <div class="col-sm-offset-4 col-sm-7">
  2327. <div class="checkbox">
  2328. <label>
  2329. <input id="chkAddEditRecordDataPtr" type="checkbox"> <span id="chkAddEditRecordDataPtrLabel">Add reverse (PTR) record</span>
  2330. </label>
  2331. </div>
  2332. <div class="checkbox">
  2333. <label>
  2334. <input id="chkAddEditRecordDataCreatePtrZone" type="checkbox"> Create reverse zone for PTR record
  2335. </label>
  2336. </div>
  2337. </div>
  2338. </div>
  2339. </div>
  2340. <div id="divAddEditRecordDataNs" style="display: none;">
  2341. <div class="form-group">
  2342. <label for="txtAddEditRecordDataNsNameServer" class="col-sm-4 control-label">Name Server</label>
  2343. <div class="col-sm-7">
  2344. <input id="txtAddEditRecordDataNsNameServer" type="text" class="form-control">
  2345. </div>
  2346. </div>
  2347. <div class="form-group">
  2348. <label for="txtAddEditRecordDataNsGlue" class="col-sm-4 control-label">Glue Addresses</label>
  2349. <div class="col-sm-7">
  2350. <textarea id="txtAddEditRecordDataNsGlue" class="form-control" rows="3" spellcheck="false" placeholder="192.168.1.1
  2351. 2001:db8::"></textarea>
  2352. </div>
  2353. </div>
  2354. </div>
  2355. <div id="divEditRecordDataSoa" style="display: none;">
  2356. <div class="form-group">
  2357. <label for="txtEditRecordDataSoaPrimaryNameServer" class="col-sm-4 control-label">Primary Name Server</label>
  2358. <div class="col-sm-7">
  2359. <input id="txtEditRecordDataSoaPrimaryNameServer" type="text" class="form-control">
  2360. </div>
  2361. </div>
  2362. <div class="form-group">
  2363. <label for="txtEditRecordDataSoaResponsiblePerson" class="col-sm-4 control-label">Responsible Person</label>
  2364. <div class="col-sm-7">
  2365. <input id="txtEditRecordDataSoaResponsiblePerson" type="text" class="form-control">
  2366. </div>
  2367. </div>
  2368. <div class="form-group">
  2369. <label for="txtEditRecordDataSoaSerial" class="col-sm-4 control-label">Serial</label>
  2370. <div class="col-sm-7">
  2371. <input id="txtEditRecordDataSoaSerial" type="number" class="form-control" style="width: 150px;">
  2372. </div>
  2373. </div>
  2374. <div class="form-group">
  2375. <label for="txtEditRecordDataSoaRefresh" class="col-sm-4 control-label">Refresh</label>
  2376. <div class="col-sm-7">
  2377. <input id="txtEditRecordDataSoaRefresh" type="number" class="form-control" style="width: 100px;">
  2378. </div>
  2379. </div>
  2380. <div class="form-group">
  2381. <label for="txtEditRecordDataSoaRetry" class="col-sm-4 control-label">Retry</label>
  2382. <div class="col-sm-7">
  2383. <input id="txtEditRecordDataSoaRetry" type="number" class="form-control" style="width: 100px;">
  2384. </div>
  2385. </div>
  2386. <div class="form-group">
  2387. <label for="txtEditRecordDataSoaExpire" class="col-sm-4 control-label">Expire</label>
  2388. <div class="col-sm-7">
  2389. <input id="txtEditRecordDataSoaExpire" type="number" class="form-control" style="width: 100px;">
  2390. </div>
  2391. </div>
  2392. <div class="form-group">
  2393. <label for="txtEditRecordDataSoaMinimum" class="col-sm-4 control-label">Minimum</label>
  2394. <div class="col-sm-7">
  2395. <input id="txtEditRecordDataSoaMinimum" type="number" class="form-control" style="width: 100px;">
  2396. </div>
  2397. </div>
  2398. <div class="form-group" id="divEditRecordDataSoaPrimaryAddresses">
  2399. <label for="txtEditRecordDataSoaPrimaryAddresses" class="col-sm-4 control-label">Primary Name Server Addresses</label>
  2400. <div class="col-sm-7">
  2401. <textarea id="txtEditRecordDataSoaPrimaryAddresses" class="form-control" rows="3" spellcheck="false" placeholder="192.168.1.1
  2402. 2001:db8::
  2403. ns1.example.com (192.168.1.1)
  2404. ns1.example.com ([2001:db8::])
  2405. "></textarea>
  2406. </div>
  2407. </div>
  2408. <div class="form-group" id="divEditRecordDataSoaZoneTransferProtocol">
  2409. <label class="col-sm-4 control-label">Zone Transfer Protocol</label>
  2410. <div class="col-sm-7">
  2411. <div class="radio">
  2412. <label>
  2413. <input type="radio" name="rdEditRecordDataSoaZoneTransferProtocol" id="rdEditRecordDataSoaZoneTransferProtocolTcp" value="Tcp" checked>
  2414. XFR-over-TCP (default)
  2415. </label>
  2416. </div>
  2417. <div class="radio">
  2418. <label>
  2419. <input type="radio" name="rdEditRecordDataSoaZoneTransferProtocol" id="rdEditRecordDataSoaZoneTransferProtocolTls" value="Tls">
  2420. XFR-over-TLS
  2421. </label>
  2422. </div>
  2423. </div>
  2424. </div>
  2425. <div class="form-group" id="divEditRecordDataSoaTsigKeyName">
  2426. <label for="optEditRecordDataSoaTsigKeyName" class="col-sm-4 control-label">TSIG Key Name</label>
  2427. <div class="col-sm-7">
  2428. <select id="optEditRecordDataSoaTsigKeyName" class="form-control"></select>
  2429. </div>
  2430. </div>
  2431. </div>
  2432. <div id="divAddEditRecordDataMx" style="display: none;">
  2433. <div class="form-group">
  2434. <label for="txtAddEditRecordDataMxPreference" class="col-sm-4 control-label">Preference</label>
  2435. <div class="col-sm-7">
  2436. <input id="txtAddEditRecordDataMxPreference" type="number" class="form-control" placeholder="1" style="width: 100px;">
  2437. </div>
  2438. </div>
  2439. <div class="form-group">
  2440. <label for="txtAddEditRecordDataMxExchange" class="col-sm-4 control-label">Exchange</label>
  2441. <div class="col-sm-7">
  2442. <input id="txtAddEditRecordDataMxExchange" type="text" class="form-control">
  2443. </div>
  2444. </div>
  2445. </div>
  2446. <div id="divAddEditRecordDataSrv" style="display: none;">
  2447. <div class="form-group">
  2448. <label for="txtAddEditRecordDataSrvPriority" class="col-sm-4 control-label">Priority</label>
  2449. <div class="col-sm-7">
  2450. <input type="number" class="form-control" id="txtAddEditRecordDataSrvPriority" style="width: 100px;">
  2451. </div>
  2452. </div>
  2453. <div class="form-group">
  2454. <label for="txtAddEditRecordDataSrvWeight" class="col-sm-4 control-label">Weight</label>
  2455. <div class="col-sm-7">
  2456. <input type="number" class="form-control" id="txtAddEditRecordDataSrvWeight" style="width: 100px;">
  2457. </div>
  2458. </div>
  2459. <div class="form-group">
  2460. <label for="txtAddEditRecordDataSrvPort" class="col-sm-4 control-label">Port</label>
  2461. <div class="col-sm-7">
  2462. <input type="number" class="form-control" id="txtAddEditRecordDataSrvPort" style="width: 100px;">
  2463. </div>
  2464. </div>
  2465. <div class="form-group">
  2466. <label for="txtAddEditRecordDataSrvTarget" class="col-sm-4 control-label">Target</label>
  2467. <div class="col-sm-7">
  2468. <input type="text" class="form-control" id="txtAddEditRecordDataSrvTarget">
  2469. </div>
  2470. </div>
  2471. </div>
  2472. <div id="divAddEditRecordDataDs" style="display: none;">
  2473. <div class="form-group">
  2474. <label for="txtAddEditRecordDataDsKeyTag" class="col-sm-4 control-label">Key Tag</label>
  2475. <div class="col-sm-7">
  2476. <input type="number" class="form-control" id="txtAddEditRecordDataDsKeyTag" placeholder="key tag" style="width: 100px;">
  2477. </div>
  2478. </div>
  2479. <div class="form-group">
  2480. <label for="optAddEditRecordDataDsAlgorithm" class="col-sm-4 control-label">DNSSEC Algorithm</label>
  2481. <div class="col-sm-7">
  2482. <select id="optAddEditRecordDataDsAlgorithm" class="form-control">
  2483. <option>RSAMD5</option>
  2484. <option>RSASHA1</option>
  2485. <option>RSASHA256</option>
  2486. <option>RSASHA512</option>
  2487. <option>ECDSAP256SHA256</option>
  2488. <option>ECDSAP384SHA384</option>
  2489. <option>ED25519</option>
  2490. <option>ED448</option>
  2491. </select>
  2492. </div>
  2493. </div>
  2494. <div class="form-group">
  2495. <label for="optAddEditRecordDataDsDigestType" class="col-sm-4 control-label">Digest Type</label>
  2496. <div class="col-sm-7">
  2497. <select id="optAddEditRecordDataDsDigestType" class="form-control">
  2498. <option>SHA1</option>
  2499. <option>SHA256</option>
  2500. <option>SHA384</option>
  2501. </select>
  2502. </div>
  2503. </div>
  2504. <div class="form-group">
  2505. <label for="txtAddEditRecordDataDsDigest" class="col-sm-4 control-label">Digest</label>
  2506. <div class="col-sm-7">
  2507. <input type="text" class="form-control" id="txtAddEditRecordDataDsDigest" placeholder="hash string">
  2508. </div>
  2509. </div>
  2510. </div>
  2511. <div id="divAddEditRecordDataCaa" style="display: none;">
  2512. <div class="form-group">
  2513. <label for="txtAddEditRecordDataCaaFlags" class="col-sm-4 control-label">Flags</label>
  2514. <div class="col-sm-7">
  2515. <input type="number" class="form-control" id="txtAddEditRecordDataCaaFlags" placeholder="0" style="width: 100px;">
  2516. </div>
  2517. </div>
  2518. <div class="form-group">
  2519. <label for="txtAddEditRecordDataCaaTag" class="col-sm-4 control-label">Tag</label>
  2520. <div class="col-sm-7">
  2521. <input type="text" class="form-control" id="txtAddEditRecordDataCaaTag" placeholder="issue" style="width: 150px;">
  2522. </div>
  2523. </div>
  2524. <div class="form-group">
  2525. <label for="txtAddEditRecordDataCaaValue" class="col-sm-4 control-label">Authority</label>
  2526. <div class="col-sm-7">
  2527. <input type="text" class="form-control" id="txtAddEditRecordDataCaaValue">
  2528. </div>
  2529. </div>
  2530. </div>
  2531. <div id="divAddEditRecordDataForwarder" style="display: none;">
  2532. <div class="form-group">
  2533. <label class="col-sm-4 control-label">Protocol</label>
  2534. <div class="col-sm-7">
  2535. <div class="radio">
  2536. <label>
  2537. <input type="radio" name="rdAddEditRecordDataForwarderProtocol" id="rdAddEditRecordDataForwarderProtocolUdp" value="Udp" checked>
  2538. DNS-over-UDP (default)
  2539. </label>
  2540. </div>
  2541. <div class="radio">
  2542. <label>
  2543. <input type="radio" name="rdAddEditRecordDataForwarderProtocol" id="rdAddEditRecordDataForwarderProtocolTcp" value="Tcp">
  2544. DNS-over-TCP
  2545. </label>
  2546. </div>
  2547. <div class="radio">
  2548. <label>
  2549. <input type="radio" name="rdAddEditRecordDataForwarderProtocol" id="rdAddEditRecordDataForwarderProtocolTls" value="Tls">
  2550. DNS-over-TLS
  2551. </label>
  2552. </div>
  2553. <div class="radio">
  2554. <label>
  2555. <input type="radio" name="rdAddEditRecordDataForwarderProtocol" id="rdAddEditRecordDataForwarderProtocolHttps" value="Https">
  2556. DNS-over-HTTPS
  2557. </label>
  2558. </div>
  2559. <div class="radio">
  2560. <label>
  2561. <input type="radio" name="rdAddEditRecordDataForwarderProtocol" id="rdAddEditRecordDataForwarderProtocolHttpsJson" value="HttpsJson">
  2562. DNS-over-HTTPS (JSON)
  2563. </label>
  2564. </div>
  2565. </div>
  2566. </div>
  2567. <div class="form-group">
  2568. <label for="txtAddEditRecordDataForwarder" class="col-sm-4 control-label">Forwarder</label>
  2569. <div class="col-sm-7">
  2570. <div class="checkbox">
  2571. <label>
  2572. <input id="chkAddEditRecordDataForwarderThisServer" type="checkbox" onclick="updateAddEditFormForwarderThisServer();"> Use "This Server"
  2573. </label>
  2574. </div>
  2575. <div style="padding-top: 5px; padding-left: 20px; padding-bottom: 10px;">
  2576. When using "This Server", if a record does not exists in the zone then the request is forwarded to the DNS server's resolver internally. This allows you to override any record for the forwarded domain name or control its DNSSEC validation.
  2577. </div>
  2578. <input id="txtAddEditRecordDataForwarder" type="text" class="form-control" placeholder="8.8.8.8">
  2579. </div>
  2580. </div>
  2581. <div class="form-group">
  2582. <label class="col-sm-4 control-label">DNSSEC</label>
  2583. <div class="col-sm-7">
  2584. <div class="checkbox" style="margin-bottom: 6px;">
  2585. <label>
  2586. <input id="chkAddEditRecordDataForwarderDnssecValidation" type="checkbox"> Enable DNSSEC Validation
  2587. </label>
  2588. </div>
  2589. </div>
  2590. </div>
  2591. <div id="divAddEditRecordDataForwarderProxy">
  2592. <div class="form-group">
  2593. <label class="col-sm-4 control-label">Network Proxy</label>
  2594. <div class="col-sm-7">
  2595. <div class="radio">
  2596. <label>
  2597. <input type="radio" name="rdAddEditRecordDataForwarderProxyType" id="rdAddEditRecordDataForwarderProxyTypeNone" value="None" checked>
  2598. No Proxy (default)
  2599. </label>
  2600. </div>
  2601. <div class="radio">
  2602. <label>
  2603. <input type="radio" name="rdAddEditRecordDataForwarderProxyType" id="rdAddEditRecordDataForwarderProxyTypeHttp" value="Http">
  2604. HTTP Proxy
  2605. </label>
  2606. </div>
  2607. <div class="radio">
  2608. <label>
  2609. <input type="radio" name="rdAddEditRecordDataForwarderProxyType" id="rdAddEditRecordDataForwarderProxyTypeSocks5" value="Socks5">
  2610. SOCKS5 Proxy
  2611. </label>
  2612. </div>
  2613. </div>
  2614. </div>
  2615. <div class="form-group">
  2616. <label for="txtAddEditRecordDataForwarderProxyAddress" class="col-sm-4 control-label">Proxy Server Address</label>
  2617. <div class="col-sm-7">
  2618. <input id="txtAddEditRecordDataForwarderProxyAddress" type="text" class="form-control" placeholder="domain name or IP address">
  2619. </div>
  2620. </div>
  2621. <div class="form-group">
  2622. <label for="txtAddEditRecordDataForwarderProxyPort" class="col-sm-4 control-label">Proxy Server Port</label>
  2623. <div class="col-sm-7">
  2624. <input id="txtAddEditRecordDataForwarderProxyPort" type="number" class="form-control" placeholder="port" style="width: 100px;">
  2625. </div>
  2626. </div>
  2627. <div class="form-group">
  2628. <label for="txtAddEditRecordDataForwarderProxyUsername" class="col-sm-4 control-label">Proxy Server Username</label>
  2629. <div class="col-sm-7">
  2630. <input id="txtAddEditRecordDataForwarderProxyUsername" type="text" class="form-control" placeholder="username">
  2631. </div>
  2632. </div>
  2633. <div class="form-group">
  2634. <label for="txtAddEditRecordDataForwarderProxyPassword" class="col-sm-4 control-label">Proxy Server Password</label>
  2635. <div class="col-sm-7">
  2636. <input id="txtAddEditRecordDataForwarderProxyPassword" type="password" class="form-control" placeholder="password">
  2637. </div>
  2638. </div>
  2639. </div>
  2640. </div>
  2641. <div id="divAddEditRecordDataApplication" style="display: none;">
  2642. <div class="form-group">
  2643. <label for="optAddEditRecordDataAppName" class="col-sm-4 control-label">App Name</label>
  2644. <div class="col-sm-7">
  2645. <select id="optAddEditRecordDataAppName" class="form-control"></select>
  2646. </div>
  2647. </div>
  2648. <div class="form-group">
  2649. <label for="optAddEditRecordDataClassPath" class="col-sm-4 control-label">Class Path</label>
  2650. <div class="col-sm-7">
  2651. <select id="optAddEditRecordDataClassPath" class="form-control"></select>
  2652. </div>
  2653. </div>
  2654. <div class="form-group">
  2655. <label for="txtAddEditRecordDataData" class="col-sm-4 control-label">Record Data (if any)</label>
  2656. <div class="col-sm-7">
  2657. <textarea id="txtAddEditRecordDataData" class="form-control" rows="6" spellcheck="false"></textarea>
  2658. </div>
  2659. </div>
  2660. </div>
  2661. <div id="divAddEditRecordOverwrite" class="form-group">
  2662. <div class="col-sm-offset-4 col-sm-7">
  2663. <div class="checkbox">
  2664. <label>
  2665. <input id="chkAddEditRecordOverwrite" type="checkbox"> Overwrite existing records
  2666. </label>
  2667. </div>
  2668. </div>
  2669. </div>
  2670. <div class="form-group">
  2671. <label for="txtAddEditRecordComments" class="col-sm-4 control-label">Comments</label>
  2672. <div class="col-sm-7">
  2673. <textarea id="txtAddEditRecordComments" class="form-control" rows="3" maxlength="255"></textarea>
  2674. </div>
  2675. </div>
  2676. </div>
  2677. </div>
  2678. <div class="modal-footer">
  2679. <button type="submit" class="btn btn-primary" id="btnAddEditRecord" data-loading-text="Saving...">Save</button>
  2680. <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
  2681. </div>
  2682. </div>
  2683. </div>
  2684. </form>
  2685. </div>
  2686. <div id="modalZoneOptions" class="modal fade" tabindex="-1" role="dialog">
  2687. <div class="modal-dialog" role="document" style="width: 780px;">
  2688. <div class="modal-content">
  2689. <div class="modal-header">
  2690. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  2691. <h4 class="modal-title">Zone Options - <span id="lblZoneOptionsZoneName"></span></h4>
  2692. </div>
  2693. <div class="modal-body">
  2694. <div id="divZoneOptionsAlert"></div>
  2695. <div id="divZoneOptionsLoader" style="height: 500px;"></div>
  2696. <div id="divZoneOptions" style="max-height: 500px; overflow-y: auto; padding: 0 6px; overflow-x: hidden;">
  2697. <div class="well well-sm form-horizontal">
  2698. <div class="form-group">
  2699. <label class="col-sm-3 control-label">Zone Transfer</label>
  2700. <div class="col-sm-8">
  2701. <div class="radio">
  2702. <label>
  2703. <input type="radio" name="rdZoneTransfer" id="rdZoneTransferDeny" value="Deny">
  2704. Deny
  2705. </label>
  2706. <div style="padding-top: 5px; padding-left: 20px;">Denies everyone from performing a zone transfer.</div>
  2707. </div>
  2708. <div class="radio">
  2709. <label>
  2710. <input type="radio" name="rdZoneTransfer" id="rdZoneTransferAllow" value="Allow">
  2711. Allow
  2712. </label>
  2713. <div style="padding-top: 5px; padding-left: 20px;">Allows everyone to perform a zone transfer.</div>
  2714. </div>
  2715. <div class="radio">
  2716. <label>
  2717. <input type="radio" name="rdZoneTransfer" id="rdZoneTransferAllowOnlyZoneNameServers" value="AllowOnlyZoneNameServers">
  2718. Allow Only Name Servers In Zone (default)
  2719. </label>
  2720. <div style="padding-top: 5px; padding-left: 20px;">Allows only the name servers with an NS record in the zone to perform a zone transfer.</div>
  2721. </div>
  2722. <div class="radio">
  2723. <label>
  2724. <input type="radio" name="rdZoneTransfer" id="rdZoneTransferAllowOnlySpecifiedNameServers" value="AllowOnlySpecifiedNameServers">
  2725. Allow Only Specified Name Servers
  2726. </label>
  2727. <div style="padding-top: 5px; padding-left: 20px;">Allows only the name servers with an IP address specified below to perform a zone transfer.</div>
  2728. </div>
  2729. </div>
  2730. <div class="col-sm-offset-3 col-sm-6">
  2731. <label for="txtZoneTransferNameServers" class="control-label">Allowed Name Servers (IP addresses)</label>
  2732. <textarea id="txtZoneTransferNameServers" class="form-control" rows="5" spellcheck="false"></textarea>
  2733. </div>
  2734. </div>
  2735. <div>Note! Zone transfer should be allowed only for trusted name servers to sync their secondary zone. Zone transfer from localhost (127.0.0.1 or ::1) is always allowed.</div>
  2736. </div>
  2737. <div class="well well-sm form-horizontal">
  2738. <div class="form-group">
  2739. <label class="col-sm-3 control-label">Notify</label>
  2740. <div class="col-sm-8">
  2741. <div class="radio">
  2742. <label>
  2743. <input type="radio" name="rdZoneNotify" id="rdZoneNotifyNone" value="None">
  2744. None
  2745. </label>
  2746. <div style="padding-top: 5px; padding-left: 20px;">Does not notify any name server when the zone is updated.</div>
  2747. </div>
  2748. <div class="radio">
  2749. <label>
  2750. <input type="radio" name="rdZoneNotify" id="rdZoneNotifyZoneNameServers" value="ZoneNameServers">
  2751. Name Servers In Zone (default)
  2752. </label>
  2753. <div style="padding-top: 5px; padding-left: 20px;">Notifies only the name servers with an NS record in the zone when the zone is updated.</div>
  2754. </div>
  2755. <div class="radio">
  2756. <label>
  2757. <input type="radio" name="rdZoneNotify" id="rdZoneNotifySpecifiedNameServers" value="SpecifiedNameServers">
  2758. Specified Name Servers
  2759. </label>
  2760. <div style="padding-top: 5px; padding-left: 20px;">Notifies only the name servers with an IP address specified below when the zone is updated.</div>
  2761. </div>
  2762. </div>
  2763. <div class="col-sm-offset-3 col-sm-6">
  2764. <label for="txtZoneNotifyNameServers" class="control-label">Notified Name Servers (IP addresses)</label>
  2765. <textarea id="txtZoneNotifyNameServers" class="form-control" rows="5" spellcheck="false"></textarea>
  2766. </div>
  2767. </div>
  2768. <div>Note! Notification must be enabled to allow other name servers to trigger a zone transfer immediately when the zone is updated.</div>
  2769. </div>
  2770. <div class="well well-sm form-horizontal">
  2771. <div class="form-group">
  2772. <label for="txtZoneOptionsZoneTransferTsigKeyNames" class="col-sm-3 control-label">Zone Transfer TSIG Key Names</label>
  2773. <div class="col-sm-6">
  2774. <textarea id="txtZoneOptionsZoneTransferTsigKeyNames" class="form-control" rows="3" spellcheck="false"></textarea>
  2775. <label for="optZoneOptionsQuickTsigKeyNames" class="control-label">Quick Add</label>
  2776. <select id="optZoneOptionsQuickTsigKeyNames" class="form-control">
  2777. </select>
  2778. </div>
  2779. </div>
  2780. <div>Note! TSIG key names must be configured from the Settings before using them here. Entering one or more TSIG key names above will cause the DNS server to authenticate all zone transfer requests. A secondary zone must be configured with one of the above keys to be able to perform a zone transfer.</div>
  2781. </div>
  2782. </div>
  2783. </div>
  2784. <div class="modal-footer">
  2785. <button id="btnSaveZoneOptions" type="submit" class="btn btn-primary" data-loading-text="Saving..." onclick="saveZoneOptions(); return false;">Save</button>
  2786. <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
  2787. </div>
  2788. </div>
  2789. </div>
  2790. </div>
  2791. <div id="modalDnssecSignZone" class="modal fade" tabindex="-1" role="dialog">
  2792. <div class="modal-dialog" role="document" style="width: 780px;">
  2793. <div class="modal-content">
  2794. <div class="modal-header">
  2795. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  2796. <h4 class="modal-title">Sign Zone - <span id="lblDnssecSignZoneZoneName"></span></h4>
  2797. </div>
  2798. <div class="modal-body">
  2799. <div id="divDnssecSignZoneAlert"></div>
  2800. <div class="form-horizontal" style="max-height: 500px; overflow-y: auto; padding: 0 6px; overflow-x: hidden;">
  2801. <div class="form-group">
  2802. <label class="col-sm-4 control-label">DNSKEY Algorithm</label>
  2803. <div class="col-sm-8">
  2804. <div class="radio">
  2805. <label>
  2806. <input type="radio" name="rdDnssecSignZoneAlgorithm" id="rdDnssecSignZoneAlgorithmRsa" value="RSA">
  2807. RSA
  2808. </label>
  2809. </div>
  2810. <div class="radio">
  2811. <label>
  2812. <input type="radio" name="rdDnssecSignZoneAlgorithm" id="rdDnssecSignZoneAlgorithmEcdsa" value="ECDSA">
  2813. ECDSA (Recommended)
  2814. </label>
  2815. </div>
  2816. </div>
  2817. </div>
  2818. <div id="divDnssecSignZoneRsaParameters">
  2819. <div class="form-group">
  2820. <label for="optDnssecSignZoneRsaHashAlgorithm" class="col-sm-4 control-label">Hash Algorithm</label>
  2821. <div class="col-sm-8">
  2822. <select id="optDnssecSignZoneRsaHashAlgorithm" class="form-control" style="width: auto;">
  2823. <option value="MD5">MD5 (obsolete)</option>
  2824. <option>SHA1</option>
  2825. <option value="SHA256">SHA256 (default)</option>
  2826. <option>SHA512</option>
  2827. </select>
  2828. </div>
  2829. </div>
  2830. <div class="form-group">
  2831. <label for="optDnssecSignZoneRsaKSKKeySize" class="col-sm-4 control-label">Key Signing Key (KSK) Size</label>
  2832. <div class="col-sm-8">
  2833. <select id="optDnssecSignZoneRsaKSKKeySize" class="form-control" style="width: auto;">
  2834. <option>1024</option>
  2835. <option>1536</option>
  2836. <option value="2048">2048 (recommended)</option>
  2837. <option>3072</option>
  2838. <option>4096</option>
  2839. </select>
  2840. </div>
  2841. </div>
  2842. <div class="form-group">
  2843. <label for="optDnssecSignZoneRsaZSKKeySize" class="col-sm-4 control-label">Zone Signing Key (ZSK) Size</label>
  2844. <div class="col-sm-8">
  2845. <select id="optDnssecSignZoneRsaZSKKeySize" class="form-control" style="width: auto;">
  2846. <option value="1024">1024 (default)</option>
  2847. <option>1536</option>
  2848. <option>2048</option>
  2849. <option>3072</option>
  2850. <option>4096</option>
  2851. </select>
  2852. </div>
  2853. </div>
  2854. </div>
  2855. <div id="divDnssecSignZoneEcdsaParameters">
  2856. <div class="form-group">
  2857. <label for="optDnssecSignZoneEcdsaCurve" class="col-sm-4 control-label">ECDSA Curve</label>
  2858. <div class="col-sm-8">
  2859. <select id="optDnssecSignZoneEcdsaCurve" class="form-control" style="width: auto;">
  2860. <option value="P256">P256 (default)</option>
  2861. <option>P384</option>
  2862. </select>
  2863. </div>
  2864. </div>
  2865. </div>
  2866. <div class="form-group">
  2867. <label class="col-sm-4 control-label">Proof of Non-Existence</label>
  2868. <div class="col-sm-8">
  2869. <div class="radio">
  2870. <label>
  2871. <input type="radio" name="rdDnssecSignZoneNxProof" id="rdDnssecSignZoneNxProofNSEC" value="NSEC">
  2872. Next Secure (NSEC) (recommended)
  2873. </label>
  2874. <div style="padding-top: 5px; padding-left: 20px;">
  2875. With NSEC, all the records in your zone can be discovered by anyone using "zone walking" technique. NSEC is recommended if your zone does not contain any private/internal records.
  2876. </div>
  2877. </div>
  2878. <div class="radio">
  2879. <label>
  2880. <input type="radio" name="rdDnssecSignZoneNxProof" id="rdDnssecSignZoneNxProofNSEC3" value="NSEC3">
  2881. Next Secure 3 (NSEC3)
  2882. </label>
  2883. <div style="padding-top: 5px; padding-left: 20px;">
  2884. NSEC3, makes it difficult to perform "zone walking" since it uses hashing with a random salt. NSEC3 should be used if your zone contains any private/internal records that you do not wish to be enumerable.
  2885. </div>
  2886. </div>
  2887. </div>
  2888. </div>
  2889. <div id="divDnssecSignZoneNSEC3Parameters">
  2890. <div class="form-group">
  2891. <label for="txtDnssecSignZoneNSEC3Iterations" class="col-sm-4 control-label">NSEC3 Iterations</label>
  2892. <div class="col-sm-8">
  2893. <input id="txtDnssecSignZoneNSEC3Iterations" type="number" class="form-control" placeholder="iterations" style="width: 100px; display: inline;">
  2894. <span>(valid range 0-50, recommended 0)</span>
  2895. </div>
  2896. <div class="col-sm-offset-4 col-sm-8" style="padding-top: 5px;">
  2897. The number of iterations used by NSEC3 for hashing the domain names. It is recommended to use 0 iterations since more iterations will increase computational costs for both the DNS server and resolver while not providing much value against "zone walking" [<a href="https://datatracker.ietf.org/doc/html/draft-ietf-dnsop-nsec3-guidance-03#section-2.3" target="_blank">draft-ietf-dnsop-nsec3-guidance</a>].
  2898. </div>
  2899. </div>
  2900. <div class="form-group">
  2901. <label for="txtDnssecSignZoneNSEC3SaltLength" class="col-sm-4 control-label">NSEC3 Salt Length</label>
  2902. <div class="col-sm-8">
  2903. <input id="txtDnssecSignZoneNSEC3SaltLength" type="number" class="form-control" placeholder="length" style="width: 100px; display: inline;">
  2904. <span>(valid range 0-32, recommended 0)</span>
  2905. </div>
  2906. <div class="col-sm-offset-4 col-sm-8" style="padding-top: 5px;">
  2907. The number of bytes of random salt to generate to be used with the NSEC3 hash computation. It is recommended to not use salt by setting the length to 0 [<a href="https://datatracker.ietf.org/doc/html/draft-ietf-dnsop-nsec3-guidance-03#section-2.4" target="_blank">draft-ietf-dnsop-nsec3-guidance</a>].
  2908. </div>
  2909. </div>
  2910. </div>
  2911. <div class="form-group">
  2912. <label for="txtDnssecSignZoneDnsKeyTtl" class="col-sm-4 control-label">DNSKEY TTL</label>
  2913. <div class="col-sm-8">
  2914. <input id="txtDnssecSignZoneDnsKeyTtl" type="number" class="form-control" placeholder="ttl" style="width: 100px; display: inline;">
  2915. <span>(default 86400)</span>
  2916. </div>
  2917. <div class="col-sm-offset-4 col-sm-8" style="padding-top: 5px;">
  2918. The TTL value to be used for DNSKEY records. A lower value will allow quicker addition or rollover to a new DNS Key at the cost of increased frequency of DNSKEY queries by resolvers.
  2919. </div>
  2920. </div>
  2921. <div class="form-group">
  2922. <label for="txtDnssecSignZoneZskAutoRollover" class="col-sm-4 control-label">ZSK Automatic Rollover</label>
  2923. <div class="col-sm-8">
  2924. <input id="txtDnssecSignZoneZskAutoRollover" type="number" class="form-control" placeholder="days" style="width: 100px; display: inline;">
  2925. <span>days (valid range 0-365; default 90; set 0 to disable)</span>
  2926. </div>
  2927. <div class="col-sm-offset-4 col-sm-8" style="padding-top: 5px;">
  2928. The frequency at which the DNS server must automatically rollover all Zone Signing Key (ZSK) keys.
  2929. </div>
  2930. </div>
  2931. </div>
  2932. </div>
  2933. <div class="modal-footer">
  2934. <button id="btnDnssecSignZone" type="submit" class="btn btn-primary" data-loading-text="Signing..." onclick="signPrimaryZone(); return false;">Sign Zone</button>
  2935. <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
  2936. </div>
  2937. </div>
  2938. </div>
  2939. </div>
  2940. <div id="modalDnssecUnsignZone" class="modal fade" tabindex="-1" role="dialog">
  2941. <div class="modal-dialog" role="document">
  2942. <div class="modal-content">
  2943. <div class="modal-header">
  2944. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  2945. <h4 class="modal-title">Unsign Zone - <span id="lblDnssecUnsignZoneZoneName"></span></h4>
  2946. </div>
  2947. <div class="modal-body">
  2948. <div id="divDnssecUnsignZoneAlert"></div>
  2949. <p><b>WARNING!</b> Unsigning the zone without removing all DS records from its parent zone will cause DNSSEC validating recursive resolvers to mark the zone as <b>bogus</b> and fail to resolve it.</p>
  2950. <p><b>WARNING!</b> Make sure that you have removed all of the DS records from the parent zone and sufficient time has passed before unsigning this zone. You MUST wait for at least the number of seconds specified by the DS record's TTL value to elapse before unsigning the zone to ensure that all recursive resolvers would have expired the DS records from its cache. For example, if you have DS records at the parent zone with TTL value set to 86400 seconds then you must wait for 86400 seconds (24 hours) to pass after you delete the DS records from the parent zone. Once you have ensured that you have waited for the appropriate time then you can unsign the zone safely.</p>
  2951. <p><b>NOTE!</b> You can find out the TTL value of DS records for your zone by querying for DS records using the DNS Client tab.</p>
  2952. <p><b>WARNING!</b> Unsigning the zone will permanently delete all of the private keys associated with it. Consider taking a backup before proceeding.</p>
  2953. <p>&nbsp;</p>
  2954. <p>Are you sure you want to proceed to unsign the zone now?</p>
  2955. </div>
  2956. <div class="modal-footer">
  2957. <button id="btnDnssecUnsignZone" type="submit" class="btn btn-danger" data-loading-text="Unsigning..." onclick="unsignPrimaryZone(); return false;">Unsign Zone</button>
  2958. <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
  2959. </div>
  2960. </div>
  2961. </div>
  2962. </div>
  2963. <div id="modalDnssecProperties" class="modal fade" tabindex="-1" role="dialog">
  2964. <div class="modal-dialog" role="document" style="width: 940px;">
  2965. <div class="modal-content">
  2966. <div class="modal-header">
  2967. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  2968. <h4 class="modal-title">DNSSEC Properties - <span id="lblDnssecPropertiesZoneName"></span></h4>
  2969. </div>
  2970. <div class="modal-body">
  2971. <div id="divDnssecPropertiesAlert"></div>
  2972. <div id="divDnssecPropertiesLoader" style="height: 500px;"></div>
  2973. <div id="divDnssecProperties" style="max-height: 500px; overflow-y: auto; padding: 0 6px; overflow-x: hidden;">
  2974. <div class="well well-sm form-horizontal">
  2975. <table class="table table-hover" style="margin-bottom: 10px;">
  2976. <thead>
  2977. <tr>
  2978. <th onclick="sortTable('tableDnssecPropertiesPrivateKeysBody', 0);">Key Tag</th>
  2979. <th onclick="sortTable('tableDnssecPropertiesPrivateKeysBody', 1);">Key Type</th>
  2980. <th onclick="sortTable('tableDnssecPropertiesPrivateKeysBody', 2);">Algorithm</th>
  2981. <th onclick="sortTable('tableDnssecPropertiesPrivateKeysBody', 3);">State</th>
  2982. <th onclick="sortTable('tableDnssecPropertiesPrivateKeysBody', 4);">State Changed</th>
  2983. <th style="width: 108px;" onclick="sortTable('tableDnssecPropertiesPrivateKeysBody', 5);">Rollover</th>
  2984. <th style="width: 150px;"></th>
  2985. </tr>
  2986. </thead>
  2987. <tbody id="tableDnssecPropertiesPrivateKeysBody">
  2988. </tbody>
  2989. </table>
  2990. <div>
  2991. <button type="button" class="btn btn-primary" style="padding: 2px 0; width: 120px;" data-toggle="collapse" data-target="#divDnssecPropertiesGenerateKey" aria-expanded="false" aria-controls="divDnssecPropertiesGenerateKey">Add Private Key</button>
  2992. <button type="button" class="btn btn-warning" style="padding: 2px 0; width: 120px;" data-loading-text="Publishing..." onclick="publishAllDnssecPrivateKeys(this);">Publish All Keys</button>
  2993. </div>
  2994. <div id="divDnssecPropertiesGenerateKey" class="collapse">
  2995. <div class="panel panel-default" style="margin-bottom: 0px; margin-top: 10px; padding-top: 15px;">
  2996. <div class="form-group">
  2997. <label for="optDnssecPropertiesGenerateKeyKeyType" class="col-sm-4 control-label">Key Type</label>
  2998. <div class="col-sm-8">
  2999. <select id="optDnssecPropertiesGenerateKeyKeyType" class="form-control" style="width: auto;">
  3000. <option value="KeySigningKey">Key Signing Key (KSK)</option>
  3001. <option value="ZoneSigningKey">Zone Signing Key (ZSK)</option>
  3002. </select>
  3003. </div>
  3004. </div>
  3005. <div class="form-group">
  3006. <label for="optDnssecPropertiesGenerateKeyAlgorithm" class="col-sm-4 control-label">Algorithm</label>
  3007. <div class="col-sm-8">
  3008. <select id="optDnssecPropertiesGenerateKeyAlgorithm" class="form-control" style="width: auto;">
  3009. <option>RSA</option>
  3010. <option value="ECDSA">ECDSA (recommended)</option>
  3011. </select>
  3012. </div>
  3013. </div>
  3014. <div id="divDnssecPropertiesGenerateKeyRsaParameters">
  3015. <div class="form-group">
  3016. <label for="optDnssecPropertiesGenerateKeyRsaHashAlgorithm" class="col-sm-4 control-label">Hash Algorithm</label>
  3017. <div class="col-sm-8">
  3018. <select id="optDnssecPropertiesGenerateKeyRsaHashAlgorithm" class="form-control" style="width: auto;">
  3019. <option value="MD5">MD5 (obsolete)</option>
  3020. <option>SHA1</option>
  3021. <option value="SHA256">SHA256 (default)</option>
  3022. <option>SHA512</option>
  3023. </select>
  3024. </div>
  3025. </div>
  3026. <div class="form-group">
  3027. <label for="optDnssecPropertiesGenerateKeyRsaKeySize" class="col-sm-4 control-label">Key Size</label>
  3028. <div class="col-sm-8">
  3029. <select id="optDnssecPropertiesGenerateKeyRsaKeySize" class="form-control" style="width: auto;">
  3030. <option>1024</option>
  3031. <option>1536</option>
  3032. <option>2048</option>
  3033. <option>3072</option>
  3034. <option>4096</option>
  3035. </select>
  3036. </div>
  3037. </div>
  3038. </div>
  3039. <div id="divDnssecPropertiesGenerateKeyEcdsaParameters">
  3040. <div class="form-group">
  3041. <label for="optDnssecPropertiesGenerateKeyEcdsaCurve" class="col-sm-4 control-label">ECDSA Curve</label>
  3042. <div class="col-sm-8">
  3043. <select id="optDnssecPropertiesGenerateKeyEcdsaCurve" class="form-control" style="width: auto;">
  3044. <option value="P256">P256 (default)</option>
  3045. <option>P384</option>
  3046. </select>
  3047. </div>
  3048. </div>
  3049. </div>
  3050. <div id="divDnssecPropertiesGenerateKeyAutomaticRollover" class="form-group">
  3051. <label for="txtDnssecPropertiesGenerateKeyAutomaticRollover" class="col-sm-4 control-label">Automatic Key Rollover</label>
  3052. <div class="col-sm-8">
  3053. <div>
  3054. <input id="txtDnssecPropertiesGenerateKeyAutomaticRollover" type="number" class="form-control" placeholder="days" style="width: 100px; display: inline;">
  3055. <span>days (valid range 0-365; default 90; set 0 to disable)</span>
  3056. </div>
  3057. </div>
  3058. <div class="col-sm-offset-4 col-sm-8" style="margin-top: 10px;">
  3059. The frequency at which the DNS server must automatically rollover the key.
  3060. </div>
  3061. </div>
  3062. <div class="form-group">
  3063. <div class="col-sm-offset-4 col-sm-8">
  3064. <button type="button" class="btn btn-primary" style="padding: 2px 0; width: 150px;" data-loading-text="Generating..." onclick="generateAndAddDnssecPrivateKey(this);">Generate & Add Key</button>
  3065. </div>
  3066. </div>
  3067. </div>
  3068. </div>
  3069. </div>
  3070. <div class="well well-sm form-horizontal">
  3071. <div class="form-group">
  3072. <label class="col-sm-4 control-label">Proof of Non-Existence</label>
  3073. <div class="col-sm-8">
  3074. <div class="radio">
  3075. <label>
  3076. <input type="radio" name="rdDnssecPropertiesNxProof" id="rdDnssecPropertiesNxProofNSEC" value="NSEC">
  3077. Next Secure (NSEC) (recommended)
  3078. </label>
  3079. <div style="padding-top: 5px; padding-left: 20px;">
  3080. With NSEC, all the records in your zone can be discovered by anyone using "zone walking" technique. NSEC is recommended if your zone does not contain any private/internal records.
  3081. </div>
  3082. </div>
  3083. <div class="radio">
  3084. <label>
  3085. <input type="radio" name="rdDnssecPropertiesNxProof" id="rdDnssecPropertiesNxProofNSEC3" value="NSEC3">
  3086. Next Secure 3 (NSEC3)
  3087. </label>
  3088. <div style="padding-top: 5px; padding-left: 20px;">
  3089. NSEC3, makes it difficult to perform "zone walking" since it uses hashing with a random salt. NSEC3 should be used if your zone contains any private/internal records that you do not wish to be enumerable.
  3090. </div>
  3091. </div>
  3092. </div>
  3093. </div>
  3094. <div id="divDnssecPropertiesNSEC3Parameters">
  3095. <div class="form-group">
  3096. <label for="txtDnssecPropertiesNSEC3Iterations" class="col-sm-4 control-label">NSEC3 Iterations</label>
  3097. <div class="col-sm-8">
  3098. <input id="txtDnssecPropertiesNSEC3Iterations" type="number" class="form-control" placeholder="iterations" style="width: 100px; display: inline;">
  3099. <span>(valid range 0-50, recommended 0)</span>
  3100. </div>
  3101. <div class="col-sm-offset-4 col-sm-8" style="padding-top: 5px;">
  3102. The number of iterations used by NSEC3 for hashing the domain names. It is recommended to use 0 iterations since more iterations will increase computational costs for both the DNS server and resolver while not providing much value against "zone walking" [<a href="https://datatracker.ietf.org/doc/html/draft-ietf-dnsop-nsec3-guidance-03#section-2.3" target="_blank">draft-ietf-dnsop-nsec3-guidance</a>].
  3103. </div>
  3104. </div>
  3105. <div class="form-group">
  3106. <label for="txtDnssecPropertiesNSEC3SaltLength" class="col-sm-4 control-label">NSEC3 Salt Length</label>
  3107. <div class="col-sm-8">
  3108. <input id="txtDnssecPropertiesNSEC3SaltLength" type="number" class="form-control" placeholder="length" style="width: 100px; display: inline;">
  3109. <span>(valid range 0-32, recommended 0)</span>
  3110. </div>
  3111. <div class="col-sm-offset-4 col-sm-8" style="padding-top: 5px;">
  3112. The number of bytes of random salt to generate to be used with the NSEC3 hash computation. It is recommended to not use salt by setting the length to 0 [<a href="https://datatracker.ietf.org/doc/html/draft-ietf-dnsop-nsec3-guidance-03#section-2.4" target="_blank">draft-ietf-dnsop-nsec3-guidance</a>].
  3113. </div>
  3114. </div>
  3115. </div>
  3116. <div class="form-group" style="margin-bottom: 5px;">
  3117. <div class="col-sm-offset-4 col-sm-8">
  3118. <button id="btnDnssecPropertiesChangeNxProof" type="button" class="btn btn-warning" style="padding: 2px 0; width: 100px;" data-loading-text="Changing..." onclick="changeDnssecNxProof(this);">Change</button>
  3119. </div>
  3120. </div>
  3121. </div>
  3122. <div class="well well-sm form-horizontal">
  3123. <div class="form-group" style="margin-bottom: 5px;">
  3124. <label for="txtDnssecPropertiesDnsKeyTtl" class="col-sm-4 control-label">DNSKEY TTL</label>
  3125. <div class="col-sm-8">
  3126. <div>
  3127. <input id="txtDnssecPropertiesDnsKeyTtl" type="number" class="form-control" placeholder="ttl" style="width: 100px; display: inline;">
  3128. <span>(default 86400)</span>
  3129. </div>
  3130. <div style="margin-top: 10px;">
  3131. <button type="button" class="btn btn-default" style="padding: 2px 0; width: 100px;" data-loading-text="Updating..." onclick="updateDnssecDnsKeyTtl(this);">Update TTL</button>
  3132. </div>
  3133. </div>
  3134. <div class="col-sm-offset-4 col-sm-8" style="margin-top: 10px;">
  3135. The TTL value to be used for DNSKEY records. A lower value will allow quicker addition or rollover to a new DNS Key at the cost of increased frequency of DNSKEY queries by resolvers.
  3136. </div>
  3137. </div>
  3138. <div style="margin-top: 10px;">
  3139. Warning! You MUST wait for at least the number of seconds specified by the the old TTL value to elapse before making any changes to the DNS keys above to ensure that all recursive resolvers would have expired the DNSKEY records from its cache. For example, if the old TTL value was 86400 seconds, then you must wait for 86400 seconds (24 hours) to pass before making any changes to the DNS keys.
  3140. </div>
  3141. </div>
  3142. </div>
  3143. </div>
  3144. <div class="modal-footer">
  3145. <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
  3146. </div>
  3147. </div>
  3148. </div>
  3149. </div>
  3150. <div id="modalImportAllowedZones" class="modal fade" tabindex="-1" role="dialog">
  3151. <div class="modal-dialog" role="document">
  3152. <div class="modal-content">
  3153. <div class="modal-header">
  3154. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  3155. <h4 class="modal-title">Import Allowed Zones</h4>
  3156. </div>
  3157. <div class="modal-body">
  3158. <div id="divImportAllowedZonesAlert"></div>
  3159. <p>Enter domain names one below other to import into Allowed Zone:</p>
  3160. <div class="form-group">
  3161. <label for="txtImportAllowedZones" class="control-label">Allowed Zones</label>
  3162. <textarea id="txtImportAllowedZones" class="form-control" rows="15" spellcheck="false"></textarea>
  3163. </div>
  3164. </div>
  3165. <div class="modal-footer">
  3166. <button id="btnImportAllowedZones" type="submit" class="btn btn-primary" data-loading-text="Importing..." onclick="importAllowedZones(); return false;">Import</button>
  3167. <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
  3168. </div>
  3169. </div>
  3170. </div>
  3171. </div>
  3172. <div id="modalImportBlockedZones" class="modal fade" tabindex="-1" role="dialog">
  3173. <div class="modal-dialog" role="document">
  3174. <div class="modal-content">
  3175. <div class="modal-header">
  3176. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  3177. <h4 class="modal-title">Import Blocked Zones</h4>
  3178. </div>
  3179. <div class="modal-body">
  3180. <div id="divImportBlockedZonesAlert"></div>
  3181. <p>Enter domain names one below other to import into blocked zone:</p>
  3182. <div class="form-group">
  3183. <label for="txtImportBlockedZones" class="control-label">Blocked Zones</label>
  3184. <textarea id="txtImportBlockedZones" class="form-control" rows="15" spellcheck="false"></textarea>
  3185. </div>
  3186. </div>
  3187. <div class="modal-footer">
  3188. <button id="btnImportBlockedZones" type="submit" class="btn btn-primary" data-loading-text="Importing..." onclick="importBlockedZones(); return false;">Import</button>
  3189. <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
  3190. </div>
  3191. </div>
  3192. </div>
  3193. </div>
  3194. <div id="modalStoreApps" class="modal fade" tabindex="-1" role="dialog">
  3195. <form class="form-horizontal">
  3196. <div class="modal-dialog" role="document" style="width: 800px;">
  3197. <div class="modal-content">
  3198. <div class="modal-header">
  3199. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  3200. <h4 class="modal-title">DNS App Store</h4>
  3201. </div>
  3202. <div class="modal-body">
  3203. <div id="divStoreAppsAlert"></div>
  3204. <div id="divStoreAppsLoader" style="height: 500px;"></div>
  3205. <div id="divStoreApps" style="max-height: 500px; overflow-y: auto; display: none;">
  3206. <table class="table table-hover">
  3207. <thead>
  3208. <tr>
  3209. <th style="min-width: 120px;" onclick="sortTable('tableStoreAppsBody', 0);">Store Apps</th>
  3210. <th style="width: 96px;"></th>
  3211. </tr>
  3212. </thead>
  3213. <tbody id="tableStoreAppsBody">
  3214. </tbody>
  3215. <tfoot id="tableStoreAppsFooter">
  3216. <tr><td colspan="3"><b>Total Apps: 0</b></td></tr>
  3217. </tfoot>
  3218. </table>
  3219. </div>
  3220. </div>
  3221. <div class="modal-footer">
  3222. <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
  3223. </div>
  3224. </div>
  3225. </div>
  3226. </form>
  3227. </div>
  3228. <div id="modalInstallApp" class="modal fade" tabindex="-1" role="dialog">
  3229. <form class="form-horizontal">
  3230. <div class="modal-dialog" role="document">
  3231. <div class="modal-content">
  3232. <div class="modal-header">
  3233. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  3234. <h4 class="modal-title">Install App</h4>
  3235. </div>
  3236. <div class="modal-body">
  3237. <div id="divInstallAppAlert"></div>
  3238. <div class="form-group">
  3239. <label for="txtInstallApp" class="col-sm-4 control-label">App Name</label>
  3240. <div class="col-sm-7">
  3241. <input id="txtInstallApp" type="text" class="form-control">
  3242. </div>
  3243. </div>
  3244. <div class="form-group">
  3245. <label for="fileAppZip" class="col-sm-4 control-label">App Zip File</label>
  3246. <div class="col-sm-7">
  3247. <input type="file" class="form-control" id="fileAppZip">
  3248. </div>
  3249. </div>
  3250. </div>
  3251. <div class="modal-footer">
  3252. <button id="btnInstallApp" type="submit" class="btn btn-primary" data-loading-text="Installing..." onclick="installApp(); return false;">Install</button>
  3253. <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
  3254. </div>
  3255. </div>
  3256. </div>
  3257. </form>
  3258. </div>
  3259. <div id="modalUpdateApp" class="modal fade" tabindex="-1" role="dialog">
  3260. <form class="form-horizontal">
  3261. <div class="modal-dialog" role="document">
  3262. <div class="modal-content">
  3263. <div class="modal-header">
  3264. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  3265. <h4 class="modal-title">Update App</h4>
  3266. </div>
  3267. <div class="modal-body">
  3268. <div id="divUpdateAppAlert"></div>
  3269. <div class="form-group">
  3270. <label for="txtUpdateApp" class="col-sm-4 control-label">App Name</label>
  3271. <div class="col-sm-7">
  3272. <input id="txtUpdateApp" type="text" class="form-control" disabled>
  3273. </div>
  3274. </div>
  3275. <div class="form-group">
  3276. <label for="fileUpdateAppZip" class="col-sm-4 control-label">App Zip File</label>
  3277. <div class="col-sm-7">
  3278. <input type="file" class="form-control" id="fileUpdateAppZip">
  3279. </div>
  3280. </div>
  3281. </div>
  3282. <div class="modal-footer">
  3283. <button id="btnUpdateApp" type="submit" class="btn btn-primary" data-loading-text="Updating..." onclick="updateApp(); return false;">Update</button>
  3284. <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
  3285. </div>
  3286. </div>
  3287. </div>
  3288. </form>
  3289. </div>
  3290. <div id="modalAppConfig" class="modal fade" tabindex="-1" role="dialog">
  3291. <div class="modal-dialog" role="document" style="width: 780px;">
  3292. <div class="modal-content">
  3293. <div class="modal-header">
  3294. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  3295. <h4 class="modal-title">App Config</h4>
  3296. </div>
  3297. <div class="modal-body">
  3298. <div id="divAppConfigAlert"></div>
  3299. <p>Edit the <code>dnsApp.config</code> config file below as required by the DNS application: <span id="lblAppConfigName" style="font-weight: bold;"></span></p>
  3300. <div class="form-group">
  3301. <label for="txtAppConfig" class="control-label">Config File</label>
  3302. <textarea id="txtAppConfig" class="form-control" rows="15" spellcheck="false"></textarea>
  3303. </div>
  3304. <p>Note: The app will reload the config automatically after you save it.</p>
  3305. </div>
  3306. <div class="modal-footer">
  3307. <button id="btnAppConfig" type="submit" class="btn btn-primary" data-loading-text="Saving..." onclick="saveAppConfig(); return false;">Save</button>
  3308. <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
  3309. </div>
  3310. </div>
  3311. </div>
  3312. </div>
  3313. <div id="modalBackupSettings" class="modal fade" tabindex="-1" role="dialog">
  3314. <div class="modal-dialog" role="document">
  3315. <div class="modal-content">
  3316. <div class="modal-header">
  3317. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  3318. <h4 class="modal-title">Backup Settings</h4>
  3319. </div>
  3320. <div class="modal-body">
  3321. <div id="divBackupSettingsAlert"></div>
  3322. <p>The backup process will create a zip file for the items selected below:</p>
  3323. <div class="form-horizontal">
  3324. <div class="form-group">
  3325. <div style="padding-left: 40px;">
  3326. <div class="checkbox">
  3327. <label>
  3328. <input id="chkBackupDnsSettings" type="checkbox" checked> DNS Settings File (dns.config)
  3329. </label>
  3330. </div>
  3331. <div class="checkbox">
  3332. <label>
  3333. <input id="chkBackupLogSettings" type="checkbox" checked> Log Settings File (log.config)
  3334. </label>
  3335. </div>
  3336. <div class="checkbox">
  3337. <label>
  3338. <input id="chkBackupZones" type="checkbox" checked> DNS Zone Files (*.zone)
  3339. </label>
  3340. </div>
  3341. <div class="checkbox">
  3342. <label>
  3343. <input id="chkBackupAllowedZones" type="checkbox" checked> Allowed Zones File (allowed.config)
  3344. </label>
  3345. </div>
  3346. <div class="checkbox">
  3347. <label>
  3348. <input id="chkBackupBlockedZones" type="checkbox" checked> Blocked Zones File (blocked.config)
  3349. </label>
  3350. </div>
  3351. <div class="checkbox">
  3352. <label>
  3353. <input id="chkBackupScopes" type="checkbox" checked> DHCP Scope Files (*.scope)
  3354. </label>
  3355. </div>
  3356. <div class="checkbox">
  3357. <label>
  3358. <input id="chkBackupApps" type="checkbox" checked> DNS Apps
  3359. </label>
  3360. </div>
  3361. <div class="checkbox">
  3362. <label>
  3363. <input id="chkBackupStats" type="checkbox" checked> Dashboard Stats Files (*.stat, *.dstat)
  3364. </label>
  3365. </div>
  3366. <div class="checkbox">
  3367. <label>
  3368. <input id="chkBackupLogs" type="checkbox"> Log Files (*.log)
  3369. </label>
  3370. </div>
  3371. <div class="checkbox">
  3372. <label>
  3373. <input id="chkBackupBlockLists" type="checkbox" checked> Block List Cache Files
  3374. </label>
  3375. </div>
  3376. </div>
  3377. </div>
  3378. </div>
  3379. <p>Note! It may take several minutes to generate the backup zip file if log files are selected to be backed up which will depend on the size of the log files on the disk.</p>
  3380. </div>
  3381. <div class="modal-footer">
  3382. <button type="submit" class="btn btn-primary" data-loading-text="Backup" onclick="backupSettings(); return false;">Backup</button>
  3383. <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
  3384. </div>
  3385. </div>
  3386. </div>
  3387. </div>
  3388. <div id="modalRestoreSettings" class="modal fade" tabindex="-1" role="dialog">
  3389. <div class="modal-dialog" role="document">
  3390. <div class="modal-content">
  3391. <div class="modal-header">
  3392. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  3393. <h4 class="modal-title">Restore Settings</h4>
  3394. </div>
  3395. <div class="modal-body">
  3396. <div id="divRestoreSettingsAlert"></div>
  3397. <div class="form-horizontal">
  3398. <div class="form-group">
  3399. <label for="fileBackupZip" class="col-sm-3 control-label">Backup Zip File</label>
  3400. <div class="col-sm-6">
  3401. <input type="file" class="form-control" id="fileBackupZip">
  3402. </div>
  3403. </div>
  3404. <p>The restore process will restore all the selected items from the backup zip file:</p>
  3405. <div class="form-group">
  3406. <div style="padding-left: 40px;">
  3407. <div class="checkbox">
  3408. <label>
  3409. <input id="chkRestoreDnsSettings" type="checkbox" checked> DNS Settings File (dns.config)
  3410. </label>
  3411. </div>
  3412. <div class="checkbox">
  3413. <label>
  3414. <input id="chkRestoreLogSettings" type="checkbox" checked> Log Settings File (log.config)
  3415. </label>
  3416. </div>
  3417. <div class="checkbox">
  3418. <label>
  3419. <input id="chkRestoreZones" type="checkbox" checked> DNS Zone Files (*.zone)
  3420. </label>
  3421. </div>
  3422. <div class="checkbox">
  3423. <label>
  3424. <input id="chkRestoreAllowedZones" type="checkbox" checked> Allowed Zones File (allowed.config)
  3425. </label>
  3426. </div>
  3427. <div class="checkbox">
  3428. <label>
  3429. <input id="chkRestoreBlockedZones" type="checkbox" checked> Blocked Zones File (blocked.config)
  3430. </label>
  3431. </div>
  3432. <div class="checkbox">
  3433. <label>
  3434. <input id="chkRestoreScopes" type="checkbox" checked> DHCP Scope Files (*.scope)
  3435. </label>
  3436. </div>
  3437. <div class="checkbox">
  3438. <label>
  3439. <input id="chkRestoreApps" type="checkbox" checked> DNS Apps
  3440. </label>
  3441. </div>
  3442. <div class="checkbox">
  3443. <label>
  3444. <input id="chkRestoreStats" type="checkbox" checked> Dashboard Stats Files (*.stat, *.dstat)
  3445. </label>
  3446. </div>
  3447. <div class="checkbox">
  3448. <label>
  3449. <input id="chkRestoreLogs" type="checkbox"> Log Files (*.log)
  3450. </label>
  3451. </div>
  3452. <div class="checkbox">
  3453. <label>
  3454. <input id="chkRestoreBlockLists" type="checkbox" checked> Block List Cache Files
  3455. </label>
  3456. </div>
  3457. </div>
  3458. </div>
  3459. <p>Restore options:</p>
  3460. <div class="form-group">
  3461. <div style="padding-left: 40px;">
  3462. <div class="checkbox">
  3463. <label>
  3464. <input id="chkDeleteExistingFiles" type="checkbox" checked> Delete Existing Files For Selected Items
  3465. </label>
  3466. </div>
  3467. </div>
  3468. </div>
  3469. </div>
  3470. <p>Warning! The restore process will overwrite existing config files on disk for above selected items and reload new settings including passwords. If you do not remember the password used while creating the backup, you should change the admin password immediately after restoring the backup. Failing to do so will require you to follow the password reset process.</p>
  3471. </div>
  3472. <div class="modal-footer">
  3473. <button id="btnRestoreSettings" type="submit" class="btn btn-primary" data-loading-text="Restoring..." onclick="restoreSettings(); return false;">Restore</button>
  3474. <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
  3475. </div>
  3476. </div>
  3477. </div>
  3478. </div>
  3479. <div id="modalTopStats" class="modal fade" tabindex="-1" role="dialog">
  3480. <div class="modal-dialog" role="document">
  3481. <div class="modal-content">
  3482. <div class="modal-header">
  3483. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  3484. <h4 id="lblTopStatsTitle" class="modal-title">Top Stats</h4>
  3485. </div>
  3486. <div class="modal-body">
  3487. <div id="divTopStatsAlert"></div>
  3488. <div id="divTopStatsLoader" style="height: 500px;"></div>
  3489. <div id="divTopStatsData" style="max-height: 500px; overflow-y: auto;">
  3490. <table id="tableTopStatsClients" class="table table-hover">
  3491. <thead>
  3492. <tr>
  3493. <th>Client</th>
  3494. <th>Queries</th>
  3495. </tr>
  3496. </thead>
  3497. <tbody id="tbodyTopStatsClients">
  3498. </tbody>
  3499. <tfoot>
  3500. <tr><th colspan="2" id="tfootTopStatsClients"></th></tr>
  3501. </tfoot>
  3502. </table>
  3503. <table id="tableTopStatsDomains" class="table table-hover">
  3504. <thead>
  3505. <tr>
  3506. <th>Domain</th>
  3507. <th>Hits</th>
  3508. </tr>
  3509. </thead>
  3510. <tbody id="tbodyTopStatsDomains">
  3511. </tbody>
  3512. <tfoot>
  3513. <tr><th colspan="2" id="tfootTopStatsDomains"></th></tr>
  3514. </tfoot>
  3515. </table>
  3516. <table id="tableTopStatsBlockedDomains" class="table table-hover">
  3517. <thead>
  3518. <tr>
  3519. <th>Domain</th>
  3520. <th>Hits</th>
  3521. </tr>
  3522. </thead>
  3523. <tbody id="tbodyTopStatsBlockedDomains">
  3524. </tbody>
  3525. <tfoot>
  3526. <tr><th colspan="2" id="tfootTopStatsBlockedDomains"></th></tr>
  3527. </tfoot>
  3528. </table>
  3529. </div>
  3530. </div>
  3531. <div class="modal-footer">
  3532. <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
  3533. </div>
  3534. </div>
  3535. </div>
  3536. </div>
  3537. <div id="modalDhcpRemoveLease" class="modal fade" tabindex="-1" role="dialog">
  3538. <div class="modal-dialog" role="document">
  3539. <div class="modal-content">
  3540. <div class="modal-header">
  3541. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  3542. <h4 class="modal-title">Remove Lease?</h4>
  3543. </div>
  3544. <div class="modal-body">
  3545. <div id="divDhcpRemoveLeaseAlert"></div>
  3546. <p><b>WARNING!</b> Removing a DHCP lease from the server side will NOT remove the allocated IP address from the client side. Make sure that the client assigned this lease is not connected to the network before proceeding.</p>
  3547. <p><b>WARNING!</b> Removing a DHCP lease may cause IP address conflict if the DHCP server assigns the same IP address to a new client while the old client is still connected to the network.</p>
  3548. <p>It is not recommended to remove a DHCP lease when the client is still connected or may connect back later to the network before the lease expires. Use this option only as a last resort.</p>
  3549. <p>
  3550. Follow the recommendations below to avoid such a case that requires removing a DHCP lease:
  3551. <ul>
  3552. <li>Use a shorter lease time such that a dynamically allocated lease expires quickly when the client exits the network.</li>
  3553. <li>Use Exclusions to exclude IP address ranges from being dynamically allocated that you plan to assign manually to some of the devices on the network.</li>
  3554. <li>Use Exclusions to make sure that you have unallocated addresses available in the DHCP scope to be assigned as reserved leases in future.</li>
  3555. <li>Rely less on the assigned IP addresses by configuring a domain name for the DHCP scope and accessing all the devices using their domain names.</li>
  3556. </ul>
  3557. </p>
  3558. <p>&nbsp;</p>
  3559. <p>Are you sure you want to remove the DHCP lease now?</p>
  3560. </div>
  3561. <div class="modal-footer">
  3562. <button id="btnRemoveDhcpLease" type="button" class="btn btn-danger" data-loading-text="Removing...">Remove</button>
  3563. <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
  3564. </div>
  3565. </div>
  3566. </div>
  3567. </div>
  3568. <div id="footer"></div>
  3569. </body>
  3570. </html>