12. 配置 Linux 以接受数据包连接

Linux 是一个强大的操作系统,在配置方面提供了极大的灵活性。然而,这种灵活性也带来了配置它以满足您需求的成本。当配置您的 Linux 机器以接受传入的 AX.25、NET/ROM 或 ROSE 连接时,您需要问自己一些问题。其中最重要的是:“我希望用户在连接时看到什么?” 人们正在开发一些巧妙的小应用程序,这些应用程序可以用来为呼叫者提供服务,一个简单的例子是 AX.25 实用程序中包含的 pms 程序,一个更复杂的例子也是 AX.25 实用程序中包含的 node 程序。或者,您可能希望为用户提供登录提示,以便他们可以使用 shell 帐户,或者您甚至可能编写了自己的程序,例如自定义数据库或游戏,您希望人们连接到该程序。无论您选择什么,您都必须告诉 AX.25 软件,以便它知道在接受传入的 AX.25 连接时要运行什么软件。

ax25d 程序类似于常用的 inetd 程序,后者用于接受 UNIX 机器上的传入 TCP/IP 连接。它会监听传入的连接,当检测到连接时,它会离开并检查配置文件,以确定要运行哪个程序并连接到该连接。由于这是接受传入 AX.25、NET/ROM 和 ROSE 连接的标准工具,我将描述如何配置它。

12.1. 创建/etc/ax25/ax25d.conf文件

此文件是 ax25d AX.25 守护程序的配置文件,该守护程序处理传入的 AX.25、NET/ROM 和 ROSE 连接。

乍一看,该文件看起来有点神秘,但您很快就会发现它在实践中非常简单,只是有一个小陷阱需要您注意。

ax25d.conf文件的通用格式如下文件格式如下:

# This is a comment and is ignored by the ax25d program.
[port_name] || <port_name> || {port_name}
<peer1>    window T1 T2 T3 idle N2 <mode> <uid> <cmd> <cmd-name> <arguments>
<peer2>    window T1 T2 T3 idle N2 <mode> <uid> <cmd> <cmd-name> <arguments>
parameters window T1 T2 T3 idle N2 <mode>
<peer3>    window T1 T2 T3 idle N2 <mode> <uid> <cmd> <cmd-name> <arguments>
   ...
default    window T1 T2 T3 idle N2 <mode> <uid> <cmd> <cmd-name> <arguments>

其中

#

在一行开头表示注释,并且会被 ax25d 程序完全忽略。

<端口名称>

是 AX.25、NET/ROM 或 ROSE 端口的名称,如/etc/ax25/axports, /etc/ax25/nrports/etc/ax25/rsports文件中指定的那样。端口的名称用 `[]' 括号括起来,如果它是 AX.25 端口,用 `<>' 括号括起来,如果它是 NET/ROM 端口,或者用 `{}' 括号括起来,如果它是 ROSE 端口。此字段还有另一种形式,即使用前缀 `呼号/SSID via' 来指示您希望通过此接口接受对呼号/SSID 的呼叫。示例应该更清楚地说明这一点。

<对等节点>

是此特定配置适用的对等节点的呼号。如果您在此处不指定 SSID,则任何 SSID 都将匹配。

窗口

是此配置的 AX.25 窗口参数 (K) 或 MAXFRAME 参数。

T1

是以半秒为单位的帧重传 (T1) 定时器。

T2

是 AX.25 软件在等待另一个传入帧之前准备响应的时间量,以 1 秒为单位。

T3

是在 AX.25 软件断开会话之前的不活动时间量,以 1 秒为单位。

空闲

是以秒为单位的空闲定时器值。

N2

是在连接关闭之前将发生的连续重传次数。

<模式>

提供了一种机制来确定某些类型的通用权限。模式通过提供字符组合来启用或禁用,每个字符代表一个权限。字符可以是大小写,并且必须在一个没有空格的块中。

u/U

UTMP - 当前不支持。

v/V

验证呼叫 - 当前不支持。

q/Q

安静 - 不记录连接

n/N

检查 NET/ROM 邻居 - 当前不支持。

d/D

禁止中继器 - 连接必须是直接的,而不是通过中继器的。

l/L

锁定 - 不允许连接。

*/0

标记 - 放置标记,不设置模式。

<uid>

是要运行以支持连接的程序应以其身份运行的用户 ID。

<cmd>

是要运行的命令的完整路径名,不指定任何参数。

<cmd-name>

是应在 ps 中显示为正在运行的命令名称的文本(通常与 <cmd> 相同,只是没有目录路径信息)。

<参数>

是要传递给 <:cmd> 的命令行参数,当它运行时。您可以通过使用以下令牌将有用的信息传递到这些参数中

%d

连接接收到的端口名称。

%U

已连接方的 AX.25 呼号,不带 SSID,大写。

%u

已连接方的 AX.25 呼号,不带 SSID,小写。

%S

已连接方的 AX.25 呼号,带 SSID,大写。

%s

已连接方的 AX.25 呼号,带 SSID,小写。

%P

连接来自的远程节点的 AX.25 呼号,不带 SSID,大写。

%p

连接来自的远程节点的 AX.25 呼号,不带 SSID,小写。

%R

连接来自的远程节点的 AX.25 呼号,带 SSID,大写。

%r

连接来自的远程节点的 AX.25 呼号,带 SSID,小写。

对于您要接受传入 AX.25、NET/ROM 或 ROSE 连接的每个 AX.25、NET/ROM 或 ROSE 接口,您都需要上面格式的一个部分。

段落中有两个特殊的行,一个以字符串 `parameters' 开头,另一个以字符串 `default' 开头(是的,有区别)。这些行具有特殊功能。

