SMB & SUBnet FAQ

Peter Åstrand <astrand at lysator liu se>

Version 0.5 2000-03-12

Detta dokument beskriver hur man får SMB, populärt kallat Microsoft Networking eller Windows-nätverk, att fungera väl på SUBnet. Saker specifika för vissa operativsystem (i första hand Windows och Linux) tas upp, men även en del av tekniken bakom.

Innehåll

1. Förord

2. Introduktion till SMB

3. CIFS - vad är det?

4. Name Resolution - att finna rätt IP

5. Browsing - vilka datorer finns i grannskapet?

6. SMB & Windows

7. SMB & Unix

8. Ordlista


1. Förord

SUBNet är, för er som inte visste det, ett studentdatanät i bl.a. bostadsområdet Ryd i Linköping. Nätet är ett samarbete mellan Stångåstaden AB och Linköpings universitet, och innefattar i dagsläget ca 3000 lägenheter. SUBnet är via universitetet och SUNET anslutet till Internet. Ofta utnyttjas även möjligheten att dela filer mellan lokala datorer, och då används ofta protokollet SMB. Nätet är numera delat i fyra delar, så det går inte att använda alla protokoll hur som helst. Det enda rekommenderade protokollet är TCP/IP. För att SMB ska fungera väl med TCP/IP behöver man en WINS-server.

2. Introduktion till SMB

SMB är ett fildelningsprotokoll som har en lång och brokig historia. Många företag har utvecklat protokollet, däribland Xerox, 3Com, IBM och på senare tid Microsoft. Andra namn för detta protokoll är LAN Manager eller Microsoft Networking. Delar av detta har gjorts publikt, men på senare tid har Microsoft gjort ganska så stora förändringar som inte offentliggjorts. Eftersom Microsofts operativsystem är så pass vanliga, kan man med fog säga att de dominerar utvecklingen av SMB.

År 1994 påbörjade Andrew Tridgell arbetet med att skapa en fri SMB-server. Denna är idag känd som Samba , och har nått stor popularitet på många Unix-plattformar, däribland t.ex. Linux , SunOS och SGI Irix. "The Samba Suit" innefattar även en klient och många användbara verktyg. Samba-paketet innehåller mycket dokumentation. Mer info om SMB finns t.ex. på http://samba.anu.edu.au/cifs/docs/what-is-smb.html

SMB bygger på en Client/Server-modell. I början fanns det en strikt uppdelning av mellan vilka maskiner som var servrar respektive klienter, men nuförtiden är det vanligt att en dator är både server och klient samtidigt. Under DOS och Windows får man tillgång till en nätverksresurs genom att knyta ihop en enhetsbokstav eller använda UNC-notation . Programvaran som sköter detta kallas redirector. Under Unix monteras katalogen på sedvanligt vis någonstans i filsystemet.

SMB är starkt förknippat med NetBIOS, och använder s.k. NetBIOS-namn för att identifiera resurser. Ett sådant kan vara max 15 tecken långt, plus ett typ-tecken. Detta kan jämföras med IP-address respektive port-nummer för TCP/IP. Alla parter måste ha ett unikt NetBIOS-namn för att kunna kommunciera, även om olika s.k. arbetsgrupper eller domäner används.

SMB återfinns på nivå 6 i OSI-modellen, och kan köras över flertalet olika underliggande protokoll som exempelvis NetBEUI, IPX eller TCP/IP. I det sistnämnda fallet används ofta begreppet NBT, NetBIOS over Tcp/ip.

3. CIFS

CIFS står för Common Internet FileSystem, och är en variant av SMB under utveckling. Företag som är inblandade är t.ex. Microsoft, Digital Equipment, Data General, SCO m.fl. Förutom en del förändringar angående anpassning till Internet, så är CIFS väsentligen detsamma som traditionell SMB (version LM 0.12).

4. Name Resolution

