<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>局域网 on 个人技术随想</title>
        <link>https://www.dhao2001.com/tags/%E5%B1%80%E5%9F%9F%E7%BD%91/</link>
        <description>Recent content in 局域网 on 个人技术随想</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh</language>
        <lastBuildDate>Wed, 14 Aug 2024 12:00:00 +0800</lastBuildDate><atom:link href="https://www.dhao2001.com/tags/%E5%B1%80%E5%9F%9F%E7%BD%91/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>简易使用局域网Local域名</title>
            <link>https://www.dhao2001.com/2024/08/14/play-with-local-domain/</link>
            <pubDate>Wed, 14 Aug 2024 12:00:00 +0800</pubDate>
            <guid>https://www.dhao2001.com/2024/08/14/play-with-local-domain/</guid>
            <description>&lt;p&gt;习惯了在公网服务器上用多个子域名访问不同应用，在局域网环境中我们也常常希望这么做。&lt;/p&gt;&#xA;&lt;!-- more --&gt;&#xA;&lt;p&gt;对于自带DNS服务器并维护了&lt;code&gt;.lan&lt;/code&gt;域名的路由器来说，一切非常简单，不需要额外配置就能直接使用&lt;code&gt;主机名.lan&lt;/code&gt;解析其他主机地址。当然，也仅限于此，增加子域名解析或泛域名解析还需要额外配置。&lt;/p&gt;&#xA;&lt;p&gt;在局域网里增设一个DNS服务器，直接解析内网主机的地址，或许这是最为强大的方法，但也或许是最麻烦的方法。&lt;/p&gt;&#xA;&lt;p&gt;Windows的NetBIOS，以及Linux的Avahi，是操作系统附带的主机地址广播方案，在我看来似乎是更加灵活的选择。&lt;/p&gt;&#xA;&lt;p&gt;且Windows 10自较为近期的版本开始，就自带解析 &lt;code&gt;.local&lt;/code&gt; mDNS的组件，Windows和Linux之间的地址广播方案实现了互通。&lt;/p&gt;&#xA;&lt;p&gt;接下来就以在Linux服务器上配置&lt;code&gt;.local&lt;/code&gt;域名作为例子。&lt;/p&gt;&#xA;&lt;h2 id=&#34;基本组件&#34;&gt;&lt;a href=&#34;#%e5%9f%ba%e6%9c%ac%e7%bb%84%e4%bb%b6&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;基本组件&#xA;&lt;/h2&gt;&lt;p&gt;在Debian系统上直接安装：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install avahi-daemon avahi-utils&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;现在起，&lt;code&gt;&amp;lt;主机名&amp;gt;.local&lt;/code&gt;将指向这台主机。&lt;/p&gt;&#xA;&lt;h2 id=&#34;添加额外域名&#34;&gt;&lt;a href=&#34;#%e6%b7%bb%e5%8a%a0%e9%a2%9d%e5%a4%96%e5%9f%9f%e5%90%8d&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;添加额外域名&#xA;&lt;/h2&gt;&lt;p&gt;在一些服务，尤其是HTTP服务中，通过不同域名指向不同服务是非常便利的方法，如&lt;code&gt;blog.&amp;lt;主机名&amp;gt;.local&lt;/code&gt;指向博客，&lt;code&gt;nextcloud.&amp;lt;主机名&amp;gt;.local&lt;/code&gt;指向Nextcloud实例等等。&lt;/p&gt;&#xA;&lt;p&gt;甚至，有些HTTP应用必须运行在&lt;code&gt;/&lt;/code&gt;下，无法通过绑定子目录方式访问，此时必须为其分配独立的域名/子域名。&lt;/p&gt;&#xA;&lt;p&gt;Avahi的确可以添加泛域名或子域名记录，但大部分操作系统并不能正确解析mDNS的泛域名或子域名记录，或是依赖客户端系统的复杂配置，并不简单易行。&lt;/p&gt;&#xA;&lt;p&gt;但是，在局域网环境中，域名空间常常充足，退而求其次，我们完全可以为同一台主机分配多个&lt;code&gt;.local&lt;/code&gt;记录，只要不与网内其他主机冲突即可。&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;avahi-utils&lt;/code&gt;软件包提供了&lt;code&gt;avahi-publish&lt;/code&gt;工具，该工具可以广播用户指定的mDNS记录到内网。例如：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;avahi-publish -a -R another.local 192.168.1.123&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;这可以将&lt;code&gt;another.local&lt;/code&gt;域名指向IP地址&lt;code&gt;192.168.1.123&lt;/code&gt;。&lt;code&gt;-R&lt;/code&gt;选项代表不要广播反向（IP到主机名）解析记录，由于IP地址到主机名的唯一性，这一选项应当被保留。&lt;/p&gt;&#xA;&lt;p&gt;也可以将其编写成一个Systemd服务单元，例如，可以将以下内容填入&lt;code&gt;/etc/systemd/system/avahi-alias@.service&lt;/code&gt;：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[Unit]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Description=Publish %I as alias for %H.local via mdns&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Requires=avahi-daemon.service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;After=avahi-daemon.service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[Service]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Type=simple&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ExecStart=/bin/bash -c &amp;#34;/usr/bin/avahi-publish -a -R %I $(avahi-resolve -4 -n %H.local &amp;gt; /dev/null &amp;amp;&amp;amp; ip route get 1 | awk &amp;#39;{print $7;exit}&amp;#39;)&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Restart=always&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;RestartSec=3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[Install]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;WantedBy=multi-user.target&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;之后执行：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl daemon-reload&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; --now avahi-alias@another.local&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;即可对外发布mDNS记录。&lt;/p&gt;&#xA;</description>
        </item></channel>
</rss>
