29.12. Inicializador iSCSI e Configuração Alvo
Anterior | Capítulo 29. Servidores de Rede | Próxima

## 29.12. Inicializador iSCSI e Configuração Alvo

iSCSI é uma maneira de compartilhar o armazenamento em uma rede. Ao contrário do NFS, que funciona no nível do sistema de arquivos, o iSCSI funciona no nível do dispositivo de bloco.

Na terminologia iSCSI, o sistema que compartilha o armazenamento é conhecido como alvo. O armazenamento pode ser um disco físico ou uma área representando vários discos ou uma parte de um disco físico. Por exemplo, se os discos estiverem formatados com ZFS, um zvol poderá ser criado para ser usado como armazenamento iSCSI.

Os clientes que acessam o armazenamento do iSCSI são chamados de iniciadores. Para os iniciadores, o armazenamento disponível por meio do iSCSI aparece como um disco bruto, não formatado, conhecido como LUN. Nós de dispositivo para o disco aparecem em `/dev/` e o dispositivo deve ser formatado e montado separadamente.

O FreeBSD fornece um alvo e iniciador nativo, baseado em kernel iSCSI. Esta seção descreve como configurar um sistema FreeBSD como um alvo ou um iniciador.

### 29.12.1. Configurando um Alvo iSCSI

Para configurar um alvo iSCSI, crie o arquivo de configuração `/etc/ctl.conf`, adicione uma linha ao arquivo `/etc/rc.conf` para certificar-se de que o daemon ctld(8) seja iniciado automaticamente na inicialização e, em seguida, inicie-o.

A seguir, um exemplo de um arquivo de configuração simples `/etc/ctl.conf`. Consulte ctl.conf(5) para obter uma descrição mais completa das opções disponíveis deste arquivo.

    portal-group pg0 {
    	discovery-auth-group no-authentication
    	listen 0.0.0.0
    	listen [::]
    }

    target iqn.2012-06.com.example:target0 {
    	auth-group no-authentication
    	portal-group pg0

    	lun 0 {
    		path /data/target0-0
    		size 4G
    	}
    }

A primeira entrada define o grupo de portais `pg0`. Grupos de portal definem quais endereços de rede o daemon ctld(8) irá escutar. A entrada `discovery-auth-group no-authentication` indica que qualquer iniciador tem permissão para executar descoberta de alvo iSCSI sem autenticação. As linhas três e quatro configuram ctld(8) para escutar em todos os endereços IPv4 (`listen 0.0.0.0`) e IPv6 (`listen [::]`) na porta padrão 3260.

Não é necessário definir um grupo de portais, pois há um grupo de portais interno chamado `default`. Nesse caso, a diferença entre `default` e `pg0` é que com `default`, a descoberta de alvo é sempre negada, enquanto com `pg0`, é sempre permitido.

A segunda entrada define um único alvo. O alvo tem dois significados possíveis: uma máquina que atende iSCSI ou um grupo nomeado de LUNs. Este exemplo usa o último significado, onde `iqn.2012-06.com.example:target0` é o nome do alvo. Este nome de alvo é adequado para fins de teste. Para uso real, altere `com.example` para o nome de domínio real, invertido. O `2012-06` representa o ano e o mês de aquisição do controle desse nome de domínio, e `target0` pode ser qualquer valor. Qualquer número de alvos pode ser definido neste arquivo de configuração.

A linha `auth-group no-authentication` permite que todos os iniciadores se conectem ao alvo especificado e `portal-group pg0` torna o alvo acessível através do grupo do portal `pg0`.

A próxima seção define o LUN. Para o iniciador, cada LUN será visível como um dispositivo de disco separado. Múltiplos LUNs podem ser definidos para cada destino. Cada LUN é identificado por um número, onde LUN 0 é obrigatório. A linha `path/data/target0-0` define o caminho completo para um arquivo ou zvol que suporta o LUN. Esse caminho deve existir antes de iniciar ctld(8). A segunda linha é opcional e especifica o tamanho do LUN.

Em seguida, para ter certeza que o daemon ctld(8) foi iniciado no boot, adicione esta linha ao arquivo `/etc/rc.conf`:

    ctld_enable="YES"

Para iniciar o ctld(8) agora, execute este comando:

    # service ctld start

Quando o daemon ctld(8) é iniciado, ele lê o arquivo `/etc/ctl.conf`. Se este arquivo for editado depois que o daemon iniciar, use este comando para que as mudanças entrem em vigor imediatamente:

    # service ctld reload

#### 29.12.1.1. Autenticação

O exemplo anterior é inerentemente inseguro, pois não usa autenticação, concedendo a qualquer um acesso total a todos os alvos. Para exigir um nome de usuário e senha para acessar os alvos, modifique a configuração da seguinte maneira:

    auth-group ag0 {
    	chap username1 secretsecret
    	chap username2 anothersecret
    }

    portal-group pg0 {
    	discovery-auth-group no-authentication
    	listen 0.0.0.0
    	listen [::]
    }

    target iqn.2012-06.com.example:target0 {
    	auth-group ag0
    	portal-group pg0
    	lun 0 {
    		path /data/target0-0
    		size 4G
    	}
    }