Antag att du vet att det finns en server vid namn BIGSERVER på nätverket, som du vill kontakta. För att kunna göra detta måste din klientdator vet mer exakt vilken dator det handlar om. Ytterst handlar det om att få kännedom om MAC-addressen (BIGSERVERS MAC-address ifall man är på samma segment eller närmaste routers MAC-address i annat fall). Ifall NetBEUI används kommer det att ske ett broadcast , vilket orsakar oönskad belastning på nätverket. Därför är NetBEUI synnerligen olämplig att använda på större nätverk som exempelvis SUBnet. Då TCP/IP istället används är man istället intresserad av att finna IP-addressen. Detta kan också göras på sedvanligt vis med broadcast. Men observera: En broadcast på TCP/IP-nivå kan endast göras till det egna sub-nätet! Exempel: En dator har IP-addressen 130.236.232.123 och nätmasken 255.255.255.0. Då blir nätnumret 130.236.232.0, och broadcast kan alltså bara ske till datorer som har IP-nummer 130.236.232.X. Datorer som har annat nätnummer går inte att komma åt, (såvida man inte exakt vet vilken IP-address som datorn har och kan ange denna i sin klient). I fallet SUBnet går det alltså bara att komma åt en tiondel av datorerna via broadcasts.

Men det finns ett sätt som löser dessa problem: NBNS Förkortningen står för NetBIOS Name Service. Denna är beskriven i RFC 1001, för den som vill veta mer. Microsoft Windows NT innehåller en NBNS som de kallar för WINS. Förkortningen står för Windows Internet Name Service, och används ofta som en synonym till NBNS (vilket jag själv kommer att göra fortsättningsvis). Det hela fungerar enligt följande: Man avsätter en speciell dator för att vara NBNS. När andra datorer senare startar upp kontaktar de denna (registrering), och berättar vad de heter och vilket IP-nummer de har. Registreringen godkänns ifall namnet är ledigt. På detta viset byggs det upp en databas över vilka NetBIOS-namn som hör ihop med vilka IP. När klienter senare önskar denna information så frågar de NBNS-servern, och behöver inte utföra någon broadcast.

Systemet fungerar i princip som DNS, med ett par viktiga skillnader: Det finns ingen hierarki, dvs inga "domäner". Dessutom byggs databasen upp dynamiskt, utifrån klienternas registreringar. Många har kritiserat WINS för att vara "en försämrad version av DNS". Windows 2000 använder huvudsakligen DNS istället för WINS.

SUBnet har tillgång till en WINS-server. Det är samma maskin som SUBnets DNS, och har IP-nummer 130.236.230.9. NetBIOS-namnet är ISIS.

5. Browsing

SMB har en mekanism som klienter kan använda för att få en lista över de maskiner som finns på det lokala nätverket. Det här kallas allmänt "browsing". Det hela är en ganska så komplicerad process, som sällan fungerar perfekt. Även företag med homogena nätverk och nästan identiska maskiner brukar ha problem med browsing, så det är inte alls särskilt förvånande att det är vissa problem på SUBnet. Speciellt komplicerat blir det när man har flera subnät (som på SUBnet). Samba-dokumentationen beskriver det hela som "en komplicerad dans, med många rörliga objekt", och det har tagit Microsoft många år att få det hela att fungera.

Observera: Att kunna "se" en dator i browselistan har inget alls att göra med huruvida man kan nå datorn ifråga eller inte. I vissa fall kan det hända att man kan se färre datorer sedan man ställt in WINS-server, men då går det troligtvis att nå ett större antal av de som syns. De flesta torde vara överens om att det är viktigare att kunna komma åt en dator, än att se att den existerar.

Browsing baseras på att en speciell dator i nätverket utses till "Browse Master". Denna samlar in information om vilka datorer som finns, och bygger en s.k. browselista. När klienter önskar se denna lista kontaktar de denna Browse Master. I ett litet nätverk med t.ex. ett femtal datorer behöver man oftast inte fundera över hur browsing ska fungera, utan den sker automatiskt. De flesta klienter kan fungera som Browse Masters, och om det inte redan finns någon sådan så tar de på sig den uppgiften automatisk. Ifall det finns flera datorer som kan göra jobbet sker det en omröstning.

I större nätverk med routers måste man planera lite mer. Eftersom broadcasts inte kan passera en router så skulle bara små "öar" av datorgrupper byggas upp. Två maskiner på olika sidor om routern skulle inte kunna se varandra i browslistan. Att kunna få sådan här s.k. "cross subnet browsing" att fungera kräver att det finns en WINS-server, och att klienterna använder sig av den. WINS möjliggör också utbyte av information om vilka datorer i nätverket som är Master Browsers. Det krävs nämligen inte bara en, utan flera Master Browsers i det här fallet. Dels en "Domain Master Browser" (DMB), och dels en "Local Master Browser" (LMB) i varje subnät. LMB samlar in listor på datorerna som ingår i dess egna subnät, och skickar dessa till DMB. På samma sätt kan LMB (och andra) hämta den fullständiga listan från DMB.

