hi, I’ve spent the last few hours switching from Vyatta to Vyos 1.10-beta1. I’ve had to re-work some of the vyatta patches that originated in UBNT circles (thanks!), but now I have identical functionality to before which is great.
There are two main patches I needed - and I’ve included my patch files below - I take no credit for this - I’ve only re-worked the patches into the latest Vyos. It would be great if these patches (or variants of them) could be incorporated into the next release of Vyos as it would make things easier if these features were out the box (it took me a while to understand Linux patch files!).
- set up freedns as a dynamic DNS provider (http://freedns.afraid.org/)
- based on;
** http://community.ubnt.com/t5/EdgeMAX/Dynamic-DNS-afraid-org/td-p/420351
** Bug #1068884 “ddclient unusable with FreeDNS due to missing libd... : Bugs : ddclient package : Ubuntu - ddclient 3.8 (which ships with vyos) does not support freedns, so first update ddclient to 3.8.1;
- The motivation for this was that dyndns got rid of their free offering some time ago.
$ sudo su -
# cd /tmp
# curl -o ddclient.deb http://ftp.us.debian.org/debian/pool/main/d/ddclient/ddclient_3.8.1-1.1_all.deb
# dpkg -i ddclient.deb
# cat >/tmp/ddclient.patch <<'EOL'
--- /usr/sbin/ddclient.orig
+++ /usr/sbin/ddclient
@@ -1783,14 +1783,14 @@
## load_sha1_support
######################################################################
sub load_sha1_support {
- my $sha1_loaded = eval {require Digest::SHA1};
+ my $sha1_loaded = eval {require Digest::SHA};
unless ($sha1_loaded) {
fatal(<<"EOM");
-Error loading the Perl module Digest::SHA1 needed for freedns update.
+Error loading the Perl module Digest::SHA needed for freedns update.
On Debian, the package libdigest-sha1-perl must be installed.
EOM
}
- import Digest::SHA1 (qw/sha1_hex/);
+ import Digest::SHA (qw/sha1_hex/);
}
######################################################################
## geturl
EOL
# patch -p0 < /tmp/ddclient.patch
# cat >/tmp/ddns-node.def.patch <<'EOL'
--- /opt/vyatta/share/vyatta-cfg/templates/service/dns/dynamic/interface/node.tag/service/node.def.orig
+++ /opt/vyatta/share/vyatta-cfg/templates/service/dns/dynamic/interface/node.tag/service/node.def
@@ -2,7 +2,7 @@
help: Service being used for Dynamic DNS [REQUIRED]
type: txt
syntax:expression: exec "
- service_array=(dnspark dslreports dyndns easydns namecheap sitelutions zoneedit)
+ service_array=(dnspark dslreports dyndns easydns freedns namecheap sitelutions zoneedit)
service_array_len=${#service_array[*]}
i=0
while [ $i -lt $service_array_len ]; do
@@ -15,7 +15,7 @@
exit 1 "
allowed: local -a array ;
- array=(dnspark dslreports dyndns easydns namecheap sitelutions zoneedit);
+ array=(dnspark dslreports dyndns easydns freedns namecheap sitelutions zoneedit);
echo -n ${array[@]}
commit:expression: $VAR(./@/login) != ""; "Set login for service $VAR(./@) to send DDNS updates for interface $VAR(../@)"
EOL
# patch -p0 < /tmp/ddns-node.def.patch
$ config
# set service dns dynamic interface pppoe0 service freedns
# set service dns dynamic interface pppoe0 service freedns host-name ???.????.???
# set service dns dynamic interface pppoe0 service freedns login ?????
# set service dns dynamic interface pppoe0 service freedns password ????
# commit
# save
[edit]
# exit
$ config
# show service dns dynamic
interface pppoe0 {
service freedns {
host-name ??????
login ??????
password ?????
}
}
[edit]
# exit
$ sudo su -
# show dns dynamic status
interface : pppoe0
ip address : ?.?.?.?
host-name : ????
last update : Thu Jan 1 00:00:00 1970
update-status: good
- Conditional DNS forwarding support;
- http://community.ubnt.com/t5/EdgeMAX/Conditional-DNS-forwarding-with-dnsmasq/td-p/454759
- Motivation here was that to get netflix/iplayer etc requires the use of a DNS service such as unotelly, and I only want to forward specific URLs to the DNS provider depending on which services I’m trying to unblock;
$ sudo su -
# cat >/tmp/dns_forwarding-node.patch <<'EOL'
--- /dev/null
+++ /opt/vyatta/share/vyatta-cfg/templates/service/dns/forwarding/options/node.def
@@ -0,0 +1,7 @@
+multi:
+type: txt
+# help formatted below to appear properly during tab completion
+help: Additional options for dns forwarding. You must
+ use the syntax of dnsmasq.conf in this text-field. Using this
+ without proper knowledge may result in a crashed dnsmaq daemon.
+ Check system log to look for errors.
EOL
# patch -p0 < /tmp/dns_forwarding-node.patch
# cat >/tmp/vyatta-dns-forwarding.pl.patch <<'EOL'
--- /opt/vyatta/sbin/vyatta-dns-forwarding.pl.orig
+++ /opt/vyatta/sbin/vyatta-dns-forwarding.pl
@@ -63,7 +63,7 @@
my $output = '';
my $config = new Vyatta::Config;
my $use_dnsmasq_conf = 0;
- my (@listen_interfaces, $cache_size, @use_nameservers, $use_system_nameservers, @use_dhcp_nameservers, @domain, $server, $ignore_hosts_file);
+ my (@listen_interfaces, $cache_size, @use_nameservers, $use_system_nameservers, @use_dhcp_nameservers, @options, @domain, $server, $ignore_hosts_file);
$config->setLevel("service dns forwarding");
@@ -71,6 +71,7 @@
@listen_interfaces = $config->returnOrigValues("listen-on");
$cache_size = $config->returnOrigValue("cache-size");
@use_nameservers = $config->returnOrigValues("name-server");
+ @options = $config->returnOrigValues("options");
$use_system_nameservers = $config->existsOrig("system");
@use_dhcp_nameservers = $config->returnOrigValues("dhcp");
@domain = $config->listOrigNodes("domain");
@@ -80,6 +81,7 @@
@listen_interfaces = $config->returnValues("listen-on");
$cache_size = $config->returnValue("cache-size");
@use_nameservers = $config->returnValues("name-server");
+ @options = $config->returnValues("options");
$use_system_nameservers = $config->exists("system");
@use_dhcp_nameservers = $config->returnValues("dhcp");
@domain = $config->listNodes("domain");
@@ -148,6 +150,12 @@
}
}
+ if (@options != 0) {
+ foreach my $option (@options) {
+ $output .= "$option\n";
+ }
+ }
+
if ($use_dnsmasq_conf == 1) {
$output .= "resolv-file=/etc/dnsmasq.conf\n";
}
EOL
# patch -p0 < /tmp/vyatta-dns-forwarding.pl.patch
$ config
# set service dns forwarding listen-on eth0
# set service dns forwarding listen-on eth1
# set service dns forwarding listen-on vtun0
# set service dns forwarding options "server=/netflix.com/103.6.212.24"
# set service dns forwarding options "server=/nflximg.com/103.6.212.24"
# set service dns forwarding options "server=/nflximg.net/103.6.212.24"
# set service dns forwarding options "server=/netflix.com.edgesuite.net/103.6.212.24"
# set service dns forwarding options "server=/nflxext.com/103.6.212.24"
# set service dns forwarding options "server=/bbc.co.uk/103.6.212.24"
# set service dns forwarding options "server=/cp143012-i.akamaihd.net/103.6.212.24"
# set service dns forwarding options "server=/a1638.g.akamai.net/103.6.212.24"
# set service dns forwarding options "server=/cp96472.live.edgefcs.net/103.6.212.24"
# set service dns forwarding options "server=/itv.com/103.6.212.24"
# set service dns forwarding options "server=/channel4.com/103.6.212.24"
[edit]
$ config
# show service dns forwarding
cache-size 150
listen-on eth1
listen-on eth0
listen-on vtun0
options server=/netflix.com/103.6.212.24
options server=/nflximg.com/103.6.212.24
options server=/nflximg.net/103.6.212.24
options server=/netflix.com.edgesuite.net/103.6.212.24
options server=/nflxext.com/103.6.212.24
options server=/bbc.co.uk/103.6.212.24
options server=/cp143012-i.akamaihd.net/103.6.212.24
options server=/a1638.g.akamai.net/103.6.212.24
options server=/cp96472.live.edgefcs.net/103.6.212.24
options server=/itv.com/103.6.212.24
options server=/channel4.com/103.6.212.24
system
[edit]