Page Menu
Home
GRNET
Search
Configure Global Search
Log In
Files
F1299758
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Wed, Nov 19, 12:50 AM
Size
11 KB
Mime Type
text/x-diff
Expires
Fri, Nov 21, 12:50 AM (10 h, 20 m)
Engine
blob
Format
Raw Data
Handle
294717
Attached To
rDOCKERWEBDNS webdns_docker
View Options
diff --git a/.gitingore b/.gitingore
new file mode 100644
index 0000000..0a764a4
--- /dev/null
+++ b/.gitingore
@@ -0,0 +1 @@
+env
diff --git a/data/.keepme b/data/.keepme
new file mode 100644
index 0000000..e69de29
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000..4a5f155
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,37 @@
+---
+version: '2'
+services:
+
+ mysql:
+ image: mysql:latest
+ env_file:
+ - env
+ environment:
+ - MYSQL_RANDOM_ROOT_PASSWORD=yes
+ volumes:
+ - ./data/mysql:/var/lib/mysql
+
+ powerdns:
+ build: powerdns/.
+ depends_on:
+ - mysql
+ ports:
+ - '53:53'
+ env_file:
+ - env
+ environment:
+ - MYSQL_HOST=mysql
+
+ webdns:
+ build: webdns/.
+ depends_on:
+ - mysql
+ ports:
+ - '3000:3000'
+ env_file:
+ - env
+ environment:
+ - MYSQL_HOST=mysql
+ - RAILS_ENV=development
+ volumes:
+ - ./data/webdns:/srv/webdns
diff --git a/env.dist b/env.dist
new file mode 100644
index 0000000..19e6c64
--- /dev/null
+++ b/env.dist
@@ -0,0 +1,5 @@
+MYSQL_HOST=mysql
+MYSQL_DATABASE=dns
+MYSQL_USERNAME=dns
+MYSQL_PASSWORD=<CHANGEME>
+SECRET_KEY_BASE=<CHANGEME>
diff --git a/powerdns/Dockerfile b/powerdns/Dockerfile
new file mode 100644
index 0000000..399ad21
--- /dev/null
+++ b/powerdns/Dockerfile
@@ -0,0 +1,9 @@
+FROM debian:jessie
+ENV DEBIAN_FRONTEND noninteractive
+RUN apt-get update -q 2 && apt-get install -y --no-install-recommends pdns-server \
+ pdns-backend-mysql \
+ mysql-client
+EXPOSE 53
+COPY entrypoint.sh /
+RUN chmod u+x /entrypoint.sh
+ENTRYPOINT ["/entrypoint.sh"]
diff --git a/powerdns/entrypoint.sh b/powerdns/entrypoint.sh
new file mode 100644
index 0000000..cca8888
--- /dev/null
+++ b/powerdns/entrypoint.sh
@@ -0,0 +1,28 @@
+#!/bin/bash
+if [ -z "${MYSQL_HOST}" ]; then
+ echo "You need to specify a MySQL host."
+ exit
+fi
+MYSQL_DATABASE=${MYSQL_DATABASE-dns}
+MYSQL_USERNAME=${MYSQL_USERNAME-dns}
+MYSQL_PORT=${MYSQL_PORT-3306}
+MYSQL_PASSWORD=${MYSQL_PASSWORD-12345}
+
+echo "Settings up pdns config."
+cat <<EOF > /etc/powerdns/pdns.d/pdns.local.gmysql.conf
+# MySQL Configuration
+launch+=gmysql
+
+# gmysql parameters
+gmysql-host=${MYSQL_HOST}
+gmysql-port=3306
+gmysql-dbname=${MYSQL_DATABASE}
+gmysql-user=${MYSQL_USERNAME}
+gmysql-password=${MYSQL_PASSWORD}
+gmysql-dnssec=no
+EOF
+
+echo "Waiting for the db to come up and webdns to run initial migration."
+sleep 10
+echo "Starting powerdns"
+/usr/sbin/pdns_server --daemon=no
diff --git a/powerdns/init.sql b/powerdns/init.sql
new file mode 100644
index 0000000..002fe92
--- /dev/null
+++ b/powerdns/init.sql
@@ -0,0 +1,90 @@
+CREATE TABLE domains (
+ id INT AUTO_INCREMENT,
+ name VARCHAR(255) NOT NULL,
+ master VARCHAR(128) DEFAULT NULL,
+ last_check INT DEFAULT NULL,
+ type VARCHAR(6) NOT NULL,
+ notified_serial INT DEFAULT NULL,
+ account VARCHAR(40) DEFAULT NULL,
+ PRIMARY KEY (id)
+) Engine=InnoDB;
+
+CREATE UNIQUE INDEX name_index ON domains(name);
+
+
+CREATE TABLE records (
+ id INT AUTO_INCREMENT,
+ domain_id INT DEFAULT NULL,
+ name VARCHAR(255) DEFAULT NULL,
+ type VARCHAR(10) DEFAULT NULL,
+ content VARCHAR(64000) DEFAULT NULL,
+ ttl INT DEFAULT NULL,
+ prio INT DEFAULT NULL,
+ change_date INT DEFAULT NULL,
+ disabled TINYINT(1) DEFAULT 0,
+ ordername VARCHAR(255) BINARY DEFAULT NULL,
+ auth TINYINT(1) DEFAULT 1,
+ PRIMARY KEY (id)
+) Engine=InnoDB;
+
+CREATE INDEX nametype_index ON records(name,type);
+CREATE INDEX domain_id ON records(domain_id);
+CREATE INDEX recordorder ON records (domain_id, ordername);
+
+
+CREATE TABLE supermasters (
+ ip VARCHAR(64) NOT NULL,
+ nameserver VARCHAR(255) NOT NULL,
+ account VARCHAR(40) NOT NULL,
+ PRIMARY KEY (ip, nameserver)
+) Engine=InnoDB;
+
+
+CREATE TABLE comments (
+ id INT AUTO_INCREMENT,
+ domain_id INT NOT NULL,
+ name VARCHAR(255) NOT NULL,
+ type VARCHAR(10) NOT NULL,
+ modified_at INT NOT NULL,
+ account VARCHAR(40) NOT NULL,
+ comment VARCHAR(64000) NOT NULL,
+ PRIMARY KEY (id)
+) Engine=InnoDB;
+
+CREATE INDEX comments_domain_id_idx ON comments (domain_id);
+CREATE INDEX comments_name_type_idx ON comments (name, type);
+CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);
+
+
+CREATE TABLE domainmetadata (
+ id INT AUTO_INCREMENT,
+ domain_id INT NOT NULL,
+ kind VARCHAR(32),
+ content TEXT,
+ PRIMARY KEY (id)
+) Engine=InnoDB;
+
+CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);
+
+
+CREATE TABLE cryptokeys (
+ id INT AUTO_INCREMENT,
+ domain_id INT NOT NULL,
+ flags INT NOT NULL,
+ active BOOL,
+ content TEXT,
+ PRIMARY KEY(id)
+) Engine=InnoDB;
+
+CREATE INDEX domainidindex ON cryptokeys(domain_id);
+
+
+CREATE TABLE tsigkeys (
+ id INT AUTO_INCREMENT,
+ name VARCHAR(255),
+ algorithm VARCHAR(50),
+ secret VARCHAR(255),
+ PRIMARY KEY (id)
+) Engine=InnoDB;
+
+CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);
diff --git a/webdns/Dockerfile b/webdns/Dockerfile
new file mode 100644
index 0000000..afaf409
--- /dev/null
+++ b/webdns/Dockerfile
@@ -0,0 +1,21 @@
+FROM debian:jessie
+
+ENV DEBIAN_FRONTEND noninteractive
+RUN apt-get update -q 2 && apt-get install -y --no-install-recommends git \
+ bundler \
+ ruby-dev \
+ libgmp-dev \
+ build-essential \
+ nodejs \
+ mysql-client
+RUN git clone https://repo.grnet.gr/source/webdns.git /srv/webdns
+RUN apt-get install -y --no-install-recommends capistrano unicorn rails ruby-mysql2 ruby-jquery-rails
+WORKDIR /srv/webdns
+RUN bundle install
+
+EXPOSE 8080
+COPY seeds_policies.rb /
+COPY seeds_users.rb /
+COPY entrypoint.sh /
+RUN chmod u+x /entrypoint.sh
+ENTRYPOINT ["/entrypoint.sh"]
diff --git a/webdns/entrypoint.sh b/webdns/entrypoint.sh
new file mode 100644
index 0000000..c4190cf
--- /dev/null
+++ b/webdns/entrypoint.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+if [ -z "${MYSQL_HOST}" ]; then
+ echo "You need to specify a mysql host."
+ exit
+fi
+
+MYSQL_DATABASE=${MYSQL_DATABASE-dns}
+MYSQL_USERNAME=${MYSQL_USERNAME-dns}
+MYSQL_PORT=${MYSQL_PORT-3306}
+MYSQL_PASSWORD=${MYSQL_PASSWORD-12345}
+
+sleep 20
+
+cat << EOF > /srv/webdns/config/database.yml
+development:
+ database: ${MYSQL_DATABASE}
+ adapter: mysql2
+ encoding: utf8
+ username: ${MYSQL_USERNAME}
+ password: ${MYSQL_PASSWORD}
+ host: ${MYSQL_HOST}
+EOF
+
+/usr/bin/rake db:migrate
+/usr/bin/rails runner /seeds_users.rb
+#/usr/bin/rails runner seeds_policies.rb
+cd /srv/webdns
+rails server
diff --git a/webdns/seeds_policies.rb b/webdns/seeds_policies.rb
new file mode 100644
index 0000000..31aed85
--- /dev/null
+++ b/webdns/seeds_policies.rb
@@ -0,0 +1,133 @@
+policies = {}
+policies[:default] = <<-POLICY
+<?xml version="1.0"?>
+<KASP>
+ <Policy name="default">
+ <Description>A default policy that will amaze you and your friends</Description>
+ <Signatures>
+ <Resign>PT7200S</Resign>
+ <Refresh>PT259200S</Refresh>
+ <Validity>
+ <Default>PT1209600S</Default>
+ <Denial>PT1209600S</Denial>
+ </Validity>
+ <Jitter>PT43200S</Jitter>
+ <InceptionOffset>PT3600S</InceptionOffset>
+ </Signatures>
+ <Denial>
+ <NSEC3>
+ <Resalt>PT8640000S</Resalt>
+ <Hash>
+ <Algorithm>1</Algorithm>
+ <Iterations>5</Iterations>
+ <Salt length="8"/>
+ </Hash>
+ </NSEC3>
+ </Denial>
+ <Keys>
+ <TTL>PT3600S</TTL>
+ <RetireSafety>PT3600S</RetireSafety>
+ <PublishSafety>PT3600S</PublishSafety>
+ <Purge>PT1209600S</Purge>
+ <KSK>
+ <Algorithm length="2048">8</Algorithm>
+ <Lifetime>PT31536000S</Lifetime>
+ <Repository>SoftHSM</Repository>
+ <Standby>0</Standby>
+ </KSK>
+ <ZSK>
+ <Algorithm length="1024">8</Algorithm>
+ <Lifetime>PT7776000S</Lifetime>
+ <Repository>SoftHSM</Repository>
+ <Standby>0</Standby>
+ </ZSK>
+ </Keys>
+ <Zone>
+ <PropagationDelay>PT43200S</PropagationDelay>
+ <SOA>
+ <TTL>PT3600S</TTL>
+ <Minimum>PT3600S</Minimum>
+ <Serial>unixtime</Serial>
+ </SOA>
+ </Zone>
+ <Parent>
+ <PropagationDelay>PT9999S</PropagationDelay>
+ <DS>
+ <TTL>PT3600S</TTL>
+ </DS>
+ <SOA>
+ <TTL>PT172800S</TTL>
+ <Minimum>PT10800S</Minimum>
+ </SOA>
+ </Parent>
+ </Policy>
+</KASP>
+POLICY
+policies[:lab] = <<-POLICY
+<?xml version="1.0"?>
+<KASP>
+ <Policy name="lab">
+ <Description>Quick turnaround policy for lab work</Description>
+ <Signatures>
+ <Resign>PT600S</Resign>
+ <Refresh>PT1800S</Refresh>
+ <Validity>
+ <Default>PT3600S</Default>
+ <Denial>PT3600S</Denial>
+ </Validity>
+ <Jitter>PT60S</Jitter>
+ <InceptionOffset>PT3600S</InceptionOffset>
+ </Signatures>
+ <Denial>
+ <NSEC3>
+ <Resalt>PT8640000S</Resalt>
+ <Hash>
+ <Algorithm>1</Algorithm>
+ <Iterations>5</Iterations>
+ <Salt length="8"/>
+ </Hash>
+ </NSEC3>
+ </Denial>
+ <Keys>
+ <TTL>PT300S</TTL>
+ <RetireSafety>PT360S</RetireSafety>
+ <PublishSafety>PT360S</PublishSafety>
+ <Purge>PT432000S</Purge>
+ <KSK>
+ <Algorithm length="2048">8</Algorithm>
+ <Lifetime>PT31536000S</Lifetime>
+ <Repository>SoftHSM</Repository>
+ <Standby>0</Standby>
+ </KSK>
+ <ZSK>
+ <Algorithm length="1024">8</Algorithm>
+ <Lifetime>PT14400S</Lifetime>
+ <Repository>SoftHSM</Repository>
+ <Standby>0</Standby>
+ </ZSK>
+ </Keys>
+ <Zone>
+ <PropagationDelay>PT30S</PropagationDelay>
+ <SOA>
+ <TTL>PT300S</TTL>
+ <Minimum>PT300S</Minimum>
+ <Serial>counter</Serial>
+ </SOA>
+ </Zone>
+ <Parent>
+ <PropagationDelay>PT9999S</PropagationDelay>
+ <DS>
+ <TTL>PT3600S</TTL>
+ </DS>
+ <SOA>
+ <TTL>PT172800S</TTL>
+ <Minimum>PT10800S</Minimum>
+ </SOA>
+ </Parent>
+ </Policy>
+</KASP>
+POLICY
+
+policies.each_pair { |name, policy|
+ DnssecPolicy.create(name: name, policy: policy)
+}
diff --git a/webdns/seeds_users.rb b/webdns/seeds_users.rb
new file mode 100644
index 0000000..fe4e228
--- /dev/null
+++ b/webdns/seeds_users.rb
@@ -0,0 +1,4 @@
+users = []
+users << User.create!(email: 'admin@example.com', password: 'adminadmin')
+g_admin = Group.create!(name: 'admin')
+g_admin.users << users.first
Event Timeline
Log In to Comment