{"id":4026,"date":"2021-01-26T10:33:53","date_gmt":"2021-01-26T09:33:53","guid":{"rendered":"https:\/\/esferas.org\/msqlu\/?p=4026"},"modified":"2021-05-07T07:38:55","modified_gmt":"2021-05-07T05:38:55","slug":"portico-home","status":"publish","type":"post","link":"https:\/\/esferas.org\/msqlu\/2021\/01\/26\/portico-home\/","title":{"rendered":"portico.home"},"content":{"rendered":"\n<p>Mejorando un router openWRT para conseguir mayor control sobre mi red dom\u00e9stica.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p><em>portico.home<\/em> es el nombre del router que tiene la siguiente configuraci\u00f3n:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">system type             : Atheros AR7242 rev 1\n machine                 : Buffalo WZR-HP-G300NH2\n processor               : 0\n cpu model               : MIPS 24Kc V7.4\n BogoMIPS                : 265.42\n wait instruction        : yes\n microsecond timers      : yes\n tlb_entries             : 16\n extra interrupt vector  : yes\n hardware watchpoint     : yes, count: 4, address\/irw mask: [0x0ffc, 0x0ffc, 0x0ffb, 0x0ffb]\n isa                     : mips1 mips2 mips32r1 mips32r2\n ASEs implemented        : mips16\n Options implemented     : tlb 4kex 4k_cache prefetch mcheck ejtag llsc dc_aliases perf_cntr_intr_bit nan_legacy nan_2008 perf\n shadow register sets    : 1\n kscratch registers      : 0\n package                 : 0\n core                    : 0\n VCED exceptions         : not available\n VCEI exceptions         : not available<\/pre>\n\n\n\n<p>Y ahora mismo funciona con la siguiente versi\u00f3n de openWRT:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">root@portico:\/etc# cat \/etc\/openwrt_release \n DISTRIB_ID='OpenWrt'\n DISTRIB_RELEASE='19.07.6'\n DISTRIB_REVISION='r11278-8055e38794'\n DISTRIB_TARGET='ar71xx\/generic'\n DISTRIB_ARCH='mips_24kc'\n DISTRIB_DESCRIPTION='OpenWrt 19.07.6 r11278-8055e38794'\n DISTRIB_TAINTS=''<\/pre>\n\n\n\n<p>Aunque ya lo estaba empleando como punto de acceso a Internet inal\u00e1mbrico y al\u00e1mbrico quer\u00eda sacarle algo m\u00e1s de partido. Para empezar un servidor de nombres que no fuese <em>dnsmasq<\/em> porque est\u00e1 m\u00e1s o menos bien pero yo quer\u00eda que existiese uno secundario, adem\u00e1s de actualizaci\u00f3n autom\u00e1tica de la zona, y eso s\u00e9 conseguirlo con bind9. <\/p>\n\n\n\n<p>As\u00ed que he llegado a estar cinco horas en varias tandas para conseguir que:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>dnsmasq s\u00f3lo sea un servidor DHCP con asignaci\u00f3n de IP por direcci\u00f3n MAC<\/li><li>bind9 se utilice como servidor de zona principal<\/li><\/ul>\n\n\n\n<p>A\u00fan me falta que se actualicen los nombres de aquellas m\u00e1quinas que no tengan una IP determinada. No es dif\u00edcil pero algo tendr\u00e9 que escribir porque hay que extraer la informaci\u00f3n del registro del sistema o de la tabla de asignaciones de IP.<\/p>\n\n\n\n<p>Una vez que he conseguido tambi\u00e9n que env\u00ede los par\u00e1metros correctos v\u00eda DHCP (pasarela, servidores DNS,&#8230;) y que \u00e9l mismo utilice su propio servidor para resolver me quedaba la parte de salvaguardar todos estos cambios. <\/p>\n\n\n\n<p>La m\u00e1quina es tan peque\u00f1a en recursos que instalar algo como git o similar era absurdo. En su lugar he consultado varias fuentes y escrito un peque\u00f1o programa que realiza la copia y me env\u00eda por correo un registro de lo sucedido. He predispuesto que se ejecute todas las semanas (a menos que se lance a mano) porque a menos que haya cambios muy significativos no tiene sentido mayor frecuencia.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">C\u00f3mo realizar copias <\/h3>\n\n\n\n<p>El proceso de realizar copias de seguridad fuera de esa m\u00e1quina consiste en varios pasos:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Crear una cuenta SSH en la m\u00e1quina que albergar\u00e1 los datos<\/li><li>Crear una clave SSH para el usuario <em>root<\/em> en el router y pasarla a la cuenta remota como autorizada.<\/li><li>Asegurarnos de que se salva todo lo necesario en el archivo <em>\/etc\/sysupgrade.conf<\/em><\/li><li>Crear el script para realizar copias <\/li><li>Instalar y configurar un programa para env\u00edo de correo (msmtp)<\/li><li>A\u00f1adir el env\u00edo de correo al script de copias<\/li><li>Programar su ejecuci\u00f3n tras haberlo probado varias docenas de veces.<\/li><\/ol>\n\n\n\n<p>En este caso no estoy realizando copias completas de la memoria del router. Eso es un proceso que dejo para m\u00e1s tarde y ahora voy a a\u00f1adir detalles concretos a los pasos anteriores.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Crear clave SSH en el router<\/h4>\n\n\n\n<p>Se utiliza el programa <em>dropbearkey<\/em> para crear la clave y luego se le pide que imprima la huella y la clave p\u00fablica. Para obtener s\u00f3lo ese archivo es necesario filtrar la salida y guardarla.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">root@portico:~# dropbearkey -t rsa -f id_rsa \nroot@portico:~# dropbearkey -y -f id_rsa | grep\u00a0\"^ssh-rsa\u00a0\"\u00a0> id_rsa.pub<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Env\u00edo de correo<\/h4>\n\n\n\n<p>Se instala el paquete <em>msmtp<\/em> y se configura en el archivo <em>\/etc\/msmtprc<\/em> indic\u00e1ndole:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Cuenta predeterminada\naccount default\n\n# D\u00f3nde enviar el correo y c\u00f3mo\nhost taquiones.net\nport 25\ntls_starttls on\n\n# Constru\u00edr direcci\u00f3n del remitente SMTP\nfrom %U@portico.home\n\n# Activar registro de sucesos\nsyslog LOG_MAIL<\/pre>\n\n\n\n<p>El env\u00edo es de lo m\u00e1s espartano. Se le indica a d\u00f3nde va y se le deben suministrar todas las cabeceras necesarias. <\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Copias de seguridad <\/h4>\n\n\n\n<p>Las copias se realizan con un script como el siguiente:<\/p>\n\n\n\n<pre title=\"\/usr\/local\/bin\/backup.sh\" class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">#!\/bin\/sh\n\nVERSION=0.1\nBACKUP_FILE=\"\/tmp\/backup-$(cat \/proc\/sys\/kernel\/hostname)-$(date +%F).tgz\"\nTMP=\/tmp\/backup-$$.log\n\n(\n     # Lista de paquetes instalados\n     opkg list-installed > \/etc\/config\/installed.packages\n      <code># Crear copia  <\/code>\n<code>sysupgrade -v --create-backup $BACKUP_FILE <\/code>\n<code># Enviar copia a servidor  <\/code>\n<code>echo \"Enviando copia a backup.home ...\"  <\/code>\n<code>scp $BACKUP_FILE ocs@backup.home:domus\/portico.home\/ <\/code>\n<code># Borrar copia  echo \"Borrando copia $BACKUP_FILE\" <\/code>\n<code>rm -f $BACKUP_FILE<\/code>\n) > $TMP\n\n(\n  echo -e \"Subject: [BACKUP portico.home] $(date +%F)\\n\\n\" \n  cat $TMP\n) | msmtp root@taquiones.net\n\nrm -f $TMP<\/code><\/pre>\n\n\n\n<p>El script emplea un mecanismo del propio sistema operativo llamado <em>sysupgrade<\/em> que crea la copia teniendo en cuenta todo lo que ha cambiado en la configuraci\u00f3n y todo lo que se le indica que salve siempre, y uno previo que guarda la lista de paquetes instalados por si es necesario recuperar de golpe la instalaci\u00f3n.<\/p>\n\n\n\n<p>El resultado del env\u00edo es sencillo dada la capacidad del router:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Saving config files\u2026\n etc\/bind\/bind.keys\n etc\/bind\/db.0\n etc\/bind\/db.127\n etc\/bind\/db.192.168.100\n etc\/bind\/db.255\n etc\/bind\/db.home\n etc\/bind\/db.local\n etc\/bind\/db.root\n etc\/bind\/named.conf\n etc\/config\/adblock\n etc\/config\/ddns\n etc\/config\/ddns-opkg\n etc\/config\/dhcp\n etc\/config\/dhcp-opkg\n etc\/config\/dhcp.orig\n etc\/config\/dropbear\n etc\/config\/firewall\n etc\/config\/fstab\n etc\/config\/installed.packages\n etc\/config\/luci\n etc\/config\/luci-opkg\n etc\/config\/network\n etc\/config\/openvpn\n etc\/config\/openvpn_recipes\n etc\/config\/rpcd\n etc\/config\/simple-adblock\n etc\/config\/snort\n etc\/config\/system\n etc\/config\/ubootenv\n etc\/config\/ucitrack\n etc\/config\/ucitrack-opkg\n etc\/config\/uhttpd\n etc\/config\/wireless\n etc\/crontabs\/cron.update\n etc\/crontabs\/root\n etc\/dropbear\/authorized_keys\n etc\/dropbear\/dropbear_rsa_host_key\n etc\/ethers\n etc\/group\n etc\/hosts\n etc\/inittab\n etc\/luci-uploads\/.placeholder\n etc\/msmtprc\n etc\/opkg\/keys\/0b26f36ae0f4106d\n etc\/opkg\/keys\/1035ac73cc4e59e3\n etc\/opkg\/keys\/5151f69420c3f508\n etc\/opkg\/keys\/72a57f2191b211e0\n etc\/opkg\/keys\/792d9d9b39f180dc\n etc\/opkg\/keys\/9ef4694208102c43\n etc\/opkg\/keys\/b26f36ae0f4106d\n etc\/opkg\/keys\/b2d571e0880ff617\n etc\/opkg\/keys\/b5043e70f9a75cde\n etc\/opkg\/keys\/c10b9afab19ee428\n etc\/opkg\/keys\/dace9d4df16896bf\n etc\/opkg\/keys\/dd6de0d06bbd3d85\n etc\/opkg\/keys\/f94b9dd6febac963\n etc\/passwd\n etc\/profile\n etc\/rc.local\n etc\/resolv.conf\n etc\/shadow\n etc\/shells\n etc\/sysctl.conf\n etc\/sysupgrade.conf\n root\/.ssh\/id_dropbear\n root\/.ssh\/id_dropbear.pub\n root\/.ssh\/known_hosts\n usr\/local\/bin\/backup.sh\n Enviando copia a backup.home \u2026\n Borrando copia \/tmp\/backup-portico-2021-01-26.tgz<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Referencias<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/openwrt.org\/docs\/guide-user\/base-system\/cron?s[]=crontab\">Crontab en openWRT<\/a><\/li><li><a href=\"https:\/\/pedrohdz.com\/posts\/projects\/openwrt-home-server-backup-restore\/\">OpenWRT Home Server &#8211; Backup and Restore<\/a><\/li><li><a href=\"https:\/\/www.systutorials.com\/docs\/linux\/man\/1-dropbearkey\/\" target=\"_blank\" rel=\"noreferrer noopener\">dropbearkey<\/a><\/li><\/ul>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mejorando un router openWRT para conseguir mayor control sobre mi red dom\u00e9stica.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[2],"tags":[18,34,633,1006,1090,60,1093],"class_list":["post-4026","post","type-post","status-publish","format-standard","hentry","category-software","tag-administracion-de-sistemas","tag-backups","tag-bind9","tag-dnsmasq","tag-domus","tag-openwrt","tag-red-casera"],"_links":{"self":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/4026","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/comments?post=4026"}],"version-history":[{"count":5,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/4026\/revisions"}],"predecessor-version":[{"id":4031,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/4026\/revisions\/4031"}],"wp:attachment":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/media?parent=4026"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/categories?post=4026"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/tags?post=4026"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}