default' 行的目的应该是显而易见的,此行充当捕获所有,因此 <interface_call> 接口上任何没有特定规则的传入连接都将匹配 “default' 规则。如果您没有 “default' 规则,那么任何不匹配任何特定规则的连接都将立即断开,恕不另行通知。

parameters' 行有点微妙,这就是我之前提到的陷阱。在对等节点的任何定义的任何字段中,您都可以使用 `*' 字符来表示“使用默认值”。“parameters' 行是设置这些默认值的地方。如果您不使用 “parameters' 条目指定任何默认值,则内核软件本身具有一些默认值,这些默认值将被使用。陷阱是这些默认值适用于 “parameters' 行下方的规则,而不适用于上方的规则。每个接口定义可以有多个 “parameters' 规则,通过这种方式,您可以创建默认配置组。重要的是要注意,“parameters' 规则不允许您设置 “uid' 或 “command' 字段。

12.2. 一个简单的例子文件的通用格式如下文件

好的,一个说明性例子

# ax25d.conf for VK2KTJ - 02/03/97
# This configuration uses the AX.25 port defined earlier.

# <peer> Win T1  T2  T3  idl N2 <mode> <uid> <exec> <argv[0]>[<args....>]

[VK2KTJ-0 via radio]
parameters 1    10  *  *  *   *   *
VK2XLZ     *     *  *  *  *   *   *    root  /usr/sbin/axspawn axspawn %u +
VK2DAY     *     *  *  *  *   *   *    root  /usr/sbin/axspawn axspawn %u +
NOCALL     *     *  *  *  *   *   L
default    1    10  5 100 180 5   *    root  /usr/sbin/pms pms -a -o vk2ktj

[VK2KTJ-1 via radio]
default    *     *    *   *   *   0    root /usr/sbin/node node

<netrom>
parameters 1    10  *  *  *   *   *
NOCALL     *     *  *  *  *   *   L
default    *     *  *  *  *   *   0        root /usr/sbin/node node

{VK2KTJ-0 via rose}
parameters 1    10  *  *  *   *   *
VK2XLZ     *     *  *  *  *   *   *    root  /usr/sbin/axspawn axspawn %u +
VK2DAY     *     *  *  *  *   *   *    root  /usr/sbin/axspawn axspawn %u +
NOCALL     *     *  *  *  *   *   L
default    1    10  5 100 180 5   *    root  /usr/sbin/pms pms -a -o vk2ktj

{VK2KTJ-1 via rose}
default    *     *    *   *   *   0    root /usr/sbin/node node radio

此示例说明,任何尝试连接到在名为 “radio' 的 AX.25 端口上听到的呼号 “VK2KTJ-0' 的人都将应用以下规则

任何呼号设置为 “NOCALL” 的人都应被锁定,请注意模式 “L” 的使用。

行更改了内核默认值中的两个参数(窗口和 T1),并将为他们运行 /usr/sbin/axspawn 程序。以这种方式运行的任何 /usr/sbin/axspawn 副本都将在 ps 列表中显示为 axspawn,以方便使用。接下来的两行提供了将接收这些权限的两个站点的定义。parameters最后一行是 “捕获所有” 定义,其他所有人都将获得该定义(包括使用除 -1 之外的任何其他 SSID 的 VK2XLZ 和 VK2DAY)。此定义隐式设置所有参数,并将导致 pms 程序运行,并带有命令行参数,指示它是为 AX.25 连接运行的,并且所有者呼号是

radioVK2KTJ。(有关更多详细信息,请参见下面的 “配置 PMS” 部分)。

下一个配置接受对VK2KTJ-1通过VK2KTJ-0端口的呼叫。它为连接到它的每个人运行 node 程序。

下一个配置是 NET/ROM 配置,请注意使用大于号和小于号而不是方括号。这些表示 NET/ROM 配置。此配置更简单,它只是说任何连接到我们名为 “netrom' 的 NET/ROM 端口的人都将运行 node 程序,除非他们的呼号为 “NOCALL',在这种情况下,他们将被锁定。

最后两个配置用于传入的 ROSE 连接。第一个用于呼叫了 “vk2ktj-0' 的人,第二个用于 “VK2KTJ-1在我们的 ROSE 节点地址。这些工作方式完全相同。请注意使用花括号来区分端口作为 ROSE 端口。

这个例子是一个人为的例子,但我认为它清楚地说明了配置文件的语法的重要特征。配置文件在文件的通用格式如下 man 手册中得到了充分的解释。ax25-utils软件包中包含了一个更详细的示例,这对您也可能有用。软件包中包含了一个更详细的示例,这对您也可能有用。

12.3. 启动 ax25d

完成两个配置文件后,您可以使用以下命令启动 ax25d

# /usr/sbin/ax25d

运行时,人们应该能够与您的 Linux 机器建立 AX.25 连接。请记住将ax25d命令放在您的 rc 文件中,以便每次重新启动时自动启动它。