<!DOCTYPE html>
<html dir="ltr" lang="en">
    <head>
        <meta charset='utf-8'>
        <title>2.3. Network</title>
    </head>
    <body>
        <a href="index.html">Core OS Index</a>

        <h1>2.3. Network</h1>

        <p>Operation of the network can be handle with init scripts;</p>

        <dl>
            <dt><a href="conf/rc.d/iptables">/etc/rc.d/iptables</a></dt>
            <dd>Configure <a href="#iptables">iptables</a>, start option
            loads set of rules from file /etc/iptables/net.v4, open option
            allows everything to outside and blocks everything from outside,
            stop will block and log everything.</dd>
            <dt><a href="conf/rc.d/net">/etc/rc.d/net</a></dt>
            <dd>Configure Ethernet interface with static or dynamic (dhcp)
            IP, set default route and add default gateway.</dd>
            <dt><a href="conf/rc.d/wlan">/etc/rc.d/wlan</a></dt>
            <dd>Configure Wireless interface, launch wpa_supplicant to handle
            wireless authenticationand dynamic (dhcp)
            connection to router and add as default gateway.</dd>
        </dl>

        <p>Choose wireless or net as connection to outside world and configure
        <a href="conf/rc.conf">/etc/rc.conf</a> to run at startup, example
        connecting using wireless interface;</p>

        <pre>
        #
        # /etc/rc.conf: system configuration
        #

        FONT=default
        KEYMAP=dvorak
        TIMEZONE="Europe/Lisbon"
        HOSTNAME=c9
        SYSLOG=sysklogd
        SERVICES=(lo iptables wlan crond)

        # End of file
        </pre>

        <p>If is first boot after install configure iptables and one of above
        described scripts then proceed to
        <a href="package.html#sysup">update system.</a></p>

        <h2 id="resolv">2.3.1. Resolver</h2>

        <p>This example will use
        <a href="http://www.chaoscomputerclub.de/en/censorship/dns-howto">Chaos Computer Club</a>
        server, edit /etc/resolv.conf and make it immutable;</p>

        <pre>
        # /etc/resolv.conf.head can replace this line
        nameserver 213.73.91.35
        # /etc/resolv.conf.tail can replace this line
        </pre>

        <pre>
        # chattr +i /etc/resolv.conf
        </pre>

        <h2 id="static">2.3.2. Static IP</h2>

        <p>Current example of <a href="conf/rc.d/net">/etc/rc.d/net</a>;</p>

        <pre>
        Address:   192.168.0.1           11000000.10101000.00000000 .00000001
        Netmask:   255.255.255.0 = 24    11111111.11111111.11111111 .00000000
        Wildcard:  0.0.0.255             00000000.00000000.00000000 .11111111
        =>
        Network:   192.168.0.0/24        11000000.10101000.00000000 .00000000 (Class C)
        Broadcast: 192.168.0.255         11000000.10101000.00000000 .11111111
        HostMin:   192.168.0.1           11000000.10101000.00000000 .00000001
        HostMax:   192.168.0.254         11000000.10101000.00000000 .11111110
        Hosts/Net: 254                   (Private Internet)
        </pre>

        <p>Other IP class that can used for private network;</p>

        <pre>
        Address:   10.0.0.1              00001010.00000000.00000000 .00000001
        Netmask:   255.255.255.0 = 24    11111111.11111111.11111111 .00000000
        Wildcard:  0.0.0.255             00000000.00000000.00000000 .11111111
        =>
        Network:   10.0.0.0/24           00001010.00000000.00000000 .00000000 (Class A)
        Broadcast: 10.0.0.255            00001010.00000000.00000000 .11111111
        HostMin:   10.0.0.1              00001010.00000000.00000000 .00000001
        HostMax:   10.0.0.254            00001010.00000000.00000000 .11111110
        Hosts/Net: 254                   (Private Internet)
        </pre>

        <p>Manual configuring like net script;</p>

        <pre>
        # DEV=enp8s0
        # ADDR=192.168.1.9
        # MASK=24
        # GW=192.168.1.254
        </pre>

        <pre>
        # ip addr flush dev ${DEV}
        # ip route flush dev ${DEV}
        # ip addr add ${ADDR}/${MASK} dev ${DEV} broadcast +
        # ip link set ${DEV} up
        # ip route add default via ${GW}
        </pre>

        <h2 id="iptables">2.3.3. Iptables</h2>

        <p>For more information about firewall systems read arch wiki
        <a href="https://wiki.archlinux.org/index.php/Iptables">iptables</a>
        an <a href="https://wiki.archlinux.org/index.php/nftables">nftables</a>.</p>

        <p>To setup iptables rules a set of scripts is used, init script
        <a href="conf/rc.d/iptables">/etc/rc.d/iptables</a>
        loads set of rules from file /etc/iptables/net.v4 at boot time.
        Start option "open" option allows everything to outside
        and blocks everything from outside, "stop" will block and log
        everything. Setup init script and rules ;</p>

        <pre>
        # mkdir /etc/iptables
        # cp core/conf/ip<style>pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: #ffffcc }
