## deunicodize -- KEEP THIS PLEASE
= Как я настраиваю ALS4.0 =
(см. также [http://wiki.fosscenter.ru/moin/Portal проект "Портал МПГУ"])
== Установка ==
/!\ вроде замечаний нет?

== Дисциплина создания сервисов ==
  * VEID: системные -- по номеру порта службы, которая на них работает (dns: 53, ftp: 21 и т. п.), остальные -- любой (лучше < 255 :) )
  * VEIP: 192.168.''некий_IP''.''VEID''
  * проброс ssh: host:20VEID -> guest:22 (например, host:2053 -> 192.168.<IP>.53:22)
    * <!> Проброс средствами alterator на двух и более сетевых интерфейсах сделать нельзя
    * /!\ описать `.ssh/config`
  * Имя VE (поле name) -- значащее
    * Используется [http://git.altlinux.ru/people/george/private/?p=rcs.git;a=blob;f=bin/iptables-gen скриптом для автоматического проброса портов]
      * <!> скрипт использует [http://git.altlinux.ru/people/george/private/?p=rcs.git;a=blob;f=bin/functions bin/functions]
    * Формат имени VE (поле name): `<имя>[-<параметр>[-<параметр>...]]`
      * Желательно, чтобы `<имя>` совпадало с именем во внутреннем DNS
    * Формат параметра: `<свойство>[_<значение>[_<значение>...]]`
      * `internal` -- запретить проброс портов (и SSH, и службы)
      * `void` или `nofwd` -- запретить проброс порта службы
      * `port_<порт>[_<порт>...]` -- порт службы не совпадает с VEID, равен `<порт>`
      * `paste` -- VEID не совпадает с IP (последним байтом VEIP), порт службы вычисляется как `<VEID><IP>`
      * `proto_<протокол>[_<протокол>...]` -- пробрасываются порты указанных протоколов 
      * Например, `named-proto_tcp_udp` (VEID=53) приведёт к пробросу трёх портов: 22 (наружный 2053), 53/TCP и 53/UDP. 
    * По умолчанию пробрасвается 22 порт и TCP-порт, равный младшему байту VEIP.
    * Получившуюся выдачу можно вставить в `/etc/sysconfig/iptables`
  * `/etc/resolv.conf` смотрит на внутренний DNS-сервер (см. ниже)
  * `/etc/apt/sources.list` смотрит на внутренний FTP-сервер (см. ниже)
== Хост-сервер ==
=== Обратное проксирование для внутренних HTTP-серверов ===
Идея в том, чтобы принимать HTTP-запросы на любой FQDN из числа хостящихся на внутреннем сервере (скажем, `vhost.other.domain`) и перенаправлять на внутренний сервер (скажем,  `VENAME.server.domain.name`)
  * Устанавливается apache2
  * Включаются mod-ы: proxy, proxy_http
  * Каждый vhost на каждом внутреннем сервере настраивается в каталоге `/etc/httpd2/conf/sites-available` (и затем включается с помощью `a2ensite`)
    * Удобнее всего именовать файлы настроек по FQDN vhost-а (`vhost.other.domain`)
    * Файл `vhost.other.domain.conf`:
    {{{
<VirtualHost *:80>
        Include "conf/sites-available/vhost.other.domain.include"
</VirtualHost>
<IfModule ssl_module>
        <VirtualHost *:443>
                Include "conf/sites-available/vhost.other.domain.include"
                Include "conf/sites-available/ssl.include"
                SSLProxyEngine On
                SSLCertificateFile /etc/httpd2/conf/ssl.crt/vhost.other.domain.crt
                SSLCertificateKeyFile /etc/httpd2/conf/ssl.key/vhost.other.domain.key
        </VirtualHost>
</IfModule>
}}}
    * Файл `vhost.other.domain.include`:
    {{{
ServerName                      vhost.other.domain
    . . .
ProxyRequests Off
<Proxy *>
        Order deny,allow
        Allow from all
</Proxy>
ProxyPreserveHost On
ProxyPass               /       http://VENAME.server.domain.name/
ProxyPassReverse        /       http://VENAME.server.domain.name/
}}}
    *  Файл `ssl.include` содержит общие для всех настройки, например:
    {{{
# Provide default template for virtual hosts
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
<FilesMatch "\.(cgi|shtml|phtml|php)$">
        SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/var/www/apache2/cgi-bin">
        SSLOptions +StdEnvVars
</Directory>
<IfModule log_config_module>
        CustomLog /var/log/httpd2/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</IfModule>
}}}

Обратите внимание, что ssl-ключи vhost-ов лежат на хост-сервере.
/!\ Хранение различных ключей (вида `vhost.other.domain.crt` пока не тестировалось)
=== Проксирование для FTP-сервера ===
  <!> Из-под внешнего NAT будет работать только active FTP со всеми вытекающими. Можно воспользоваться 2 и 3 вариантами, тогда заработает и passive FTP.

  <!> В некоторых случаях ftp helper и/или ядро подглукивают, в результате чего пакеты не скачиваются и dist-upgrade на машинах в сети, например, не проходит :( .

  <!> Скорее всего, на быстрых машинах и сетях придётся увеличивать допустимые beancounter-ы сетевых буферов.

Возможные варианты обхода:
  1. (не проверено) Насильственное ограничение количества соединений в `xinetd.conf` в FTP VE
  1. Присваивание FTP VE адреса из ''внешнего'' диапазона
  1. Расвёртывание FTP-архива на хост-сервере

==== Использование iptables ftp helper ====
  * В файле `/etc/sysconfig/iptables`
  {{{
. . .
-A PREROUTING -d <IP.AD.DR.ES> -i eth0 -p tcp -m helper --helper "ftp" -j DNAT --to-destination 192.168.<IP>.21
}}}
  * В файле `/etc/sysconfig/iptables_modules`
  {{{
. . .
ip_conntrack_ftp
}}}

=== Доступ администраторов виртуальных серверов к контенту ===
/!\ придумать
=== Курица или яйцо? ===
  * `sources.list` правится вручную после запуска FTP-сервера
    {{{
rpm [alt] ftp://ftp.server.domain.name/ALTLinux/branch x86_64 classic
rpm [alt] ftp://ftp.server.domain.name/ALTLinux/branch noarch classic
}}}
  * `resolv.conf` правится вручную после запуска DNS-сервера
    {{{
search server.domain.name
nameserver 192.168.<IP>.53
}}}
== Системные серверы ==
  1.#21 FTP-сервер
    * Содержит дистрибутив
    * Собственный `sources.list` состоит из "`rpm: file:/....`"
    * Указан в `/etc/apt/sources.list` всех других серверов
    * (''необязательно'') установлен `sisyphus-mirror` для обновления
      {{{
. . .
SRCROOT=rsync://rsync.altlinux.org/ALTLinux/4.0
DESTROOT=/var/ftp/ALTLinux
LIST="branch"
. . .
}}}
-----
  1.#53 DNS-сервер
    * Обеспечивает зону для всех внутренних серверов 
    * Для генерации зон используется [http://git.altlinux.ru/people/george/private/?p=rcs.git;a=blob;f=bin/simpleDNS скрипт simpleDNS] (+[http://git.altlinux.ru/people/george/private/?p=rcs.git;a=blob;f=bin/simpleDNS.awk simpleDNS.awk])
      * /!\ Документация на simpleDNS
      {{{
## zone_name is unique, no split horizont provided
# "[" zone_name "]"
# "NS:" Name_server_spec
## MX priorities are calculated automatically by increasing
# "MX:" Mail_xchanger_spec
# name [cname1 cndme2 ...] {ip | partial_ip}
# "IP:" Network_IP
}}}
      * Пример `/var/lib/bind/zone/simpleDNS.profile`:
      {{{
[server.domain.name]
IP: 192.168.<IP>
NS:     192.168.<IP>.53. server.domain.name.
named   53
www     80
moin    81
trac    82
ftp     21
}}}