index.html 145 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860
  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/main.css" rel="stylesheet" />
  13. <script src="/js/common.js"></script>
  14. <script src="/js/main.js"></script>
  15. <script src="/js/zone.js"></script>
  16. <script src="/js/dhcp.js"></script>
  17. </head>
  18. <body>
  19. <div id="header">
  20. <div id="mnuUser" class="menu dropdown" style="display: none;">
  21. <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
  22. <span class="menu-title">
  23. <span class="glyphicon glyphicon-user" aria-hidden="true"></span>
  24. <span id="mnuUserDisplayName"></span>
  25. <span class="caret"></span>
  26. </span>
  27. </a>
  28. <ul class="dropdown-menu">
  29. <li><a href="#" onclick="return resetChangePasswordModal();" data-toggle="modal" data-target="#modalChangePassword">Change Password</a></li>
  30. <li><a href="#" onclick="return logout();">Logout</a></li>
  31. </ul>
  32. </div>
  33. </div>
  34. <div id="content">
  35. <div class="container">
  36. <div class="AlertPlaceholder"></div>
  37. <div id="pageLogin" class="pageLogin">
  38. <div class="panel panel-default">
  39. <div class="panel-heading">
  40. <h3 class="panel-title">DNS Server</h3>
  41. </div>
  42. <div class="panel-body">
  43. <form class="form-horizontal">
  44. <div class="form-group">
  45. <label for="txtUser" class="col-sm-3 control-label">Username</label>
  46. <div class="col-sm-8">
  47. <input type="text" class="form-control" id="txtUser" placeholder="username">
  48. </div>
  49. </div>
  50. <div class="form-group">
  51. <label for="txtPass" class="col-sm-3 control-label">Password</label>
  52. <div class="col-sm-8">
  53. <input type="password" class="form-control" id="txtPass" placeholder="password">
  54. </div>
  55. </div>
  56. <div class="form-group" style="margin-bottom: 0px;">
  57. <div class="col-sm-offset-3 col-sm-4">
  58. <button id="btnLogin" type="submit" class="btn btn-primary" data-loading-text="Working..." onclick="return login();">Login</button>
  59. </div>
  60. <div class="col-sm-4" style="padding: 6px; text-align: right;">
  61. <a href="#" data-toggle="modal" data-target="#modalForgotPassword">Forgot Password?</a>
  62. </div>
  63. </div>
  64. </form>
  65. </div>
  66. </div>
  67. </div>
  68. <div id="pageMain" class="page">
  69. <div class="panel panel-default">
  70. <div class="panel-heading" style="height: 38px;">
  71. <div style="float: left;">
  72. <h3 class="panel-title">DNS Server<span id="lblServerDomain"></span></h3>
  73. </div>
  74. <div style="float: right;">
  75. <a href="" target="_blank" id="lnkNewVersionAvailable" style="display: none; color: red !important;">New Version Available!</a>
  76. </div>
  77. </div>
  78. <div class="panel-body" style="min-height: 500px;">
  79. <div>
  80. <ul class="nav nav-tabs" role="tablist">
  81. <li id="mainPanelTabListDashboard" role="presentation" class="active"><a href="#mainPanelTabPaneDashboard" aria-controls="mainPanelTabPaneDashboard" role="tab" data-toggle="tab" onclick="refreshDashboard();">Dashboard</a></li>
  82. <li id="mainPanelTabListZones" role="presentation"><a href="#mainPanelTabPaneZones" aria-controls="mainPanelTabPaneZones" role="tab" data-toggle="tab" onclick="refreshZones(true);">Zones</a></li>
  83. <li id="mainPanelTabListCachedZones" role="presentation"><a href="#mainPanelTabPaneCachedZones" aria-controls="mainPanelTabPaneCachedZones" role="tab" data-toggle="tab">Cache</a></li>
  84. <li id="mainPanelTabListAllowedZones" role="presentation"><a href="#mainPanelTabPaneAllowedZones" aria-controls="mainPanelTabPaneAllowedZones" role="tab" data-toggle="tab">Allowed Zones</a></li>
  85. <li id="mainPanelTabListBlockedZones" role="presentation"><a href="#mainPanelTabPaneBlockedZones" aria-controls="mainPanelTabPaneBlockedZones" role="tab" data-toggle="tab">Blocked Zones</a></li>
  86. <li id="mainPanelTabListDnsClient" role="presentation"><a href="#mainPanelTabPaneDnsClient" aria-controls="mainPanelTabPaneDnsClient" role="tab" data-toggle="tab">DNS Client</a></li>
  87. <li id="mainPanelTabListSettings" role="presentation"><a href="#mainPanelTabPaneSettings" aria-controls="mainPanelTabPaneSettings" role="tab" data-toggle="tab" onclick="loadDnsSettings();">Settings</a></li>
  88. <li id="mainPanelTabListDhcp" role="presentation"><a href="#mainPanelTabPaneDhcp" aria-controls="mainPanelTabPaneDhcp" role="tab" data-toggle="tab" onclick="refreshDhcpTab();">DHCP</a></li>
  89. <li id="mainPanelTabListLogs" role="presentation"><a href="#mainPanelTabPaneLogs" aria-controls="mainPanelTabPaneLogs" role="tab" data-toggle="tab" onclick="refreshLogFilesList();">Logs</a></li>
  90. <li id="mainPanelTabListAbout" role="presentation"><a href="#mainPanelTabPaneAbout" aria-controls="mainPanelTabPaneAbout" role="tab" data-toggle="tab">About</a></li>
  91. </ul>
  92. <div class="tab-content">
  93. <div id="mainPanelTabPaneDashboard" role="tabpanel" class="tab-pane active" style="padding: 10px 0 0 0;">
  94. <div class="btn-group" data-toggle="buttons">
  95. <label class="btn btn-default active">
  96. <input type="radio" name="rdStatType" value="lastHour" autocomplete="off" checked> Last Hour
  97. </label>
  98. <label class="btn btn-default">
  99. <input type="radio" name="rdStatType" value="lastDay" autocomplete="off"> Last Day
  100. </label>
  101. <label class="btn btn-default">
  102. <input type="radio" name="rdStatType" value="lastWeek" autocomplete="off"> Last Week
  103. </label>
  104. <label class="btn btn-default">
  105. <input type="radio" name="rdStatType" value="lastMonth" autocomplete="off"> Last Month
  106. </label>
  107. <label class="btn btn-default">
  108. <input type="radio" name="rdStatType" value="lastYear" autocomplete="off"> Last Year
  109. </label>
  110. </div>
  111. <div id="divDashboardLoader" style="margin-top: 10px; height: 400px;"></div>
  112. <div id="divDashboard" style="display: none;">
  113. <div class="stats-panel">
  114. <div class="stats-item total-queries">
  115. <div class="number" id="divDashboardStatsTotalQueries">100</div>
  116. <div class="percentage">100%</div>
  117. <div class="title">Total Queries</div>
  118. </div>
  119. <div class="stats-item no-error">
  120. <div class="number" id="divDashboardStatsTotalNoError">70</div>
  121. <div class="percentage" id="divDashboardStatsTotalNoErrorPercentage">0%</div>
  122. <div class="title">No Error</div>
  123. </div>
  124. <div class="stats-item server-failure">
  125. <div class="number" id="divDashboardStatsTotalServerFailure">5</div>
  126. <div class="percentage" id="divDashboardStatsTotalServerFailurePercentage">0%</div>
  127. <div class="title">Server Failure</div>
  128. </div>
  129. <div class="stats-item name-error">
  130. <div class="number" id="divDashboardStatsTotalNameError">5</div>
  131. <div class="percentage" id="divDashboardStatsTotalNameErrorPercentage">0%</div>
  132. <div class="title">Name Error</div>
  133. </div>
  134. <div class="stats-item refused">
  135. <div class="number" id="divDashboardStatsTotalRefused">10</div>
  136. <div class="percentage" id="divDashboardStatsTotalRefusedPercentage">0%</div>
  137. <div class="title">Refused</div>
  138. </div>
  139. <div class="stats-item auth-hit">
  140. <div class="number" id="divDashboardStatsTotalAuthHit">10</div>
  141. <div class="percentage" id="divDashboardStatsTotalAuthHitPercentage">0%</div>
  142. <div class="title">Authoritative</div>
  143. </div>
  144. <div class="stats-item recursions">
  145. <div class="number" id="divDashboardStatsTotalRecursions">10</div>
  146. <div class="percentage" id="divDashboardStatsTotalRecursionsPercentage">0%</div>
  147. <div class="title">Recursive</div>
  148. </div>
  149. <div class="stats-item cache-hit">
  150. <div class="number" id="divDashboardStatsTotalCacheHit">10</div>
  151. <div class="percentage" id="divDashboardStatsTotalCacheHitPercentage">0%</div>
  152. <div class="title">Cached</div>
  153. </div>
  154. <div class="stats-item blocked">
  155. <div class="number" id="divDashboardStatsTotalBlocked">10</div>
  156. <div class="percentage" id="divDashboardStatsTotalBlockedPercentage">0%</div>
  157. <div class="title">Blocked</div>
  158. </div>
  159. <div class="stats-item clients">
  160. <div class="number" id="divDashboardStatsTotalClients">10</div>
  161. <div class="percentage">&nbsp;</div>
  162. <div class="title">Clients</div>
  163. </div>
  164. </div>
  165. <div>
  166. <canvas id="canvasDashboardMain" style="margin: 10px 0 10px 0;"></canvas>
  167. </div>
  168. <div style="margin-top: 15px;">
  169. <div style="float: left; width: 50%; padding-right: 7px;">
  170. <div id="divPieCharts" class="panel panel-default" style="margin-bottom: 0px;">
  171. <div class="panel-body">
  172. <div class="zone-stats-panel">
  173. <div class="stats-item allowed-zones">
  174. <div class="number" id="divDashboardStatsAllowedZones">10</div>
  175. <div class="title">Zones Allowed</div>
  176. </div>
  177. <div class="stats-item blocked-zones">
  178. <div class="number" id="divDashboardStatsBlockedZones">10</div>
  179. <div class="title">Zones Blocked</div>
  180. </div>
  181. </div>
  182. <div style="margin-bottom: 20px;">
  183. <canvas id="canvasDashboardPie"></canvas>
  184. </div>
  185. <div>
  186. <canvas id="canvasDashboardPie2"></canvas>
  187. </div>
  188. </div>
  189. </div>
  190. </div>
  191. <div style="float: right; width: 50%; padding-left: 7px;">
  192. <div id="divTopClients" class="panel panel-default" style="margin-bottom: 0px;">
  193. <div class="panel-heading">Top Clients</div>
  194. <table class="table table-hover">
  195. <thead>
  196. <tr>
  197. <th>Client</th>
  198. <th>Queries</th>
  199. </tr>
  200. </thead>
  201. <tbody id="tableTopClients">
  202. <tr>
  203. <td>127.0.0.1</td>
  204. <td>100</td>
  205. </tr>
  206. <tr>
  207. <td>::1</td>
  208. <td>10</td>
  209. </tr>
  210. </tbody>
  211. </table>
  212. </div>
  213. </div>
  214. <div style="clear: both;"></div>
  215. </div>
  216. <div style="margin-top: 15px;">
  217. <div style="float: left; width: 50%; padding-right: 7px;">
  218. <div class="panel panel-default" style="margin-bottom: 0px;">
  219. <div class="panel-heading">Top Domains</div>
  220. <table class="table table-hover">
  221. <thead>
  222. <tr>
  223. <th>Domain</th>
  224. <th>Hits</th>
  225. </tr>
  226. </thead>
  227. <tbody id="tableTopDomains">
  228. <tr>
  229. <td>example.com</td>
  230. <td>10</td>
  231. </tr>
  232. </tbody>
  233. </table>
  234. </div>
  235. </div>
  236. <div style="float: right; width: 50%; padding-left: 7px;">
  237. <div class="panel panel-default" style="margin-bottom: 0px;">
  238. <div class="panel-heading">Top Blocked Domains</div>
  239. <table class="table table-hover">
  240. <thead>
  241. <tr>
  242. <th>Domain</th>
  243. <th>Hits</th>
  244. </tr>
  245. </thead>
  246. <tbody id="tableTopBlockedDomains">
  247. <tr>
  248. <td>blocked.example.com</td>
  249. <td>10</td>
  250. </tr>
  251. </tbody>
  252. </table>
  253. </div>
  254. </div>
  255. <div style="clear: both;"></div>
  256. </div>
  257. </div>
  258. </div>
  259. <div id="mainPanelTabPaneZones" role="tabpanel" class="tab-pane" style="padding: 10px 0 0 0;">
  260. <div id="divViewZonesLoader" style=" display: none; margin-top: 10px; height: 400px;"></div>
  261. <div id="divViewZones" style="margin-top: 10px;">
  262. <div>
  263. <div style="float: right;">
  264. <button type="button" class="btn btn-primary" style="padding: 2px 0px; width: 100px;" onclick="showAddZoneModal();">Add Zone</button>
  265. </div>
  266. <div style="clear: both;"></div>
  267. </div>
  268. <table id="tableZones" class="table table-hover">
  269. <thead>
  270. <tr>
  271. <th>Zone</th>
  272. <th>Type</th>
  273. <th>Status</th>
  274. <th>Expiry</th>
  275. <th></th>
  276. </tr>
  277. </thead>
  278. <tbody id="tableZonesBody">
  279. <tr>
  280. <td>localhost</td>
  281. <td>Primary</td>
  282. <td>Expired</td>
  283. <td>Date</td>
  284. <td>Edit Disable Delete</td>
  285. </tr>
  286. </tbody>
  287. <tfoot id="tableZonesFooter">
  288. <tr><td colspan="5"><b>Total Records: 1</b></td></tr>
  289. </tfoot>
  290. </table>
  291. </div>
  292. <div id="divEditZone" style="display: none;">
  293. <ul class="pager" style="margin: 0px;">
  294. <li class="previous"><a href="#" onclick="refreshZones(); return false;"><span aria-hidden="true">&larr;</span> Back</a></li>
  295. </ul>
  296. <div style="padding: 10px 0px;">
  297. <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>
  298. <div style="float: left;">
  299. <span id="titleEditZoneType" class="label label-default">Primary</span>
  300. <span id="tdStatusEditZone" data-id="EditZone" class="label label-success">Enabled</span>
  301. <span id="titleEditZoneExpiry" style="font-size: 10px; font-weight: bold;">Expiry: 01 Jan 2020 00:00:00</span>
  302. </div>
  303. <div style="float: right; padding: 2px 0px;">
  304. <button id="btnEditZoneAddRecord" type="button" class="btn btn-primary" style="padding: 2px 0px; width: 100px;" onclick="showAddRecordModal();">Add Record</button>
  305. <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>
  306. <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>
  307. <button id="btnEditZoneDeleteZone" type="button" class="btn btn-danger" style="padding: 2px 0px; width: 100px;" onclick="deleteZone(this, $('#titleEditZone').text(), true);">Delete Zone</button>
  308. </div>
  309. <div style="clear: both;"></div>
  310. </div>
  311. <table id="tableEditZone" class="table table-hover">
  312. <thead>
  313. <tr>
  314. <th onclick="sortTable('tableEditZoneBody', 0);">Name</th>
  315. <th onclick="sortTable('tableEditZoneBody', 1);">Type</th>
  316. <th onclick="sortTable('tableEditZoneBody', 2);">TTL</th>
  317. <th onclick="sortTable('tableEditZoneBody', 3);">Data</th>
  318. <th></th>
  319. </tr>
  320. </thead>
  321. <tbody id="tableEditZoneBody">
  322. <tr>
  323. <td>@</td>
  324. <td>A</td>
  325. <td>3600</td>
  326. <td>127.0.0.1</td>
  327. <td>Edit Disable Delete</td>
  328. </tr>
  329. </tbody>
  330. <tfoot id="tableEditZoneFooter">
  331. <tr><td><b>Total Records: 1</b></td></tr>
  332. </tfoot>
  333. </table>
  334. </div>
  335. </div>
  336. <div id="mainPanelTabPaneCachedZones" role="tabpanel" class="tab-pane" style="padding: 10px 0 0 0;">
  337. <div class="well well-sm zone-list-pane">
  338. <form class="form-inline">
  339. <div class="form-group" style="width: 100%">
  340. <input type="text" class="form-control" style="width: inherit;" id="txtCacheZone" placeholder="example.com">
  341. </div>
  342. <div class="form-group">
  343. <button id="btnBrowseCacheZone" type="submit" class="btn btn-primary" data-loading-text="Browse" onclick="return refreshCachedZonesList($('#txtCacheZone').val());">Browse</button>
  344. </div>
  345. </form>
  346. <div id="lstCachedZones" class="zones">
  347. <div class="zone"><a href="#" onclick="return refreshCachedZonesList('technitium.com');">technitium.com</a></div>
  348. </div>
  349. </div>
  350. <div id="divCachedZoneViewer" class="zone-viewer-pane">
  351. <div class="panel panel-default">
  352. <div class="panel-heading" style="height: 36px; padding: 4px 6px;">
  353. <div id="txtCachedZoneViewerTitle" style="float: left; padding: 4px;">technitium.com</div>
  354. <div style="float: right;">
  355. <button id="btnDeleteCachedZone" type="button" class="btn btn-danger" data-loading-text="Delete" onclick="return deleteCachedZone();" style="font-size: 12px; padding: 4px 6px;">Delete</button>
  356. </div>
  357. </div>
  358. <div class="panel-body">
  359. <pre id="preCachedZoneViewerBody">
  360. </pre>
  361. </div>
  362. </div>
  363. </div>
  364. </div>
  365. <div id="mainPanelTabPaneAllowedZones" role="tabpanel" class="tab-pane" style="padding: 10px 0 0 0;">
  366. <div class="well well-sm zone-list-pane">
  367. <form class="form-inline">
  368. <div class="form-group" style="width: 100%">
  369. <input type="text" class="form-control" style="width: inherit;" id="txtAllowZone" placeholder="example.com">
  370. </div>
  371. <div class="form-group">
  372. <button id="btnAllowZone" type="submit" class="btn btn-primary" data-loading-text="Allow" onclick="return allowZone();">Allow</button>
  373. <button id="btnBrowseAllowZone" type="button" class="btn btn-default" data-loading-text="Browse" onclick="return refreshAllowedZonesList($('#txtAllowZone').val());">Browse</button>
  374. </div>
  375. </form>
  376. <div id="lstAllowedZones" class="zones">
  377. <div class="zone"><a href="#" onclick="return refreshAllowedZonesList('technitium.com');">technitium.com</a></div>
  378. </div>
  379. </div>
  380. <div id="divAllowedZoneViewer" class="zone-viewer-pane">
  381. <div class="panel panel-default">
  382. <div class="panel-heading" style="height: 36px; padding: 4px 6px;">
  383. <div id="txtAllowedZoneViewerTitle" style="float: left; padding: 4px;">technitium.com</div>
  384. <div style="float: right;">
  385. <button id="btnImportAllowedZone" type="button" class="btn btn-default" data-loading-text="Import" onclick="return resetImportAllowedZonesModal();" data-toggle="modal" data-target="#modalImportAllowedZones" style="font-size: 12px; padding: 4px 6px;">Import</button>
  386. <button id="btnExportAllowedZone" type="button" class="btn btn-default" data-loading-text="Export" onclick="return exportAllowedZones();" style="font-size: 12px; padding: 4px 6px;">Export</button>
  387. <button id="btnDeleteAllowedZone" type="button" class="btn btn-danger" data-loading-text="Delete" onclick="return deleteAllowedZone();" style="font-size: 12px; padding: 4px 6px;">Delete</button>
  388. </div>
  389. </div>
  390. <div class="panel-body">
  391. <pre id="preAllowedZoneViewerBody">
  392. </pre>
  393. </div>
  394. </div>
  395. </div>
  396. </div>
  397. <div id="mainPanelTabPaneBlockedZones" role="tabpanel" class="tab-pane" style="padding: 10px 0 0 0;">
  398. <div class="well well-sm zone-list-pane">
  399. <form class="form-inline">
  400. <div class="form-group" style="width: 100%">
  401. <input type="text" class="form-control" style="width: inherit;" id="txtBlockZone" placeholder="example.com">
  402. </div>
  403. <div class="form-group">
  404. <button id="btnBlockZone" type="submit" class="btn btn-primary" data-loading-text="Block" onclick="return blockZone();">Block</button>
  405. <button id="btnBrowseBlockZone" type="button" class="btn btn-default" data-loading-text="Browse" onclick="return refreshBlockedZonesList($('#txtBlockZone').val());">Browse</button>
  406. </div>
  407. </form>
  408. <div id="lstBlockedZones" class="zones">
  409. <div class="zone"><a href="#" onclick="return refreshBlockedZonesList('technitium.com');">technitium.com</a></div>
  410. </div>
  411. </div>
  412. <div id="divBlockedZoneViewer" class="zone-viewer-pane">
  413. <div class="panel panel-default">
  414. <div class="panel-heading" style="height: 36px; padding: 4px 6px;">
  415. <div id="txtBlockedZoneViewerTitle" style="float: left; padding: 4px;">technitium.com</div>
  416. <div style="float: right;">
  417. <button id="btnImportBlockedZone" type="button" class="btn btn-default" data-loading-text="Import" onclick="return resetImportBlockedZonesModal();" data-toggle="modal" data-target="#modalImportBlockedZones" style="font-size: 12px; padding: 4px 6px;">Import</button>
  418. <button id="btnExportBlockedZone" type="button" class="btn btn-default" data-loading-text="Export" onclick="return exportBlockedZones();" style="font-size: 12px; padding: 4px 6px;">Export</button>
  419. <button id="btnDeleteBlockedZone" type="button" class="btn btn-danger" data-loading-text="Delete" onclick="return deleteBlockedZone();" style="font-size: 12px; padding: 4px 6px;">Delete</button>
  420. </div>
  421. </div>
  422. <div class="panel-body">
  423. <pre id="preBlockedZoneViewerBody">
  424. </pre>
  425. </div>
  426. </div>
  427. </div>
  428. </div>
  429. <div id="mainPanelTabPaneDnsClient" role="tabpanel" class="tab-pane" style="padding: 10px 0 0 0;">
  430. <form class="form-inline well" style="padding-bottom: 6px;">
  431. <div class="form-group">
  432. <label for="txtDnsClientNameServer">Server</label>
  433. <div class="input-group dropdown">
  434. <input type="text" class="form-control dropdown-toggle" style="min-width: 250px;" id="txtDnsClientNameServer" value="This Server {this-server}">
  435. <ul class="dropdown-menu" id="optDnsClientNameServers">
  436. <li><a href="#">This Server {this-server}</a></li>
  437. <li><a href="#">Recursive Query {recursive-resolver}</a></li>
  438. <li><a href="#">Cloudflare {1.1.1.1}</a></li>
  439. <li><a href="#">Cloudflare {1.0.0.1}</a></li>
  440. <li><a href="#">Cloudflare {[2606:4700:4700::1111]}</a></li>
  441. <li><a href="#">Cloudflare {[2606:4700:4700::1001]}</a></li>
  442. <li><a href="#">Cloudflare TLS {cloudflare-dns.com (1.1.1.1:853)}</a></li>
  443. <li><a href="#">Cloudflare TLS {cloudflare-dns.com (1.0.0.1:853)}</a></li>
  444. <li><a href="#">Cloudflare TLS {cloudflare-dns.com ([2606:4700:4700::1111]:853)}</a></li>
  445. <li><a href="#">Cloudflare TLS {cloudflare-dns.com ([2606:4700:4700::1001]:853)}</a></li>
  446. <li><a href="#">Cloudflare HTTPS {https://cloudflare-dns.com/dns-query}</a></li>
  447. <li><a href="#">Cloudflare HTTPS-JSON {https://cloudflare-dns.com/dns-query}</a></li>
  448. <li><a href="#">Google {8.8.8.8}</a></li>
  449. <li><a href="#">Google {8.8.4.4}</a></li>
  450. <li><a href="#">Google {[2001:4860:4860::8888]}</a></li>
  451. <li><a href="#">Google {[2001:4860:4860::8844]}</a></li>
  452. <li><a href="#">Google TLS {dns.google (8.8.8.8:853)}</a></li>
  453. <li><a href="#">Google TLS {dns.google (8.8.4.4:853)}</a></li>
  454. <li><a href="#">Google TLS {dns.google ([2001:4860:4860::8888]:853)}</a></li>
  455. <li><a href="#">Google TLS {dns.google ([2001:4860:4860::8844]:853)}</a></li>
  456. <li><a href="#">Google HTTPS {https://dns.google/dns-query}</a></li>
  457. <li><a href="#">Google HTTPS-JSON {https://dns.google/resolve}</a></li>
  458. <li><a href="#">Quad9 Secure {9.9.9.9}</a></li>
  459. <li><a href="#">Quad9 Secure {[2620:fe::fe]}</a></li>
  460. <li><a href="#">Quad9 Secure TLS {dns.quad9.net (9.9.9.9:853)}</a></li>
  461. <li><a href="#">Quad9 Secure TLS {dns.quad9.net ([2620:fe::fe]:853)}</a></li>
  462. <li><a href="#">Quad9 Secure HTTPS {https://dns.quad9.net/dns-query}</a></li>
  463. <li><a href="#">Quad9 Unsecure {9.9.9.10}</a></li>
  464. <li><a href="#">Quad9 Unsecure {[2620:fe::10]}</a></li>
  465. <li><a href="#">Quad9 Unsecure TLS {dns10.quad9.net (9.9.9.10:853)}</a></li>
  466. <li><a href="#">Quad9 Unsecure TLS {dns10.quad9.net ([2620:fe::10]:853)}</a></li>
  467. <li><a href="#">Quad9 Unsecure HTTPS {https://dns10.quad9.net/dns-query}</a></li>
  468. <li><a href="#">OpenDNS {208.67.222.222}</a></li>
  469. <li><a href="#">OpenDNS {208.67.220.220}</a></li>
  470. <li><a href="#">OpenDNS {[2620:0:ccc::2]}</a></li>
  471. <li><a href="#">OpenDNS {[2620:0:ccd::2]}</a></li>
  472. <li><a href="#">OpenDNS FamilyShield {208.67.222.123}</a></li>
  473. <li><a href="#">OpenDNS FamilyShield {208.67.220.123}</a></li>
  474. <li><a href="#">Level3 {4.2.2.1}</a></li>
  475. <li><a href="#">Level3 {4.2.2.2}</a></li>
  476. <li><a href="#">Ultra {156.154.70.1}</a></li>
  477. <li><a href="#">Ultra {156.154.71.1}</a></li>
  478. <li><a href="#">Dyn {216.146.35.35}</a></li>
  479. <li><a href="#">Dyn {216.146.36.36}</a></li>
  480. <li><a href="#">a.root-servers.net</a></li>
  481. <li><a href="#">b.root-servers.net</a></li>
  482. <li><a href="#">c.root-servers.net</a></li>
  483. <li><a href="#">d.root-servers.net</a></li>
  484. <li><a href="#">e.root-servers.net</a></li>
  485. <li><a href="#">f.root-servers.net</a></li>
  486. <li><a href="#">g.root-servers.net</a></li>
  487. <li><a href="#">h.root-servers.net</a></li>
  488. <li><a href="#">i.root-servers.net</a></li>
  489. <li><a href="#">j.root-servers.net</a></li>
  490. <li><a href="#">k.root-servers.net</a></li>
  491. <li><a href="#">l.root-servers.net</a></li>
  492. <li><a href="#">m.root-servers.net</a></li>
  493. </ul>
  494. <span role="button" class="input-group-addon dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="caret"></span></span>
  495. </div>
  496. </div>
  497. <div class="form-group">
  498. <label for="txtDnsClientDomain">Domain</label>
  499. <input type="text" class="form-control" style="min-width: 280px;" id="txtDnsClientDomain" placeholder="example.com">
  500. </div>
  501. <div class="form-group">
  502. <label for="optDnsClientType">Type</label>
  503. <select class="form-control" id="optDnsClientType">
  504. <option>A</option>
  505. <option>NS</option>
  506. <option>CNAME</option>
  507. <option>SOA</option>
  508. <option>PTR</option>
  509. <option>MX</option>
  510. <option>TXT</option>
  511. <option>AAAA</option>
  512. <option>SRV</option>
  513. <option>CAA</option>
  514. <option>ANY</option>
  515. <option>AXFR</option>
  516. <option>ANAME</option>
  517. <option>FWD</option>
  518. </select>
  519. </div>
  520. <div class="form-group">
  521. <label for="optDnsClientProtocol">Protocol</label>
  522. <select class="form-control" id="optDnsClientProtocol">
  523. <option>UDP</option>
  524. <option>TCP</option>
  525. <option>TLS</option>
  526. <option value="Https">HTTPS</option>
  527. <option value="HttpsJson">HTTPS (JSON)</option>
  528. </select>
  529. </div>
  530. <div class="form-group">
  531. <button type="submit" class="btn btn-primary" id="btnDnsClientResolve" data-loading-text="Resolving..." onclick="return resolveQuery();" style="margin-right: 6px;">Resolve</button>
  532. <button type="button" class="btn btn-warning" id="btnDnsClientImport" data-loading-text="Importing..." onclick="return resolveQuery(true);">Import</button>
  533. </div>
  534. </form>
  535. <div id="divDnsClientLoader" style="margin-top: 20px; height: 300px;"></div>
  536. <pre id="preDnsClientOutput" style="display: none;"></pre>
  537. </div>
  538. <div id="mainPanelTabPaneSettings" role="tabpanel" class="tab-pane">
  539. <div id="divDnsSettingsLoader" style="margin-top: 10px; height: 400px;"></div>
  540. <div id="divDnsSettings" style="display: none;">
  541. <form style="margin-top: 10px;" onsubmit="return false;">
  542. <div class="well well-sm form-horizontal">
  543. <div class="form-group">
  544. <label for="txtServerDomain" class="col-sm-3 control-label">DNS Server Domain</label>
  545. <div class="col-sm-6">
  546. <input type="text" class="form-control" id="txtServerDomain" placeholder="Domain Name">
  547. </div>
  548. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">The primary domain name used by this DNS Server to identify itself.</div>
  549. </div>
  550. <div class="form-group">
  551. <label for="txtdnsServerLocalEndPoints" class="col-sm-3 control-label">DNS Server Local End Points</label>
  552. <div class="col-sm-6">
  553. <textarea id="txtdnsServerLocalEndPoints" class="form-control" rows="3"></textarea>
  554. </div>
  555. <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>
  556. </div>
  557. <div>To apply DNS Server local end point changes, you will need to manually restart the main service.</div>
  558. </div>
  559. <div class="well well-sm form-horizontal">
  560. <div class="form-group">
  561. <label for="txtWebServicePort" class="col-sm-3 control-label">Web Service Port</label>
  562. <div class="col-sm-6">
  563. <input type="number" class="form-control" id="txtWebServicePort" placeholder="Web Service Port" style="width: 100px;">
  564. </div>
  565. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">Specify the TCP port number for this web console.</div>
  566. </div>
  567. <div>To apply web service port changes, you will need to manually restart the main service.</div>
  568. </div>
  569. <div class="well well-sm form-horizontal">
  570. <div class="form-group">
  571. <label class="col-sm-3 control-label">Optional DNS Server Protocols</label>
  572. <div class="col-sm-8">
  573. <div class="checkbox">
  574. <label>
  575. <input id="chkEnableDnsOverHttp" type="checkbox"> Enable DNS-over-HTTP
  576. </label>
  577. </div>
  578. <div style="padding-top: 5px;">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>
  579. <div class="checkbox">
  580. <label>
  581. <input id="chkEnableDnsOverTls" type="checkbox"> Enable DNS-over-TLS
  582. </label>
  583. </div>
  584. <div style="padding-top: 5px;">Enable this option to accept DNS-over-TLS requests.</div>
  585. <div class="checkbox">
  586. <label>
  587. <input id="chkEnableDnsOverHttps" type="checkbox"> Enable DNS-over-HTTPS
  588. </label>
  589. </div>
  590. <div style="padding-top: 5px;">Enable this option to accept DNS-over-HTTPS requests for both wire and json response formats.</div>
  591. </div>
  592. </div>
  593. <div class="form-group">
  594. <label for="txtTlsCertificatePath" class="col-sm-3 control-label">TLS Certificate File Path</label>
  595. <div class="col-sm-6">
  596. <input type="text" class="form-control" id="txtTlsCertificatePath" placeholder="TLS Certificate File Path On Server">
  597. </div>
  598. <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>
  599. </div>
  600. <div class="form-group">
  601. <label for="txtTlsCertificatePassword" class="col-sm-3 control-label">TLS Certificate Password</label>
  602. <div class="col-sm-6">
  603. <input type="password" class="form-control" id="txtTlsCertificatePassword" placeholder="TLS Certificate Password">
  604. </div>
  605. <div class="col-sm-offset-3 col-sm-8" style="padding-top: 5px;">Enter the certificate (.pfx) password, if any.</div>
  606. </div>
  607. <div>
  608. <p>NOTE! 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>
  609. <p>To enable or disable these protocols, you will need to manually restart the main service. These optional protocols will be enabled only when a TLS certificate is configured.</p>
  610. <p>For DNS-over-HTTP, use <i>http://<span id="lblDoHHost">localhost:8053</span>/dns-query</i> with a TLS terminating reverse proxy like nginx. For DNS-over-TLS, use <i>tls-certificate-domain:853</i> and for DNS-over-HTTPS use <i>https://tls-certificate-domain/dns-query</i> to configure supported DNS clients.</p>
  611. <p>Use the following openssl command to convert your TLS certificate that is in PEM format to PKCS #12 certificate (.pfx) format:</p>
  612. <pre style="margin-bottom: 0px;">openssl pkcs12 -export -out "example.com.pfx" -inkey "private.key" -in "certificate.crt" -certfile "ca_bundle.crt"</pre>
  613. </div>
  614. </div>
  615. <div class="well well-sm form-horizontal">
  616. <div class="form-group">
  617. <label class="col-sm-3 control-label">IPv6 Support</label>
  618. <div class="col-sm-8">
  619. <div class="checkbox">
  620. <label>
  621. <input id="chkPreferIPv6" type="checkbox"> Prefer IPv6
  622. </label>
  623. </div>
  624. <div style="padding-top: 5px;">DNS Server will use IPv6 for querying whenever possible with this option enabled.</div>
  625. </div>
  626. </div>
  627. <div>Use this option only if this DNS server has native IPv6 Internet access otherwise it will affect performance.</div>
  628. </div>
  629. <div class="well well-sm form-horizontal">
  630. <div class="form-group">
  631. <label class="col-sm-3 control-label">Logging</label>
  632. <div class="col-sm-8">
  633. <div class="checkbox">
  634. <label>
  635. <input id="chkLogQueries" type="checkbox"> Log All Queries
  636. </label>
  637. </div>
  638. <div style="padding-top: 5px;">Enable this option to log every query received by this DNS Server and the corresponding response answers into the log file.</div>
  639. </div>
  640. </div>
  641. <div>Enabling query logging will significantly increase the log file size. Error and audit logs are enabled by default.</div>
  642. </div>
  643. <div class="well well-sm form-horizontal">
  644. <div class="form-group">
  645. <label class="col-sm-3 control-label">Recursive Resolver</label>
  646. <div class="col-sm-8">
  647. <div class="checkbox">
  648. <label>
  649. <input id="chkAllowRecursion" type="checkbox"> Allow Recursion
  650. </label>
  651. </div>
  652. <div style="padding-top: 5px;">Enable recursion to allow this DNS Server to resolve any domain name.</div>
  653. <div class="checkbox">
  654. <label>
  655. <input id="chkAllowRecursionOnlyForPrivateNetworks" type="checkbox"> Allow Recursion Only For Private Networks
  656. </label>
  657. </div>
  658. <div style="padding-top: 5px;">Enable this option if you want to support recursion only on private networks. Any recursive request from public network will be refused.</div>
  659. </div>
  660. </div>
  661. <div>Disable recursion if you wish this server to act only as authoritative name server for the configured zones.</div>
  662. </div>
  663. <div class="well well-sm form-horizontal">
  664. <div class="form-group">
  665. <label for="txtCachePrefetchEligibility" class="col-sm-3 control-label">Prefetch Eligibility</label>
  666. <div class="col-sm-6">
  667. <input type="number" class="form-control" id="txtCachePrefetchEligibility" placeholder="eligibility" style="width: 100px; display: inline;">
  668. <span>(recommended 2)</span>
  669. </div>
  670. <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>
  671. </div>
  672. <div class="form-group">
  673. <label for="txtCachePrefetchTrigger" class="col-sm-3 control-label">Prefetch Trigger</label>
  674. <div class="col-sm-8">
  675. <input type="number" class="form-control" id="txtCachePrefetchTrigger" placeholder="trigger" style="width: 100px; display: inline;">
  676. <span>(recommended 9; set 0 to disable prefetching &amp; auto prefetching)</span>
  677. </div>
  678. <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>
  679. </div>
  680. <div class="form-group">
  681. <label for="txtCachePrefetchSampleIntervalInMinutes" class="col-sm-3 control-label">Auto Prefetch Sampling</label>
  682. <div class="col-sm-6">
  683. <input type="number" class="form-control" id="txtCachePrefetchSampleIntervalInMinutes" placeholder="interval" style="width: 100px; display: inline;">
  684. <span>minutes (valid range 1-60; default 5)</span>
  685. </div>
  686. <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>
  687. </div>
  688. <div class="form-group">
  689. <label for="txtCachePrefetchSampleEligibilityHitsPerHour" class="col-sm-3 control-label">Auto Prefetch Eligibility</label>
  690. <div class="col-sm-6">
  691. <input type="number" class="form-control" id="txtCachePrefetchSampleEligibilityHitsPerHour" placeholder="hits" style="width: 100px; display: inline;">
  692. <span>hits/hour (default 30)</span>
  693. </div>
  694. <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>
  695. </div>
  696. <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>
  697. </div>
  698. <div class="well well-sm form-horizontal">
  699. <div class="form-group">
  700. <label for="txtBlockListUrls" class="col-sm-3 control-label">Block List URLs</label>
  701. <div class="col-sm-6">
  702. <textarea id="txtBlockListUrls" class="form-control" rows="7"></textarea>
  703. <label for="optQuickBlockList" class="control-label">Quick Add</label>
  704. <select id="optQuickBlockList" style="width: 100%;">
  705. <option value="blank" selected></option>
  706. <option value="none">None</option>
  707. <option value="default">Default</option>
  708. <option id="optCustomLocalBlockList" value="http://localhost:5380/blocklist.txt">Custom Local Block List (http://localhost:5380/blocklist.txt)</option>
  709. <option value="https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts">Steven Black [adware + malware] (https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts)</option>
  710. <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>
  711. <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>
  712. <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>
  713. <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>
  714. <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>
  715. <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>
  716. <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>
  717. <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>
  718. <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>
  719. <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>
  720. <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>
  721. <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>
  722. <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>
  723. <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>
  724. <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>
  725. <option value="https://mirror1.malwaredomains.com/files/justdomains">Malware Domains (https://mirror1.malwaredomains.com/files/justdomains)</option>
  726. <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>
  727. <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>
  728. <option value="https://dbl.oisd.nl/">OISD Block List by sjhgvr (https://dbl.oisd.nl/)</option>
  729. </select>
  730. <div style="margin-top: 10px;">Enter block list URL one below another in the above text field or use the Quick Add list to add known block list URLs.</div>
  731. </div>
  732. </div>
  733. <div style="margin-top: 10px;">DNS Server will use the data returned by the block list URLs to update the blocked zone automatically every 24 hours. The expected file format is standard <i>hosts</i> file format or plain text file containing list of domains to block.</div>
  734. <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>
  735. </div>
  736. <div class="well well-sm form-horizontal">
  737. <div class="form-group">
  738. <label class="col-sm-3 control-label">Network Proxy</label>
  739. <div class="col-sm-6">
  740. <div class="radio">
  741. <label>
  742. <input type="radio" name="rdProxyType" id="rdProxyTypeNone" value="None" checked>
  743. No Proxy (default)
  744. </label>
  745. </div>
  746. <div class="radio">
  747. <label>
  748. <input type="radio" name="rdProxyType" id="rdProxyTypeHttp" value="Http">
  749. HTTP Proxy
  750. </label>
  751. </div>
  752. <div class="radio">
  753. <label>
  754. <input type="radio" name="rdProxyType" id="rdProxyTypeSocks5" value="Socks5">
  755. SOCKS5 Proxy
  756. </label>
  757. </div>
  758. </div>
  759. </div>
  760. <div class="form-group">
  761. <label for="txtProxyAddress" class="col-sm-3 control-label">Proxy Address</label>
  762. <div class="col-sm-6">
  763. <input type="text" class="form-control" id="txtProxyAddress" placeholder="Proxy Server Address">
  764. </div>
  765. </div>
  766. <div class="form-group">
  767. <label for="txtProxyPort" class="col-sm-3 control-label">Proxy Port</label>
  768. <div class="col-sm-6">
  769. <input type="number" class="form-control" id="txtProxyPort" placeholder="Proxy Server Port" style="width: 170px;">
  770. </div>
  771. </div>
  772. <div class="form-group">
  773. <label for="txtProxyUsername" class="col-sm-3 control-label">Username</label>
  774. <div class="col-sm-6">
  775. <input type="text" class="form-control" id="txtProxyUsername" placeholder="Proxy Server Username">
  776. </div>
  777. </div>
  778. <div class="form-group">
  779. <label for="txtProxyPassword" class="col-sm-3 control-label">Password</label>
  780. <div class="col-sm-6">
  781. <input type="password" class="form-control" id="txtProxyPassword" placeholder="Proxy Server Password">
  782. </div>
  783. </div>
  784. <div class="form-group">
  785. <label for="txtProxyBypassList" class="col-sm-3 control-label">Proxy Bypass List</label>
  786. <div class="col-sm-6">
  787. <textarea id="txtProxyBypassList" class="form-control" rows="5"></textarea>
  788. </div>
  789. <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>
  790. </div>
  791. <div style="margin-top: 10px;">When proxy server is configured, DNS Server will use it for all outbound network requests.</div>
  792. </div>
  793. <div class="well well-sm form-horizontal">
  794. <div class="form-group">
  795. <label for="txtForwarders" class="col-sm-3 control-label">Forwarders</label>
  796. <div class="col-sm-6">
  797. <textarea id="txtForwarders" class="form-control" rows="3"></textarea>
  798. <label for="optQuickForwarders" class="control-label">Quick Select</label>
  799. <select id="optQuickForwarders" style="width: 100%;">
  800. <option value="blank" selected></option>
  801. <option value="none">None</option>
  802. <option value="cloudflare-udp">Cloudflare (DNS-over-UDP)</option>
  803. <option value="cloudflare-udp-ipv6">Cloudflare (DNS-over-UDP IPv6)</option>
  804. <option value="cloudflare-tcp">Cloudflare (DNS-over-TCP)</option>
  805. <option value="cloudflare-tcp-ipv6">Cloudflare (DNS-over-TCP IPv6)</option>
  806. <option value="cloudflare-tls">Cloudflare (DNS-over-TLS)</option>
  807. <option value="cloudflare-tls-ipv6">Cloudflare (DNS-over-TLS IPv6)</option>
  808. <option value="cloudflare-https">Cloudflare (DNS-over-HTTPS)</option>
  809. <option value="cloudflare-json">Cloudflare (DNS-over-HTTPS-JSON)</option>
  810. <option value="cloudflare-tor">Cloudflare (DNS-over-TOR!)</option>
  811. <option value="google-udp">Google (DNS-over-UDP)</option>
  812. <option value="google-udp-ipv6">Google (DNS-over-UDP IPv6)</option>
  813. <option value="google-tcp">Google (DNS-over-TCP)</option>
  814. <option value="google-tcp-ipv6">Google (DNS-over-TCP IPv6)</option>
  815. <option value="google-tls">Google (DNS-over-TLS)</option>
  816. <option value="google-tls-ipv6">Google (DNS-over-TLS IPv6)</option>
  817. <option value="google-https">Google (DNS-over-HTTPS)</option>
  818. <option value="google-json">Google (DNS-over-HTTPS-JSON)</option>
  819. <option value="quad9-udp">Quad9 Secure (DNS-over-UDP)</option>
  820. <option value="quad9-udp-ipv6">Quad9 Secure (DNS-over-UDP IPv6)</option>
  821. <option value="quad9-tcp">Quad9 Secure (DNS-over-TCP)</option>
  822. <option value="quad9-tcp-ipv6">Quad9 Secure (DNS-over-TCP IPv6)</option>
  823. <option value="quad9-tls">Quad9 Secure (DNS-over-TLS)</option>
  824. <option value="quad9-tls-ipv6">Quad9 Secure (DNS-over-TLS IPv6)</option>
  825. <option value="quad9-https">Quad9 Secure (DNS-over-HTTPS)</option>
  826. <option value="quad9-unsecure-udp">Quad9 Unsecure (DNS-over-UDP)</option>
  827. <option value="quad9-unsecure-udp-ipv6">Quad9 Unsecure (DNS-over-UDP IPv6)</option>
  828. <option value="quad9-unsecure-tcp">Quad9 Unsecure (DNS-over-TCP)</option>
  829. <option value="quad9-unsecure-tcp-ipv6">Quad9 Unsecure (DNS-over-TCP IPv6)</option>
  830. <option value="quad9-unsecure-tls">Quad9 Unsecure (DNS-over-TLS)</option>
  831. <option value="quad9-unsecure-tls-ipv6">Quad9 Unsecure (DNS-over-TLS IPv6)</option>
  832. <option value="quad9-unsecure-https">Quad9 Unsecure (DNS-over-HTTPS)</option>
  833. <option value="opendns-udp">OpenDNS (DNS-over-UDP)</option>
  834. <option value="opendns-udp-ipv6">OpenDNS (DNS-over-UDP IPv6)</option>
  835. <option value="opendns-tcp">OpenDNS (DNS-over-TCP)</option>
  836. <option value="opendns-tcp-ipv6">OpenDNS (DNS-over-TCP IPv6)</option>
  837. <option value="opendns-fs-udp">OpenDNS FamilyShield (DNS-over-UDP)</option>
  838. </select>
  839. <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>
  840. </div>
  841. </div>
  842. <div class="form-group">
  843. <label class="col-sm-3 control-label">Forwarder Protocol</label>
  844. <div class="col-sm-8">
  845. <div class="radio">
  846. <label>
  847. <input type="radio" name="rdForwarderProtocol" id="rdForwarderProtocolUdp" value="Udp" checked>
  848. DNS-over-UDP (default)
  849. </label>
  850. </div>
  851. <div class="radio">
  852. <label>
  853. <input type="radio" name="rdForwarderProtocol" id="rdForwarderProtocolTcp" value="Tcp">
  854. DNS-over-TCP
  855. </label>
  856. </div>
  857. <div class="radio">
  858. <label>
  859. <input type="radio" name="rdForwarderProtocol" id="rdForwarderProtocolTls" value="Tls">
  860. DNS-over-TLS
  861. </label>
  862. </div>
  863. <div class="radio">
  864. <label>
  865. <input type="radio" name="rdForwarderProtocol" id="rdForwarderProtocolHttps" value="Https">
  866. DNS-over-HTTPS
  867. </label>
  868. </div>
  869. <div class="radio">
  870. <label>
  871. <input type="radio" name="rdForwarderProtocol" id="rdForwarderProtocolHttpsJson" value="HttpsJson">
  872. DNS-over-HTTPS (JSON)
  873. </label>
  874. </div>
  875. <div style="margin-top: 10px;">Select a protocol that this DNS server must use to query the forwarders specified above.</div>
  876. </div>
  877. </div>
  878. <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>
  879. <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>
  880. </div>
  881. <div class="form-group" style="margin-bottom: 0px;">
  882. <button id="btnSaveDnsSettings" type="button" class="btn btn-primary" data-loading-text="Saving..." onclick="return saveDnsSettings();">Save Settings</button>
  883. <button id="btnFlushDnsCache" type="button" class="btn btn-warning" data-loading-text="Flushing..." onclick="return flushDnsCache();" style="margin-left: 6px;">Flush Cache</button>
  884. </div>
  885. </form>
  886. </div>
  887. </div>
  888. <div id="mainPanelTabPaneDhcp" role="tabpanel" class="tab-pane" style="padding: 10px 0 0 0;">
  889. <ul class="nav nav-tabs" role="tablist">
  890. <li id="dhcpTabListLeases" role="presentation" class="active"><a href="#dhcpTabPaneLeases" aria-controls="dhcpTabPaneLeases" role="tab" data-toggle="tab" onclick="refreshDhcpLeases();">Leases</a></li>
  891. <li id="dhcpTabListScopes" role="presentation"><a href="#dhcpTabPaneScopes" aria-controls="dhcpTabPaneScopes" role="tab" data-toggle="tab" onclick="refreshDhcpScopes(true);">Scopes</a></li>
  892. </ul>
  893. <div class="tab-content">
  894. <div id="dhcpTabPaneLeases" class="tab-pane active">
  895. <div id="divDhcpLeasesLoader" style="margin-top: 10px; height: 350px;"></div>
  896. <div id="divDhcpLeases" style="margin-top: 10px;">
  897. <table class="table table-hover">
  898. <thead>
  899. <tr>
  900. <th>Scope</th>
  901. <th>MAC Address</th>
  902. <th>IP Address</th>
  903. <th></th>
  904. <th>Host Name</th>
  905. <th>Lease Obtained</th>
  906. <th>Lease Expires</th>
  907. </tr>
  908. </thead>
  909. <tbody id="tableDhcpLeasesBody">
  910. <tr>
  911. <td>Default</td>
  912. <td>00-00-00-00-00-00</td>
  913. <td>192.168.10.2</td>
  914. <td>Dynamic</td>
  915. <td>user-pc.local</td>
  916. <td>6/14/2019 3:39 PM</td>
  917. <td>6/15/2019 3:39 PM</td>
  918. </tr>
  919. </tbody>
  920. <tfoot id="tableDhcpLeasesFooter">
  921. <tr><td><b>Total Leases: 1</b></td></tr>
  922. </tfoot>
  923. </table>
  924. </div>
  925. </div>
  926. <div id="dhcpTabPaneScopes" class="tab-pane">
  927. <div id="divDhcpViewScopesLoader" style="margin-top: 10px; height: 350px;"></div>
  928. <div id="divDhcpViewScopes" style="margin-top: 10px;">
  929. <div style="float: right; padding: 2px 0px;">
  930. <button type="button" class="btn btn-primary" style="padding: 2px 0px; width: 100px;" onclick="showAddDhcpScope();">Add Scope</button>
  931. </div>
  932. <div style="clear: both;"></div>
  933. <table class="table table-hover">
  934. <thead>
  935. <tr>
  936. <th>Name</th>
  937. <th>Scope Range/Subnet Mask</th>
  938. <th>Network/Broadcast</th>
  939. <th>Interface</th>
  940. <th></th>
  941. </tr>
  942. </thead>
  943. <tbody id="tableDhcpScopesBody">
  944. <tr>
  945. <td>Default</td>
  946. <td>192.168.10.1 - 192.168.10.100</td>
  947. <td>192.168.10.0<br />192.168.10.255</td>
  948. <td>192.168.10.1</td>
  949. <td>Edit Delete</td>
  950. </tr>
  951. </tbody>
  952. <tfoot id="tableDhcpScopesFooter">
  953. <tr><td><b>Total Leases: 1</b></td></tr>
  954. </tfoot>
  955. </table>
  956. </div>
  957. <div id="divDhcpEditScope" style="display: none;">
  958. <form style="margin-top: 10px; margin-bottom: 0px;" onsubmit="return false;">
  959. <h4 style="padding: 10px 0px;" id="titleDhcpEditScope">Edit Scope</h4>
  960. <div class="well well-sm form-horizontal">
  961. <div class="form-group">
  962. <label for="txtDhcpScopeName" class="col-sm-3 control-label">Name</label>
  963. <div class="col-sm-6">
  964. <input type="text" class="form-control" id="txtDhcpScopeName" data-name="" placeholder="Scope Name">
  965. </div>
  966. </div>
  967. <div class="form-group">
  968. <label for="txtDhcpScopeStartingAddress" class="col-sm-3 control-label">Starting Address</label>
  969. <div class="col-sm-3">
  970. <input type="text" class="form-control" id="txtDhcpScopeStartingAddress" placeholder="Starting Address">
  971. </div>
  972. </div>
  973. <div class="form-group">
  974. <label for="txtDhcpScopeEndingAddress" class="col-sm-3 control-label">Ending Address</label>
  975. <div class="col-sm-3">
  976. <input type="text" class="form-control" id="txtDhcpScopeEndingAddress" placeholder="Ending Address">
  977. </div>
  978. </div>
  979. <div class="form-group">
  980. <label for="txtDhcpScopeSubnetMask" class="col-sm-3 control-label">Subnet Mask</label>
  981. <div class="col-sm-3">
  982. <input type="text" class="form-control" id="txtDhcpScopeSubnetMask" placeholder="Subnet Mask">
  983. </div>
  984. </div>
  985. <div class="form-group">
  986. <label for="txtDhcpScopeLeaseTimeDays" class="col-sm-3 control-label">Lease Time</label>
  987. <div class="col-sm-7">
  988. <label for="txtDhcpScopeLeaseTimeDays" class="control-label">Days</label>
  989. <input type="number" class="form-control" style="display: inline; width: 80px; margin-right: 15px;" id="txtDhcpScopeLeaseTimeDays" placeholder="Days">
  990. <label for="txtDhcpScopeLeaseTimeHours" class="control-label">Hours</label>
  991. <input type="number" class="form-control" style="display: inline; width: 80px; margin-right: 15px;" id="txtDhcpScopeLeaseTimeHours" placeholder="Hrs">
  992. <label for="txtDhcpScopeLeaseTimeMinutes" class="control-label">Minutes</label>
  993. <input type="number" class="form-control" style="display: inline; width: 80px; margin-right: 15px;" id="txtDhcpScopeLeaseTimeMinutes" placeholder="Mins">
  994. </div>
  995. <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>
  996. </div>
  997. <div class="form-group" style="margin-bottom: 0px;">
  998. <label for="txtDhcpScopeOfferDelayTime" class="col-sm-3 control-label">Offer Delay Time</label>
  999. <div class="col-sm-3">
  1000. <input type="number" class="form-control" style="width: 80px; display: inline;" id="txtDhcpScopeOfferDelayTime" placeholder="Delay">
  1001. <span>(milli seconds)</span>
  1002. </div>
  1003. <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>
  1004. </div>
  1005. </div>
  1006. <div class="well well-sm form-horizontal">
  1007. <div class="form-group">
  1008. <label for="txtDhcpScopeDomainName" class="col-sm-3 control-label">Domain Name</label>
  1009. <div class="col-sm-6">
  1010. <input type="text" class="form-control" id="txtDhcpScopeDomainName" placeholder="Domain Name">
  1011. </div>
  1012. <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>
  1013. </div>
  1014. <div class="form-group">
  1015. <label for="txtDhcpScopeDnsTtl" class="col-sm-3 control-label">DNS TTL</label>
  1016. <div class="col-sm-3">
  1017. <input type="number" class="form-control" style="width: 100px; display: inline;" id="txtDhcpScopeDnsTtl" placeholder="DNS TTL">
  1018. <span>(seconds)</span>
  1019. </div>
  1020. <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>
  1021. </div>
  1022. <div class="form-group">
  1023. <label for="txtDhcpScopeRouterAddress" class="col-sm-3 control-label">Router Address</label>
  1024. <div class="col-sm-3">
  1025. <input type="text" class="form-control" id="txtDhcpScopeRouterAddress" placeholder="Router Address">
  1026. </div>
  1027. <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>
  1028. </div>
  1029. <div class="form-group">
  1030. <label for="txtDhcpScopeDnsServers" class="col-sm-3 control-label">DNS Servers</label>
  1031. <div class="col-sm-6">
  1032. <div class="checkbox">
  1033. <label>
  1034. <input id="chkUseThisDnsServer" type="checkbox" onclick="$('#txtDhcpScopeDnsServers').prop('disabled', $(this).prop('checked'));"> Use This DNS Server
  1035. </label>
  1036. </div>
  1037. </div>
  1038. <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>
  1039. <div class="col-sm-offset-3 col-sm-3">
  1040. <textarea id="txtDhcpScopeDnsServers" class="form-control" rows="2"></textarea>
  1041. </div>
  1042. <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>
  1043. </div>
  1044. <div class="form-group">
  1045. <label for="txtDhcpScopeWinsServers" class="col-sm-3 control-label">WINS Servers</label>
  1046. <div class="col-sm-3">
  1047. <textarea id="txtDhcpScopeWinsServers" class="form-control" rows="2"></textarea>
  1048. </div>
  1049. <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>
  1050. </div>
  1051. <div class="form-group">
  1052. <label for="txtDhcpScopeNtpServers" class="col-sm-3 control-label">NTP Servers</label>
  1053. <div class="col-sm-3">
  1054. <textarea id="txtDhcpScopeNtpServers" class="form-control" rows="2"></textarea>
  1055. </div>
  1056. <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>
  1057. </div>
  1058. <div class="form-group" style="margin-bottom: 0px;">
  1059. <label for="tableDhcpScopeStaticRoutes" class="col-sm-3 control-label">Static Routes</label>
  1060. <div class="col-sm-7">
  1061. <table class="table table-hover" style="margin-bottom: 0px;">
  1062. <thead>
  1063. <tr>
  1064. <th>Destination</th>
  1065. <th>Subnet Mask</th>
  1066. <th>Router</th>
  1067. <th><button type="button" class="btn btn-default" style="padding: 0px 20px;" onclick="addDhcpScopeStaticRouteRow('', '', '');">Add</button></th>
  1068. </tr>
  1069. </thead>
  1070. <tbody id="tableDhcpScopeStaticRoutes"></tbody>
  1071. </table>
  1072. </div>
  1073. <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>
  1074. </div>
  1075. </div>
  1076. <div class="well well-sm form-horizontal">
  1077. <div class="form-group">
  1078. <label for="tableDhcpScopeExclusions" class="col-sm-3 control-label">Exclusions</label>
  1079. <div class="col-sm-6">
  1080. <table class="table table-hover" style="margin-bottom: 0px;">
  1081. <thead>
  1082. <tr>
  1083. <th>Starting Address</th>
  1084. <th>Ending Address</th>
  1085. <th><button type="button" class="btn btn-default" style="padding: 0px 20px;" onclick="addDhcpScopeExclusionRow('', '');">Add</button></th>
  1086. </tr>
  1087. </thead>
  1088. <tbody id="tableDhcpScopeExclusions"></tbody>
  1089. </table>
  1090. </div>
  1091. <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>
  1092. </div>
  1093. <div class="form-group" style="margin-bottom: 0px;">
  1094. <label for="tableDhcpScopeReservedLeases" class="col-sm-3 control-label">Reserved Leases</label>
  1095. <div class="col-sm-6">
  1096. <div class="checkbox">
  1097. <label>
  1098. <input id="chkAllowOnlyReservedLeases" type="checkbox"> Allow Only Reserved Lease Allocations
  1099. </label>
  1100. </div>
  1101. </div>
  1102. <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>
  1103. <div class="col-sm-offset-3 col-sm-9">
  1104. <table class="table table-hover" style="margin-bottom: 0px;">
  1105. <thead>
  1106. <tr>
  1107. <th>Host Name</th>
  1108. <th>MAC Address</th>
  1109. <th>IP Address</th>
  1110. <th>Comments</th>
  1111. <th><button type="button" class="btn btn-default" style="padding: 0px 20px;" onclick="addDhcpScopeReservedLeaseRow('', '', '', '');">Add</button></th>
  1112. </tr>
  1113. </thead>
  1114. <tbody id="tableDhcpScopeReservedLeases"></tbody>
  1115. </table>
  1116. </div>
  1117. <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.</div>
  1118. </div>
  1119. </div>
  1120. <div class="form-group" style="margin-bottom: 0px;">
  1121. <button type="submit" class="btn btn-primary" style="width: 100px;" id="btnSaveDhcpScope" data-loading-text="Saving..." onclick="saveDhcpScope(); return false;">Save</button>
  1122. <button type="button" class="btn btn-default" style="width: 100px;" onclick="refreshDhcpScopes();">Cancel</button>
  1123. </div>
  1124. </form>
  1125. </div>
  1126. </div>
  1127. </div>
  1128. </div>
  1129. <div id="mainPanelTabPaneLogs" role="tabpanel" class="tab-pane" style="padding: 10px 0 0 0;">
  1130. <div class="well well-sm log-list-pane">
  1131. <div id="lstLogFiles" class="logs">
  1132. <div class="log"><a href="#" onclick="return viewLog('20171012');">20171012</a></div>
  1133. </div>
  1134. </div>
  1135. <div id="divLogViewer" class="log-viewer-pane">
  1136. <div class="panel panel-default">
  1137. <div class="panel-heading" style="height: 36px; padding: 4px 6px;">
  1138. <div id="txtLogViewerTitle" style="float: left; padding: 4px;">20171012</div>
  1139. <div style="float: right;">
  1140. <button type="button" class="btn btn-default" data-loading-text="Download" onclick="return downloadLog();" style="font-size: 12px; padding: 4px 6px;">Download</button>
  1141. <button id="btnDeleteLog" type="button" class="btn btn-danger" data-loading-text="Delete" onclick="return deleteLog();" style="font-size: 12px; padding: 4px 6px;">Delete</button>
  1142. </div>
  1143. </div>
  1144. <div class="panel-body">
  1145. <div id="divLogViewerLoader" style="margin-top: 20px; height: 400px;"></div>
  1146. <pre id="preLogViewerBody" style="display: none; word-wrap: normal; word-break: normal;"></pre>
  1147. </div>
  1148. </div>
  1149. </div>
  1150. </div>
  1151. <div id="mainPanelTabPaneAbout" role="tabpanel" class="tab-pane" style="padding: 40px 0 20px 0;">
  1152. <div class="about" style="text-align: center;">
  1153. <img src="/img/logo.png" alt="Technitium Logo" />
  1154. <h1>Technitium DNS Server</h1>
  1155. <p>Version <span id="lblAboutVersion"></span></p>
  1156. <p style="max-width: 800px; margin: 0 auto 10px auto;">
  1157. Copyright (C) 2020 Shreyas Zare (shreyas@technitium.com)<br />
  1158. This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions.<br />
  1159. </p>
  1160. <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>
  1161. <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>
  1162. <p>Read the <a href="https://go.technitium.com/?id=23" target="_blank">change log</a> to know whats new in this release.</p>
  1163. <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>
  1164. <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>
  1165. <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>
  1166. <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>
  1167. <h3 style="margin-top: 40px;">Support</h3>
  1168. <p>For support, send an email to <a href="mailto:support@technitium.com" target="_blank">support@technitium.com</a>.</p>
  1169. <p>
  1170. Follow <a href="https://twitter.com/Technitium" target="_blank">@technitium</a> on Twitter.<br />
  1171. Checkout <a href="https://blog.technitium.com/" target="_blank">Technitium Blog</a>.
  1172. </p>
  1173. <h3 style="margin-top: 40px;"><a style="color: rgb(51,51,51) !important;" href="https://go.technitium.com/?id=35" target="_blank">Become A Patron</a></h3>
  1174. <p>Make contribution to Technitium by becoming a Patron and help making new software, updates, and features possible.</p>
  1175. <p>
  1176. <a href="https://go.technitium.com/?id=35" target="_blank">Become A Patron Now!</a>
  1177. </p>
  1178. </div>
  1179. </div>
  1180. </div>
  1181. </div>
  1182. </div>
  1183. </div>
  1184. </div>
  1185. </div>
  1186. </div>
  1187. <div id="modalChangePassword" class="modal fade" tabindex="-1" role="dialog">
  1188. <form class="form-horizontal">
  1189. <div class="modal-dialog" role="document">
  1190. <div class="modal-content">
  1191. <div class="modal-header">
  1192. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  1193. <h4 class="modal-title">Change Password</h4>
  1194. </div>
  1195. <div class="modal-body">
  1196. <div id="divChangePasswordAlert"></div>
  1197. <div class="form-group">
  1198. <label for="txtChangePasswordUsername" class="col-sm-4 control-label">Username</label>
  1199. <div class="col-sm-7">
  1200. <input id="txtChangePasswordUsername" type="text" class="form-control" placeholder="username" disabled>
  1201. </div>
  1202. </div>
  1203. <div class="form-group">
  1204. <label for="txtChangePasswordNewPassword" class="col-sm-4 control-label">New Password</label>
  1205. <div class="col-sm-7">
  1206. <input id="txtChangePasswordNewPassword" type="password" class="form-control" placeholder="new password">
  1207. </div>
  1208. </div>
  1209. <div class="form-group">
  1210. <label for="txtChangePasswordConfirmPassword" class="col-sm-4 control-label">Confirm Password</label>
  1211. <div class="col-sm-7">
  1212. <input id="txtChangePasswordConfirmPassword" type="password" class="form-control" placeholder="confirm password">
  1213. </div>
  1214. </div>
  1215. </div>
  1216. <div class="modal-footer">
  1217. <button id="btnChangePasswordSave" type="submit" class="btn btn-primary" data-loading-text="Saving..." onclick="return changePassword();">Save</button>
  1218. <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
  1219. </div>
  1220. </div>
  1221. </div>
  1222. </form>
  1223. </div>
  1224. <div id="modalForgotPassword" class="modal fade" tabindex="-1" role="dialog">
  1225. <div class="modal-dialog" role="document">
  1226. <div class="modal-content">
  1227. <div class="modal-header">
  1228. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  1229. <h4 class="modal-title">Forgot Password?</h4>
  1230. </div>
  1231. <div class="modal-body">
  1232. <p>Follow these steps to reset 'admin' password:</p>
  1233. <ol>
  1234. <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>
  1235. <li>Rename the <b>dns.config</b> file as <b>reset.config</b></li>
  1236. <li>Restart the DNS Server to complete the password reset process.</li>
  1237. <li>Just refresh this web page in the web browser to auto login with default credentials and quickly change the password.</li>
  1238. </ol>
  1239. <p>Note: To reset 'admin' password, you will need file system access on the server running this DNS Server. </p>
  1240. </div>
  1241. <div class="modal-footer">
  1242. <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
  1243. </div>
  1244. </div>
  1245. </div>
  1246. </div>
  1247. <div id="modalAddZone" class="modal fade" tabindex="-1" role="dialog">
  1248. <form class="form-horizontal">
  1249. <div class="modal-dialog" role="document" style="width: 780px;">
  1250. <div class="modal-content">
  1251. <div class="modal-header">
  1252. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  1253. <h4 class="modal-title">Add Zone</h4>
  1254. </div>
  1255. <div class="modal-body">
  1256. <div id="divAddZoneAlert"></div>
  1257. <div class="form-group">
  1258. <label for="txtAddZone" class="col-sm-4 control-label">Zone</label>
  1259. <div class="col-sm-7">
  1260. <input id="txtAddZone" type="text" class="form-control" placeholder="example.com or 192.168.0.0/24 or 2001:db8::/64">
  1261. </div>
  1262. </div>
  1263. <div class="form-group">
  1264. <label class="col-sm-4 control-label">Type</label>
  1265. <div class="col-sm-7">
  1266. <div class="radio">
  1267. <label>
  1268. <input type="radio" name="rdAddZoneType" id="rdAddZoneTypePrimary" value="Primary" checked>
  1269. Primary Zone (default)
  1270. </label>
  1271. </div>
  1272. <div class="radio">
  1273. <label>
  1274. <input type="radio" name="rdAddZoneType" id="rdAddZoneTypeSecondary" value="Secondary">
  1275. Secondary Zone
  1276. </label>
  1277. </div>
  1278. <div class="radio">
  1279. <label>
  1280. <input type="radio" name="rdAddZoneType" id="rdAddZoneTypeStub" value="Stub">
  1281. Stub Zone
  1282. </label>
  1283. </div>
  1284. <div class="radio">
  1285. <label>
  1286. <input type="radio" name="rdAddZoneType" id="rdAddZoneTypeForwarder" value="Forwarder">
  1287. Conditional Forwarder Zone
  1288. </label>
  1289. </div>
  1290. </div>
  1291. </div>
  1292. <div class="form-group" id="divAddZonePrimaryNameServerAddresses">
  1293. <label for="txtAddZonePrimaryNameServerAddresses" class="col-sm-4 control-label">Primary Name Server Addresses (Optional)</label>
  1294. <div class="col-sm-7">
  1295. <textarea id="txtAddZonePrimaryNameServerAddresses" class="form-control" rows="3" placeholder="192.168.1.1
  1296. 2001:db8::"></textarea>
  1297. </div>
  1298. </div>
  1299. <div class="form-group" id="divAddZoneForwarderProtocol">
  1300. <label class="col-sm-4 control-label">Protocol</label>
  1301. <div class="col-sm-7">
  1302. <div class="radio">
  1303. <label>
  1304. <input type="radio" name="rdAddZoneForwarderProtocol" id="rdAddZoneForwarderProtocolUdp" value="Udp" checked>
  1305. DNS-over-UDP (default)
  1306. </label>
  1307. </div>
  1308. <div class="radio">
  1309. <label>
  1310. <input type="radio" name="rdAddZoneForwarderProtocol" value="Tcp">
  1311. DNS-over-TCP
  1312. </label>
  1313. </div>
  1314. <div class="radio">
  1315. <label>
  1316. <input type="radio" name="rdAddZoneForwarderProtocol" value="Tls">
  1317. DNS-over-TLS
  1318. </label>
  1319. </div>
  1320. <div class="radio">
  1321. <label>
  1322. <input type="radio" name="rdAddZoneForwarderProtocol" value="Https">
  1323. DNS-over-HTTPS
  1324. </label>
  1325. </div>
  1326. <div class="radio">
  1327. <label>
  1328. <input type="radio" name="rdAddZoneForwarderProtocol" value="HttpsJson">
  1329. DNS-over-HTTPS (JSON)
  1330. </label>
  1331. </div>
  1332. </div>
  1333. </div>
  1334. <div class="form-group" id="divAddZoneForwarder">
  1335. <label for="txtAddZoneForwarder" class="col-sm-4 control-label">Forwarder</label>
  1336. <div class="col-sm-7">
  1337. <div class="checkbox" style="margin-bottom: 6px;">
  1338. <label>
  1339. <input id="chkAddZoneForwarderThisServer" type="checkbox" onclick="updateAddZoneFormForwarderThisServer();"> Use This DNS Server
  1340. </label>
  1341. </div>
  1342. <input id="txtAddZoneForwarder" type="text" class="form-control" placeholder="8.8.8.8">
  1343. </div>
  1344. </div>
  1345. </div>
  1346. <div class="modal-footer">
  1347. <button id="btnAddZone" type="submit" class="btn btn-primary" data-loading-text="Adding..." onclick="addZone(); return false;">Add</button>
  1348. <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
  1349. </div>
  1350. </div>
  1351. </div>
  1352. </form>
  1353. </div>
  1354. <div id="modalAddEditRecord" class="modal fade" tabindex="-1" role="dialog">
  1355. <form class="form-horizontal">
  1356. <div class="modal-dialog" role="document">
  1357. <div class="modal-content">
  1358. <div class="modal-header">
  1359. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  1360. <h4 id="titleAddEditRecord" class="modal-title">Add Edit Record</h4>
  1361. </div>
  1362. <div class="modal-body">
  1363. <div id="divAddEditRecordAlert"></div>
  1364. <div class="form-group">
  1365. <label for="txtAddEditRecordName" class="col-sm-4 control-label">Name</label>
  1366. <div class="col-sm-7">
  1367. <input id="txtAddEditRecordName" type="text" class="form-control" placeholder="@">
  1368. </div>
  1369. </div>
  1370. <div class="form-group">
  1371. <label for="optAddEditRecordType" class="col-sm-4 control-label">Type</label>
  1372. <div class="col-sm-7">
  1373. <select id="optAddEditRecordType" class="form-control" onchange="modifyAddRecordForm();" style="width: auto;">
  1374. <option>A</option>
  1375. <option>NS</option>
  1376. <option id="optEditRecordTypeSoa">SOA</option>
  1377. <option>CNAME</option>
  1378. <option>PTR</option>
  1379. <option>MX</option>
  1380. <option>TXT</option>
  1381. <option>AAAA</option>
  1382. <option>SRV</option>
  1383. <option>CAA</option>
  1384. <option>ANAME</option>
  1385. <option id="optEditRecordTypeFwd">FWD</option>
  1386. </select>
  1387. </div>
  1388. </div>
  1389. <div class="form-group" id="divAddEditRecordTtl">
  1390. <label for="txtAddEditRecordTtl" class="col-sm-4 control-label">TTL</label>
  1391. <div class="col-sm-7">
  1392. <input id="txtAddEditRecordTtl" type="number" class="form-control" placeholder="3600" style="width: 100px;">
  1393. </div>
  1394. </div>
  1395. <div id="divAddEditRecordData">
  1396. <div class="form-group">
  1397. <label id="lblAddEditRecordDataValue" for="txtAddEditRecordDataValue" class="col-sm-4 control-label">Value</label>
  1398. <div class="col-sm-7">
  1399. <input id="txtAddEditRecordDataValue" type="text" class="form-control">
  1400. </div>
  1401. </div>
  1402. <div id="divAddEditRecordDataPtr" class="form-group">
  1403. <div class="col-sm-offset-4 col-sm-7">
  1404. <div class="checkbox">
  1405. <label>
  1406. <input id="chkAddEditRecordDataPtr" type="checkbox"> <span id="chkAddEditRecordDataPtrLabel">Add reverse (PTR) record</span>
  1407. </label>
  1408. </div>
  1409. </div>
  1410. </div>
  1411. </div>
  1412. <div id="divAddEditRecordDataNs" style="display: none;">
  1413. <div class="form-group">
  1414. <label for="txtAddEditRecordDataNsNameServer" class="col-sm-4 control-label">Name Server</label>
  1415. <div class="col-sm-7">
  1416. <input id="txtAddEditRecordDataNsNameServer" type="text" class="form-control">
  1417. </div>
  1418. </div>
  1419. <div class="form-group">
  1420. <label for="txtAddEditRecordDataNsGlue" class="col-sm-4 control-label">Glue Addresses</label>
  1421. <div class="col-sm-7">
  1422. <textarea id="txtAddEditRecordDataNsGlue" class="form-control" rows="3" placeholder="192.168.1.1
  1423. 2001:db8::"></textarea>
  1424. </div>
  1425. </div>
  1426. </div>
  1427. <div id="divEditRecordDataSoa" style="display: none;">
  1428. <div class="form-group">
  1429. <label for="txtEditRecordDataSoaPrimaryNameServer" class="col-sm-4 control-label">Primary Name Server</label>
  1430. <div class="col-sm-7">
  1431. <input id="txtEditRecordDataSoaPrimaryNameServer" type="text" class="form-control">
  1432. </div>
  1433. </div>
  1434. <div class="form-group">
  1435. <label for="txtEditRecordDataSoaResponsiblePerson" class="col-sm-4 control-label">Responsible Person</label>
  1436. <div class="col-sm-7">
  1437. <input id="txtEditRecordDataSoaResponsiblePerson" type="text" class="form-control">
  1438. </div>
  1439. </div>
  1440. <div class="form-group">
  1441. <label for="txtEditRecordDataSoaSerial" class="col-sm-4 control-label">Serial</label>
  1442. <div class="col-sm-7">
  1443. <input id="txtEditRecordDataSoaSerial" type="number" class="form-control" style="width: 150px;">
  1444. </div>
  1445. </div>
  1446. <div class="form-group">
  1447. <label for="txtEditRecordDataSoaRefresh" class="col-sm-4 control-label">Refresh</label>
  1448. <div class="col-sm-7">
  1449. <input id="txtEditRecordDataSoaRefresh" type="number" class="form-control" style="width: 100px;">
  1450. </div>
  1451. </div>
  1452. <div class="form-group">
  1453. <label for="txtEditRecordDataSoaRetry" class="col-sm-4 control-label">Retry</label>
  1454. <div class="col-sm-7">
  1455. <input id="txtEditRecordDataSoaRetry" type="number" class="form-control" style="width: 100px;">
  1456. </div>
  1457. </div>
  1458. <div class="form-group">
  1459. <label for="txtEditRecordDataSoaExpire" class="col-sm-4 control-label">Expire</label>
  1460. <div class="col-sm-7">
  1461. <input id="txtEditRecordDataSoaExpire" type="number" class="form-control" style="width: 100px;">
  1462. </div>
  1463. </div>
  1464. <div class="form-group">
  1465. <label for="txtEditRecordDataSoaMinimum" class="col-sm-4 control-label">Minimum</label>
  1466. <div class="col-sm-7">
  1467. <input id="txtEditRecordDataSoaMinimum" type="number" class="form-control" style="width: 100px;">
  1468. </div>
  1469. </div>
  1470. <div class="form-group" id="divEditRecordDataSoaPrimaryAddresses">
  1471. <label for="txtEditRecordDataSoaPrimaryAddresses" class="col-sm-4 control-label">Primary Name Server Addresses</label>
  1472. <div class="col-sm-7">
  1473. <textarea id="txtEditRecordDataSoaPrimaryAddresses" class="form-control" rows="3" placeholder="192.168.1.1
  1474. 2001:db8::"></textarea>
  1475. </div>
  1476. </div>
  1477. </div>
  1478. <div id="divAddEditRecordDataMx" style="display: none;">
  1479. <div class="form-group">
  1480. <label for="txtAddEditRecordDataMxPreference" class="col-sm-4 control-label">Preference</label>
  1481. <div class="col-sm-7">
  1482. <input id="txtAddEditRecordDataMxPreference" type="number" class="form-control" placeholder="1" style="width: 100px;">
  1483. </div>
  1484. </div>
  1485. <div class="form-group">
  1486. <label for="txtAddEditRecordDataMxExchange" class="col-sm-4 control-label">Exchange</label>
  1487. <div class="col-sm-7">
  1488. <input id="txtAddEditRecordDataMxExchange" type="text" class="form-control">
  1489. </div>
  1490. </div>
  1491. </div>
  1492. <div id="divAddEditRecordDataSrv" style="display: none;">
  1493. <div class="form-group">
  1494. <label for="txtAddEditRecordDataSrvPriority" class="col-sm-4 control-label">Priority</label>
  1495. <div class="col-sm-7">
  1496. <input type="number" class="form-control" id="txtAddEditRecordDataSrvPriority" style="width: 100px;">
  1497. </div>
  1498. </div>
  1499. <div class="form-group">
  1500. <label for="txtAddEditRecordDataSrvWeight" class="col-sm-4 control-label">Weight</label>
  1501. <div class="col-sm-7">
  1502. <input type="number" class="form-control" id="txtAddEditRecordDataSrvWeight" style="width: 100px;">
  1503. </div>
  1504. </div>
  1505. <div class="form-group">
  1506. <label for="txtAddEditRecordDataSrvPort" class="col-sm-4 control-label">Port</label>
  1507. <div class="col-sm-7">
  1508. <input type="number" class="form-control" id="txtAddEditRecordDataSrvPort" style="width: 100px;">
  1509. </div>
  1510. </div>
  1511. <div class="form-group">
  1512. <label for="txtAddEditRecordDataSrvTarget" class="col-sm-4 control-label">Target</label>
  1513. <div class="col-sm-7">
  1514. <input type="text" class="form-control" id="txtAddEditRecordDataSrvTarget">
  1515. </div>
  1516. </div>
  1517. </div>
  1518. <div id="divAddEditRecordDataCaa" style="display: none;">
  1519. <div class="form-group">
  1520. <label for="txtAddEditRecordDataCaaFlags" class="col-sm-4 control-label">Flags</label>
  1521. <div class="col-sm-7">
  1522. <input type="number" class="form-control" id="txtAddEditRecordDataCaaFlags" placeholder="0" style="width: 100px;">
  1523. </div>
  1524. </div>
  1525. <div class="form-group">
  1526. <label for="txtAddEditRecordDataCaaTag" class="col-sm-4 control-label">Tag</label>
  1527. <div class="col-sm-7">
  1528. <input type="text" class="form-control" id="txtAddEditRecordDataCaaTag" placeholder="issue" style="width: 150px;">
  1529. </div>
  1530. </div>
  1531. <div class="form-group">
  1532. <label for="txtAddEditRecordDataCaaValue" class="col-sm-4 control-label">Authority</label>
  1533. <div class="col-sm-7">
  1534. <input type="text" class="form-control" id="txtAddEditRecordDataCaaValue">
  1535. </div>
  1536. </div>
  1537. </div>
  1538. <div id="divAddEditRecordDataForwarder" style="display: none;">
  1539. <div class="form-group">
  1540. <label class="col-sm-4 control-label">Protocol</label>
  1541. <div class="col-sm-7">
  1542. <div class="radio">
  1543. <label>
  1544. <input type="radio" name="rdAddEditRecordDataForwarderProtocol" id="rdAddEditRecordDataForwarderProtocolUdp" value="Udp" checked>
  1545. DNS-over-UDP (default)
  1546. </label>
  1547. </div>
  1548. <div class="radio">
  1549. <label>
  1550. <input type="radio" name="rdAddEditRecordDataForwarderProtocol" id="rdAddEditRecordDataForwarderProtocolTcp" value="Tcp">
  1551. DNS-over-TCP
  1552. </label>
  1553. </div>
  1554. <div class="radio">
  1555. <label>
  1556. <input type="radio" name="rdAddEditRecordDataForwarderProtocol" id="rdAddEditRecordDataForwarderProtocolTls" value="Tls">
  1557. DNS-over-TLS
  1558. </label>
  1559. </div>
  1560. <div class="radio">
  1561. <label>
  1562. <input type="radio" name="rdAddEditRecordDataForwarderProtocol" id="rdAddEditRecordDataForwarderProtocolHttps" value="Https">
  1563. DNS-over-HTTPS
  1564. </label>
  1565. </div>
  1566. <div class="radio">
  1567. <label>
  1568. <input type="radio" name="rdAddEditRecordDataForwarderProtocol" id="rdAddEditRecordDataForwarderProtocolHttpsJson" value="HttpsJson">
  1569. DNS-over-HTTPS (JSON)
  1570. </label>
  1571. </div>
  1572. </div>
  1573. </div>
  1574. <div class="form-group">
  1575. <label for="txtAddEditRecordDataForwarder" class="col-sm-4 control-label">Forwarder</label>
  1576. <div class="col-sm-7">
  1577. <div class="checkbox" style="margin-bottom: 6px;">
  1578. <label>
  1579. <input id="chkAddEditRecordDataForwarderThisServer" type="checkbox" onclick="updateAddEditFormForwarderThisServer();"> Use This DNS Server
  1580. </label>
  1581. </div>
  1582. <input id="txtAddEditRecordDataForwarder" type="text" class="form-control" placeholder="8.8.8.8">
  1583. </div>
  1584. </div>
  1585. </div>
  1586. </div>
  1587. <div class="modal-footer">
  1588. <button type="submit" class="btn btn-primary" id="btnAddEditRecord" data-loading-text="Saving...">Save</button>
  1589. <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
  1590. </div>
  1591. </div>
  1592. </div>
  1593. </form>
  1594. </div>
  1595. <div id="modalImportAllowedZones" class="modal fade" tabindex="-1" role="dialog">
  1596. <div class="modal-dialog" role="document">
  1597. <div class="modal-content">
  1598. <div class="modal-header">
  1599. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  1600. <h4 class="modal-title">Import Allowed Zones</h4>
  1601. </div>
  1602. <div class="modal-body">
  1603. <div id="divImportAllowedZonesAlert"></div>
  1604. <p>Enter domain names one below other to import into Allowed Zone:</p>
  1605. <div class="form-group">
  1606. <label for="txtImportAllowedZones" class="control-label">Allowed Zones</label>
  1607. <textarea id="txtImportAllowedZones" class="form-control" rows="15"></textarea>
  1608. </div>
  1609. </div>
  1610. <div class="modal-footer">
  1611. <button id="btnImportAllowedZones" type="submit" class="btn btn-primary" data-loading-text="Importing..." onclick="return importAllowedZones();">Import</button>
  1612. <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
  1613. </div>
  1614. </div>
  1615. </div>
  1616. </div>
  1617. <div id="modalImportBlockedZones" class="modal fade" tabindex="-1" role="dialog">
  1618. <div class="modal-dialog" role="document">
  1619. <div class="modal-content">
  1620. <div class="modal-header">
  1621. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  1622. <h4 class="modal-title">Import Blocked Zones</h4>
  1623. </div>
  1624. <div class="modal-body">
  1625. <div id="divImportBlockedZonesAlert"></div>
  1626. <p>Enter domain names one below other to import into blocked zone:</p>
  1627. <div class="form-group">
  1628. <label for="txtImportBlockedZones" class="control-label">Blocked Zones</label>
  1629. <textarea id="txtImportBlockedZones" class="form-control" rows="15"></textarea>
  1630. </div>
  1631. </div>
  1632. <div class="modal-footer">
  1633. <button id="btnImportBlockedZones" type="submit" class="btn btn-primary" data-loading-text="Importing..." onclick="return importBlockedZones();">Import</button>
  1634. <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
  1635. </div>
  1636. </div>
  1637. </div>
  1638. </div>
  1639. <div id="footer"></div>
  1640. </body>
  1641. </html>