A seção `auth-group` define os pares de nome de usuário e senha. Um inicializador tentando se conectar a `iqn.2012-06.com.example:target0` deve primeiro especificar um nome de usuário e senha definidos. No entanto, a descoberta do alvo ainda é permitida sem autenticação. Para exigir autenticação de descoberta de alvo, defina `discovery-auth-group` como um nome `auth-group` definido em vez de `no-authentication`.

É comum definir um único alvo exportado para cada inicializador. Como um atalho para a sintaxe acima, o nome de usuário e a senha podem ser especificados diretamente na entrada do alvo:

    target iqn.2012-06.com.example:target0 {
    	portal-group pg0
    	chap username1 secretsecret

    	lun 0 {
    		path /data/target0-0
    		size 4G
    	}
    }

### 29.12.2. Configurando um Inicializador iSCSI

### Nota:

O inicializador iSCSI descrito nesta seção é suportado a partir do FreeBSD 10.0-RELEASE. Para usar o inicializador iSCSI disponível em versões mais antigas, consulte iscontrol(8).

O inicializador iSCSI requer que o daemon iscsid(8) esteja em execução. Este daemon não usa um arquivo de configuração. Para iniciá-lo automaticamente na inicialização, adicione esta linha ao arquivo `/etc/rc.conf`:

    iscsid_enable="YES"

Para iniciar iscsid(8) agora, execute este comando:

    # service iscsid start

Conectar-se a um alvo pode ser feito com ou sem um arquivo `/etc/iscsi.conf` de configuração. Esta seção demonstra os dois tipos de conexões.

#### 29.12.2.1. Conectando-se a um Alvo sem um Arquivo de Configuração

Para conectar um inicializador a um único alvo, especifique o endereço IP do portal e o nome do alvo:

    # iscsictl -A -p 10.10.10.10 -t iqn.2012-06.com.example:target0

Para verificar se a conexão foi bem sucedida, execute `iscsictl` sem nenhum argumento. A saída deve ser semelhante a esta:

    Target name                                     Target portal   State
    iqn.2012-06.com.example:target0                 10.10.10.10     Connected: da0

Neste exemplo, a sessão iSCSI foi estabelecida com sucesso, com `/dev/da0` representando o LUN anexado. Se o destino `iqn.2012-06.com.example:target0` exportar mais de um LUN, vários nós de dispositivos serão mostrados nessa seção da saída:

    Connected: da0 da1 da2.

Quaisquer erros serão relatados na saída, assim como os logs do sistema. Por exemplo, esta mensagem normalmente significa que o daemon iscsid(8) não está em execução:

    Target name                                     Target portal   State
    iqn.2012-06.com.example:target0                 10.10.10.10     Waiting for iscsid(8)

A mensagem a seguir sugere um problema de rede, como uma porta ou endereço IP incorreto:

    Target name                                     Target portal   State
    iqn.2012-06.com.example:target0                 10.10.10.11     Connection refused

Esta mensagem significa que o nome do alvo especificado está errado:

    Target name                                     Target portal   State
    iqn.2012-06.com.example:target0                 10.10.10.10     Not found

Esta mensagem significa que o alvo requer autenticação:

    Target name                                     Target portal   State
    iqn.2012-06.com.example:target0                 10.10.10.10     Authentication failed

Para especificar um nome de usuário e uma senha de CHAP, use esta sintaxe:

    # iscsictl -A -p 10.10.10.10 -t iqn.2012-06.com.example:target0 -u user -s secretsecret

#### 29.12.2.2. Conectando-se a um Alvo com um Arquivo de Configuração

Para se conectar usando um arquivo de configuração, crie o `/etc/iscsi.conf` com o seguinte conteúdo:

    t0 {
    	TargetAddress   = 10.10.10.10
    	TargetName      = iqn.2012-06.com.example:target0
    	AuthMethod      = CHAP
    	chapIName       = user
    	chapSecret      = secretsecret
    }

O `t0` especifica um nickname para a seção do arquivo de configuração. Ele será usado pelo iniciador para especificar qual configuração usar. As outras linhas especificam os parâmetros a serem usados ​​durante a conexão. O `TargetAddress` e `TargetName` são obrigatórios, enquanto as outras opções são opcionais. Neste exemplo, o nome de usuário e a senha do CHAP são mostrados.

Para se conectar ao alvo definido, especifique o apelido:

    # iscsictl -An t0

Como alternativa, para conectar-se a todos os alvos definidos no arquivo de configuração, use:

    # iscsictl -Aa

Para fazer com que o inicializador se conecte automaticamente a todos os alvos no arquivo `/etc/iscsi.conf`, adicione o seguinte ao arquivo `/etc/rc.conf`:

    iscsictl_enable="YES"
    iscsictl_flags="-Aa"

Anterior | Acima | Próxima
29.11. Sincronização de Relógio com NTP | Principal | Capítulo 30. Firewalls

All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/

Questions that are not answered by the documentation may be sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.