På det här sättet kommer det så småningom att byggas upp kompletta listor. På SUBnet kompliceras det hela ytterligare av att de flesta stänger av sina datorer minst en gång per dygn, och stabilitet nås sällan. SUBnets WINS-server är Domain Master Browser, och har NetBIOS-namnet ISIS.

Den som är mer intresserad av hur browsing går till kan läsa Sambas dokumentation på ftp://samba.anu.edu.au/pub/samba/docs/BROWSING.txt .

5.1 WINS-browsing på ISIS

ISIS kör en specialversion av Samba där WINS- och Browse-funktionerna samverkar. Det fungerar på så sätt att alla datorer som delar ut filer samt registrerar sig med WINS-servern automatiskt läggs till i arbetsgruppen WINS.

Ibland syns inte arbetsgruppen WINS. I Windows  kan man oftast lösa detta problemet genom att välja Start->Kör->\\ISIS och sedan trycka på backsteg. Det går att göra en genväg till arbetsgruppen WINS. Du hittar en färdig sådan på \\ISIS\info\shortcut.lnk

Under Unix kan man använda kommandot "smbclient -L isis" för att se listan.

Arbetsgruppen WINS är automatgenererad. Det får till följd att kommentaren är ersatt med datorns IP-nummer, samt att datortypen ibland felaktigt rapporteras som NT4 Server.

OBS! Inga datorer får vara medlemmar i arbetsgruppen WINS. Alltså: Du ska EJ ställa in din dator till att vara medlem i WINS-gruppen. Den rekommenderade gruppen är fortfarande SUBNET.

WINS-gruppen har en övre begränsning på 1579 datorer (av okänd anledning).
 

6. SMB & Windows

Se till att ställa in WINS-server som 130.236.230.9. Det är en mycket god början till att få saker och ting att fungera. I de fall då WINS-uppslagning inte fungerar (t.ex. om server-datorn ej ställt in rätt WINS-server), kan man "hårdkoda" vilken IP-address som hör till ett visst namn genom att editera filen LMHOSTS. Se på filen LMHOSTS.SAM för exempel.

6.1 Windows for Workgroups 3.11

Denna version kallas ofta Windows 3.11. Observera dock att det finns en variant som heter "Windows 3.11" utan tillägget "for Workgroups", och som saknar nätverksfunktioner. WfW var den första Windows-versionen som klarade att vara både server och klient..WfW har också stöd för 32-bitars TCP/IP stack. Denna medföljer dock inte, men kan hämtas från t.ex. http://jos.rydnet.lysator.liu.se/SUBnet/WFWT32.EXE . WfW har en del små buggar i bl.a. hanteringen av lösenord.

6.2 Windows 95

