====== Run a QWK Network Hub ====== This [[howto:]] describes how to configure your Synchronet BBS to act as a **QWK network hub** — that is, a system that other [[ref:qwk|QWK]]-compatible BBSes call into to exchange networked messages. If instead you want to **join** an existing network as a node (caller), see [[howto:dove-net]] or read about the //Network Hubs...// sub-menu in [[config:networks]]. ===== Hub vs. Node ===== A QWK-netted BBS is a **node**, a **hub**, or both: * A **node** calls a hub, uploads a REP packet, and downloads a QWK packet. * A **hub** receives those calls, distributes incoming messages to other nodes, and packages outgoing messages for each node. Being a hub doesn't require any extra server or service — Synchronet's regular [[server:terminal|Terminal Server]] handles QWK packet transfers. All you need is a properly configured **user account** for each node that will call your system. For the on-the-wire details and conference-numbering rules of QWK networking on Synchronet, see [[ref:qwknet]]. ===== Step 1: Prepare your sub-boards ===== Decide which sub-boards (message areas) you want to network. For each one, you'll typically want to create a [[custom:command_shell|message group]] dedicated to the network, with one sub-board per conference you intend to carry. Conference numbers in QWK packets follow the //Group/Sub// scheme described in [[ref:qwknet]] — Group 1 / Sub 1 = conference ''1001'', Group 2 / Sub 3 = ''2003'', etc. Each node will configure those numbers on **their** end when calling you. Set a //Default Tagline// for QWK packets in [[util:SCFG]] -> Networks -> QWK so each node receives identifying text in messages they import from you. ===== Step 2: Create a user account for each node ===== For every QWK node that will call your BBS, create a Synchronet user account: - Logon locally (or via [[bbs:|the BBS]]) as ''New'' — or use [[util:useredit]] / [[util:uedit]] / the [[access:user_editor|User Editor]]. - Use the **node's QWK-ID** as the user name (and alias, if you collect one). QWK-IDs are 1–8 characters, alphanumeric, and must start with a letter. - Give the account a security //level// high enough to read and post on every networked sub-board. Typically a dedicated level reserved for QWKnet nodes works well; otherwise grant access via flags or [[access:requirements|ARS]]. ==== The 'Q' restriction ==== The account **must** have the ''Q'' [[access:restrictions|restriction]] set. The ''Q'' restriction is what makes the account a QWKnet node account rather than a regular user account: * It drops the user straight to the ''QWK:'' prompt at logon, bypassing the normal logon procedure and menu shell. * It allows the account to **upload REP packets containing messages from any user name** (the //Net Status// privilege), which is essential — a node forwards messages on behalf of //its// users. * It allows the account to **receive private posts addressed to other users** (so you can route them onward in the network). * It automatically excludes non-networked sub-boards from the QWK packets it generates. * It causes locally-created messages exported into the REP packets to be tagged with your default tagline. * Synchronet writes a ''NETFLAGS.DAT'' into the QWK packet for ''Q''-restricted accounts (for compatibility with non-Synchronet QWKnet nodes; Synchronet itself ignores it). In [[access:user_editor|UEDIT]] / [[access:user_editor|useredit]], toggle //Restrictions// -> ''Q''. ==== Recommended exemptions ==== Two [[access:exemptions]] make life easier for high-frequency or long call-out nodes — set these on the node account in addition to the ''Q'' restriction: * **''L''** — //Logons per day//. Removes the per-day logon cap so the node can call as often as it needs to. * **''T''** — //Time Online//. Removes the per-call and per-day time limits so a single large QWK packet doesn't get cut short. The ''Q'' restriction itself does **not** imply these — they're independent exemptions you set on the account. ===== Step 3: Verify access to networked sub-boards ===== Make sure the security level (and any flags / ARS) you assigned to the node account permits **reading and posting** on every sub-board you want to network with that node. A common mistake is creating the ''Q''-restricted account and forgetting that a flag-gated sub-board is now invisible to it — the conference will silently drop out of the QWK packet. If you maintain multiple node accounts and want to feed different sub-boards to different nodes, use per-sub-board access ARS to scope what each node sees. ===== Step 4: Tell the node how to call you ===== The node sysop needs three things from you: - Your **QWK-ID** (set in [[util:SCFG]] -> Message Options -> //BBS ID for QWK Packets//). They'll enter this as the //Hub System ID// on their side. - The **user name and password** of the QWKnet account you created for them. - The **conference numbers** for each sub-board you're networking with them. (Group/Sub mapping per [[ref:qwknet]].) If you're using something other than the standard ''*QNET'' (built-in QNET-FTP) module on your end, share the call-out details. For most modern Synchronet-to-Synchronet hubs, ''*QNET'' over FTP is the simplest path — see [[module:qnet-ftp]]. ===== Step 5: File transfers between nodes and hubs ===== QWK networking can also carry **files** between nodes and hubs. To send a file to a specific node, drop it into: /sbbs/data/qnet/QWKID.OUT/ (Replace ''QWKID'' with the node's QWK-ID.) The next time that node calls and downloads its QWK packet, the file is appended to the packet. Files arriving from a node land in: /sbbs/data/qnet/QWKID.IN/ The sysop is notified of the new file. See [[ref:qwknet#transferring_files_between_nodes_and_hubs|QWKnet: Transferring Files Between Nodes and Hubs]] for details. ===== Step 6: Routed NetMail (optional) ===== If you're a hub that connects multiple QWKnet networks or provides upstream routing, you can build a route map (''/sbbs/data/qnet/route.dat'') so NetMail addressed to systems you don't directly carry can be relayed through the right uplink. The [[util:qwknodes]] utility can generate ''route.dat'' from your node list. See [[ref:qwknet]] for the routing rules. ===== Diagnostics ===== * Watch ''/sbbs/data/logs/'' for QWK-related log messages. The Synchronet [[monitor:|Control Panel]] / [[util:umonitor]] also shows live activity. * Use [[util:smbutil]] / [[util:chksmb]] to inspect the message bases the node is touching. * If a node reports missing conferences in the QWK packet they received, double-check the node account's access to those sub-boards and that the sub-boards are actually flagged as networked. ===== See Also ===== * [[ref:qwknet|Synchronet QWK Network Extensions]] — protocol-level reference * [[ref:qwk|QWK packet format]] * [[config:networks|Network Configuration (SCFG)]] — including //Network Hubs.../...QWK Network Hub// (the //caller// side) * [[access:restrictions|User Restrictions]] (the ''Q'' flag) * [[access:exemptions|User Exemptions]] (''L'' and ''T'') * [[util:qwknodes|qwknodes]] — manage QWKnet node lists / route maps * [[module:qnet-ftp|qnet-ftp.js]] — built-in Synchronet QWKnet call-out module * [[howto:dove-net|Join DOVE-Net]] — the node-side counterpart, useful as a worked example {{tag>qwk qwknet hub network}}