.highlight .c { color: #888888 } /* Comment */
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
.highlight .k { color: #008800; font-weight: bold } /* Keyword */
.highlight .ch { color: #888888 } /* Comment.Hashbang */
.highlight .cm { color: #888888 } /* Comment.Multiline */
.highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */
.highlight .cpf { color: #888888 } /* Comment.PreprocFile */
.highlight .c1 { color: #888888 } /* Comment.Single */
.highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */
.highlight .gr { color: #aa0000 } /* Generic.Error */
.highlight .gh { color: #333333 } /* Generic.Heading */
.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #555555 } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #666666 } /* Generic.Subheading */
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
.highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008800 } /* Keyword.Pseudo */
.highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */
.highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */
.highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */
.highlight .na { color: #336699 } /* Name.Attribute */
.highlight .nb { color: #003388 } /* Name.Builtin */
.highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */
.highlight .no { color: #003366; font-weight: bold } /* Name.Constant */
.highlight .nd { color: #555555 } /* Name.Decorator */
.highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */
.highlight .nl { color: #336699; font-style: italic } /* Name.Label */
.highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */
.highlight .py { color: #336699; font-weight: bold } /* Name.Property */
.highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #336699 } /* Name.Variable */
.highlight .ow { color: #008800 } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */
.highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */
.highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */
.highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */
.highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */
.highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */
.highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */
.highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */
.highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */
.highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */
.highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */
.highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */
.highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */
.highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */
.highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */
.highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */
.highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */
.highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */
.highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */
.highlight .vc { color: #336699 } /* Name.Variable.Class */
.highlight .vg { color: #dd7700 } /* Name.Variable.Global */
.highlight .vi { color: #3333bb } /* Name.Variable.Instance */
.highlight .vm { color: #336699 } /* Name.Variable.Magic */
.highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */</style><div class="highlight"><pre><span></span><span class="ch">#!/usr/bin/env zsh</span>
<span class="c1"># Helper to change the numerical prefixes across the repo, say if you want to</span>
<span class="c1"># create room between 023 and 024, and so on.</span>
<span class="c1">#</span>
<span class="c1"># Assumes there&#39;s only ever one file with any numeric prefix. If you move</span>
<span class="c1"># 003trace.tests you might need to do some manual patch-up.</span>

setopt<span class="w"> </span>extendedglob

<span class="k">if</span><span class="w"> </span><span class="o">[[</span><span class="w"> </span><span class="nv">$#</span><span class="w"> </span>-eq<span class="w"> </span><span class="m">0</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="sb">`</span>git<span class="w"> </span>diff<span class="w"> </span>HEAD<span class="w"> </span><span class="p">|</span>wc<span class="w"> </span>-l<span class="sb">`</span><span class="w"> </span>-gt<span class="w"> </span><span class="m">0</span><span class="w"> </span><span class="o">]]</span>
<span class="k">then</span>
<span class="w">  </span><span class="nb">echo</span><span class="w"> </span><span class="s2">&quot;Uncommitted changes&quot;</span>
<span class="w">  </span><span class="nb">exit</span>
<span class="k">fi</span>

<span class="k">if</span><span class="w"> </span><span class="o">[[</span><span class="w"> </span><span class="nv">$#</span><span class="w"> </span>-gt<span class="w"> </span><span class="m">0</span><span class="w"> </span><span class="o">]]</span><span class="w"> </span><span class="c1"># dry run</span>
<span class="k">then</span>
<span class="w">  </span>git<span class="o">()</span><span class="w"> </span><span class="o">{</span>
<span class="w">    </span><span class="nb">echo</span><span class="w"> </span><span class="nv">$*</span>
<span class="w">  </span><span class="o">}</span>
<span class="k">fi</span>

<span class="c1">#</span>

<span class="nv">index</span><span class="o">=</span><span class="m">0</span>
ls<span class="w"> </span><span class="o">[</span><span class="m">0</span>-9<span class="o">]</span>*<span class="w"> </span><span class="p">|</span>grep<span class="w"> </span>-v<span class="w"> </span><span class="s2">&quot;trace.test&quot;</span><span class="w"> </span><span class="p">|</span>sort<span class="w"> </span>-n<span class="w"> </span><span class="p">|</span>
<span class="w">  </span><span class="k">while</span><span class="w"> </span><span class="nb">read</span><span class="w"> </span>file
<span class="w">  </span><span class="k">do</span>
<span class="w">    </span><span class="nb">echo</span><span class="w"> </span><span class="nv">$file</span><span class="w"> </span>&gt;<span class="p">&amp;</span><span class="m">2</span>
<span class="w">    </span><span class="k">while</span><span class="w"> </span><span class="o">[[</span><span class="w"> </span><span class="nv">$file</span><span class="w"> </span>!<span class="o">=</span><span class="w"> </span><span class="sb">`</span><span class="nb">printf</span><span class="w"> </span><span class="s2">&quot;%03d&quot;</span><span class="w"> </span><span class="nv">$index</span><span class="sb">`</span>*<span class="w"> </span><span class="o">]]</span>
<span class="w">    </span><span class="k">do</span>
<span class="w">      </span><span class="nb">echo</span>
<span class="w">      </span><span class="nv">index</span><span class="o">=</span><span class="k">$((</span><span class="nv">$index</span><span class="o">+</span><span class="m">1</span><span class="k">))</span>
<span class="w">    </span><span class="k">done</span>
<span class="w">    </span><span class="nb">echo</span><span class="w"> </span><span class="nv">$file</span>
<span class="w">    </span><span class="nv">index</span><span class="o">=</span><span class="k">$((</span><span class="nv">$index</span><span class="o">+</span><span class="m">1</span><span class="k">))</span>
<span class="w">  </span><span class="k">done</span><span class="w"> </span>&gt;<span class="w"> </span>.layout

vim<span class="w"> </span>-c<span class="w"> </span><span class="s2">&quot;set nu&quot;</span><span class="w"> </span>.layout

<span class="c1">#</span>

root<span class="o">()</span><span class="w"> </span><span class="o">{</span>
<span class="w">  </span><span class="nb">echo</span><span class="w"> </span><span class="nv">$1</span><span class="w"> </span><span class="p">|</span>perl<span class="w"> </span>-pwe<span class="w"> </span><span class="s1">&#39;s/^[0-9]*//&#39;</span>
<span class="o">}</span>

<span class="nv">index</span><span class="o">=</span><span class="m">0</span>
cat<span class="w"> </span>.layout<span class="w"> </span><span class="p">|</span>
<span class="w">  </span><span class="k">while</span><span class="w"> </span><span class="nb">read</span><span class="w"> </span>file
<span class="w">  </span><span class="k">do</span>
<span class="w">    </span><span class="k">if</span><span class="w"> </span><span class="o">[</span><span class="w"> </span>!<span class="w"> </span>-z<span class="w"> </span><span class="nv">$file</span><span class="w"> </span><span class="o">]</span>
<span class="w">    </span><span class="k">then</span>
<span class="w">