De två första versionerna av Windows 95 har en allvarlig bugg i serverdelen, vilket innebär att ifall du "delar ut" någon resurs (även skrivare) så kan vem som helst komma åt hela din hårddisk. Det finns en buggfix att hämta från Microsofts WWW-sidor. WINS-server ställs som vanligt in under TCP/IP inställningarna. Observera: Fyll i samma nummer (130.236.230.9) på både Primär och Sekundär. Det finns nämligen en bugg som gör att inställningarna försvinner ifall du lämnar fältet för Sekundär tomt (se http://support.microsoft.com/support/kb/articles/q178/6/87.asp ). Med Windows 95 medföljer programmet NBTSTAT.EXE, med vilket man kan göra bl.a. NetBIOS-namn-förfrågningar. Om man vill kontakta en dator som av någon anledning inte dyker upp i Browselistan är ett enkelt sätt att välja Start->Kör och sedan skriva in UNC-namnet, exempelvis \\BIGSERVER.

En vanlig anledning till att man inte kan se några datorer i Browselistan är att man ej loggat in, t.ex. att man tryckt Cancel vid inloggningsrutan. En irriterande nackdel med Windows 95 är att man ej kan välja som vilken användare man vill ansluta till en resurs. Detta gör det helt omöjligt att ansluta till två resurser samtidigt med olika användarnamn. Windows NT har inte denna begränsning.

6.3 Windows NT

Windows NT skiljer sig inte särskilt mycket från Windows 95. Server-versionen har dessutom tjänster för t.ex. WINS. Ett problem med NT Server är att den väldigt gärna vill ta över så mycket som möjligt i nätverket. Se därför till att du ej installerar WINS-server-tjänsten, eller sätter upp den som Primary Domain Controller. Även Windows NT har en del tveksamheter vad gäller säkerheten, se t.ex. http://www.rootshell.com/docs/cifs.txt .

7. SMB & Unix

Det mest använda programpaket för SMB under Unix är Samba. Med paketet medföljer ett kommandoradsbaserat och FTP-liknande program kallat "smbclient". Detta passar bra för automatiserade filöverföringar, utskrifter och för att titta på browselistor. Smbclient kan användas för att titta på browselistor, men man måste veta vilken server man ska kontakta. För SUBnet är ett bra tips:

smbclient -L ISIS

Observera: Ibland fungerar det inte att ha med // i början av servernamnet, åtminstone inte mot Windows NT maskiner (verkar det som). För att Samba ska fungera väl på SUBnet bör man ha följande inställningar i /etc/smb.conf (normalt sett):
 
wins support = no Samba ska ej vara WINS-server själv
wins server = ns.student.liu.se Samba ska vara WINS-klient mot ns.student.liu.se (=130.236.230.9)
domain master = no Samba ska ej vara DMB
local master = yes/no Om du brukar ha din dator igång ständigt kan du välja yes.
preferred master = no Medför att en "election" kommer att utlysas när din Samba startar
os level = 33 Om du anser dig ha ett stabilt system och ämnar vara LMB kan du ange ett värde större än 32. Detta medför att du kommer att vinna alla omröstningar över Windows.
remote announce = ns.student.liu.se Om din LMB inte hittar och rapportera dig korrekt till DMB kan du själv rapportera din existens.

I Samba-paketet finns också programmet nmblookup, som kan användas för att göra NetBIOS-namnuppslagningar. Tyvärr är dokumentationen lite bristfällig. Exempel på användning: Du vill fråga WINS-servern efter BIGSERVERs IP-address:

nmblookup -B ns.student.liu.se BIGSERVER#20

Den magiska #20 anger typ-ID för resursen. Exempel på flera sådana är:
 
0x00 base computernames and workgroups, also in "*" queries
0x01 master browser, in magic __MSBROWSE__ cookie
0x03 messaging/alerter service; name of logged-in user
0x20 resource-sharing "server service" name
0x1B domain master-browser name
0x1C domain controller name
0x1D local master-browser name
0x1E domain/workgroup master browser election announcement [?]

Om man vill söka IP-nummer för en dator som ej har WINS inställt kan man göra broadcast på samtliga subnät. Det görs lämpligtvis med följande script:

#!/bin/sh

# Findsmb

for netnum in 232 233 234 235 236 237 238 239 247 249 251; do

nmblookup -B 130.236.$netnum.255 $1 \

| grep '<' &

done

Exempel: För att hitta alla datorer som är LMB i arbetsgruppen SUBNET gör man:

findsmb subnet#1d

7.1 Linux

Till Linux finns paketet SMBFS , som möjliggör att man monterar en SMB-resurs i en katalog i filsystemet. Vanliga användare kan montera resurser med programmet smbmount. WINS-stöd finns.

8. Ordlista

Broadcast Ett meddelande som går ut till nätverkets samtliga noder. Det finns broadcast på Ethernetnivå (exempel: FF:FF:FF:FF:FF:FF) , men också på IP-nivå (exempel: 130.236.232.255).
DMB Domain Master Browser
LMB Local Master Browser
MAC-address En unik address som identifierar alla nätverkskort.
NBNS NetBIOS Name Service. Motsvarighet till DNS fast för NetBIOS namn.
NetBIOS Var ursprungligen en IC-krets på de allra första nätverkskorten, men kan idag betraktas som ett API för nätverksapplikationer.
Resurs En service som en server tillhandahåller. Kan t.ex. vara ett filsystem, en skrivare eller en seriell kommunikationsport.
UNC-notation Ett sätt att få tillgång till nätverksresurser under Windows utan att behöva knyta en enhetsbokstav till resursen. Exempel: \\BIGSERVER\PUBLIC\FOOFILE.COM