пятница, 28 августа 2009 г.

ssh без пароля под linux и windows

Аутентификация по RSA ключам - удобная штука. Рассмотрим 2 варианта. Unix клиент - Unix сервер и Windows клиент - Unix сервер. На сервере должен быть поднят sshd. Файл конфигурации:
/etc/ssh/sshd_config
Protocol 2
Port 22
ListenAddress ::
AllowTcpForwarding no
GatewayPorts no
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes
PrintMotd no
KeepAlive yes
SyslogFacility auth
LogLevel info
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
ServerKeyBits 768
KeyRegenerationInterval 3600
StrictModes yes
LoginGraceTime 600
MaxAuthTries 6
MaxAuthTriesLog 3
PermitEmptyPasswords no
PasswordAuthentication yes
PAMAuthenticationViaKBDInt yes
PermitRootLogin no
Subsystem sftp /usr/lib/ssh/sftp-server
IgnoreRhosts yes
RhostsAuthentication no
RhostsRSAAuthentication no
RSAAuthentication yes

Для того, чтобы подключиться с одной Unix машины на другую делаем следующее. На клиенте (с которой будем заходить) генерим пару ключей private/public.

om@rnd1 # ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (//.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in //.ssh/id_rsa.
Your public key has been saved in //.ssh/id_rsa.pub.
The key fingerprint is:
14:fb:6d:ed:4b:af:d2:86:d3:e8:e7:50:4e:51:55:1b root@rnd1

Далее заходим на сервер (к которому будем подключаться) под пользователем om (к примеру). Наша цель - получить беспарольную аутентификация для пользователя om. В папке пользователя есть директория .ssh. Cоздаём в ней файл authorized_keys.

bash-2.05$ pwd
/export/home/om
bash-2.05$ cd .ssh/
bash-2.05$ touch authorized_keys

Вставляем в него public ключ. В результате получаем файл:
bash-2.05$ cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAnsRA4X58e33MBxU3iSiVjjB91x4tLyTlbr90Qk5RoZMnaejnEjKfxaCzKLhBR6MOViugjJe6sXhpuCOeBu1LYL2IyIkSrm+Q/NfDgNWnXkHZWLx9COmtQ0+sqrwxwjiJf1yuyuGXUy3DpUX5f9/M2BUfQXP7389NjK3YiQWSluc= om@rnd1

Проверяем. На машине клиенте:
root@rnd1 # ssh -l om 10.10.0.165
Last login: Sat Aug 29 10:34:13 2009 from 10.10.0.179
Sun Microsystems Inc. SunOS 5.9 Generic May 2002
bash-2.05$

Готово.

Теперь для Windows. Я пользуюсь ssh клиентом putty. На мой взгляд самая удобная прога. Ходят слухи, что она некорректно работает с serial портом, но я такого не замечал. Для того, чтобы сгенерить пару ключей нам понадобится программа puttygen.exe. Гуглим, качаем, ставим.

Для того, чтобы сгенерился ключ нужно поводить мишой по окну программы для генерации random.


Система таже самая. public ключ прописываем на Unix сервере, на который будем заходить без пароля. В папке пользователя заходим в .ssh, в ней создаем authorized_keys. Вставляем строчку с public ключем.
Теперь создаём сессию в putty. Вбиваем ip адрес сервера или доменное имя. Заполняем имя пользователя в Session - Connection - Data (Auto-login username). Далее Session - Connection - SSH - Auth в поле Authentication parameters ставим галку на Allow agent forwarding. Ниже в поле Key грузим наш public ключ. Не забываем сохранить сессию. Проверяем.

Using username "om".
Authenticating with public key "rsa-key-20090828"
Last login: Fri Aug 28 15:26:14 2009 from 10.10.0.101
bash-2.05$ id
uid=1001(om) gid=1(other)
bash-2.05$

Вот так.

суббота, 22 августа 2009 г.

IPtables, port forwarding

Нашёл файлики с примерами.
Быстро и просто:
#Проброс трафика RDP
iptables -t nat -A PREROUTING -p tcp -d 217.13.45.67 --dport 3389 -j DNAT --to-destination 192.168.1.21:3389

Не забываем, как iptables обрабатывает трафик:



Соотв нужно правило для цепочки FORWARD.

четверг, 20 августа 2009 г.

Pop-Top или VPN сервер на Linux с использованием PPTPD.




В своё время задача доставила мне хлопот. Имеется 2 линуксовых машины. Сервер - Mandriva 2007, client - Ubuntu Server 8.04 LTS - отличная система. Собственно vpn гейт сделан в первую очередь для того, чтобы виндовые пользовтели имели доступ к корпоративной локалке, файловому самбовому серваку и т.д. Но от того чтоб сделать туннель между линуксами я тож не удержался... изначально сервак был без шифрования, потом всётки решил, что оно пригодится :)

Итак параметры немного отличаются в разных версиях pptpd. В манах все подробно описано. Нам нужно, чтоб на машине были pppd, pptpd, pptpd-client.
Настраиваем vpn сервер. Конфиги:

[root@gate ~]# cat /etc/pptpd.conf
option /etc/ppp/options.pptpd
logwtmp
speed 115200

# IP-адрес сервера в локальной сети
localip 172.26.0.1

# Диапазон адресов для клиентов PPTP-сервера
remoteip 172.26.0.2-254

debug

[root@gate ~]# cat /etc/ppp/options.pptpd
lock
debug
auth
refuse-pap
refuse-chap
proxyarp
mppe stateless
ms-dns 172.26.0.1
ms-dns 192.168.0.2
#require-chapms
require-mschap-v2
#+chapms-v2
novj
novjccomp
nologfd



[root@gate ppp]# cat /etc/ppp/options

lock
noauth
noipdefault
usepeerdns
mppe required

[root@gate ppp]# cat chap-secrets
# Secrets for authentication using CHAP
# client server secret IP addresses


# Если мы хотим привязать определённый IP к логину:
vpupkin * 12311jj12 172.26.0.37
vbukin * asda 172.26.0.5
и т.д.
чтобы дать динамич ip ставим вместо адреса звёздочку.

Не забываем про IPTABLES:
#VPN SERVER разрешаем GRE. Нужно помнить, что это portless протокол ;)
$IPTABLES -A INPUT -i $INTERNET -p gre -j ACCEPT
$IPTABLES -A OUTPUT -o $INTERNET -p gre -j ACCEPT

#Ну и дырочка, через которую мы будем заходить на сервер :)
$IPTABLES -A INPUT -i $INTERNET -p tcp -m tcp --dport 1723 -j ACCEPT
$IPTABLES -A OUTPUT -o $INTERNET -p tcp -m tcp --dport 1723 -j ACCEPT

Настройки Linux клиента:

root@file:/etc/ppp# cat options
name vpupkin
remotename vpn
defaultroute
asyncmap 0
crtscts
hide-password
local
lcp-echo-interval 30
lcp-echo-failure 4
noipx
lock
debug
auth
refuse-pap
refuse-chap
proxyarp
#mppe stateless
require-mschap-v2
novj
novjccomp

Собственно подключение для конкретного аккаунта.
root@file:/etc/ppp/peers# cat vpn
pty "pptp 192.168.0.3 --loglevel 2 --nolaunchpppd"
user vpupkin
password "12311jj12"
nodeflate
nobsdcomp
noauth
lock
noproxyarp
nomppe-stateful
require-mppe-128 #Включаем шифрование
file /etc/ppp/options.pptp

root@file:~# cat /etc/ppp/options.pptp
lock
noauth
nobsdcomp
nodeflate
persist
mppe-stateful
#mppe-stateless
#require-mschap-v2

Набираем в строке клиента:

Client:
pppd call vpn

/var/log/messages
Aug 20 22:24:36 file pppd[995]: pppd 2.4.4 started by root, uid 0
Aug 20 22:24:36 file pppd[995]: Using interface ppp0
Aug 20 22:24:36 file pppd[995]: Connect: ppp0 <--> /dev/pts/1
Aug 20 22:24:40 file pppd[995]: CHAP authentication succeeded
Aug 20 22:24:40 file pppd[995]: MPPE 128-bit stateless compression enabled
Aug 20 22:24:43 file pppd[995]: local IP address 172.26.0.11
Aug 20 22:24:43 file pppd[995]: remote IP address 172.26.0.1


root@file:~# ifconfig ppp0

ppp0 Link encap:Point-to-Point Protocol
inet addr:172.26.0.11 P-t-P:172.26.0.1 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1496 Metric:1
RX packets:9 errors:0 dropped:0 overruns:0 frame:0
TX packets:17 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:125 (125.0 B) TX bytes:669 (669.0 B)


Server:

/var/log/messages
Aug 20 22:24:38 gate pptpd[31628]: CTRL: Client 192.168.0.2 control connection started
Aug 20 22:24:39 gate pptpd[31628]: CTRL: Starting call (launching pppd, opening GRE)
Aug 20 22:24:39 gate pppd[31629]: Plugin /usr/lib/pptpd/pptpd-logwtmp.so loaded.
Aug 20 22:24:39 gate pppd[31629]: pptpd-logwtmp: $Version$
Aug 20 22:24:39 gate pppd[31629]: pppd 2.4.3 started by root, uid 0
Aug 20 22:24:39 gate pppd[31629]: Using interface ppp1
Aug 20 22:24:39 gate pppd[31629]: Connect: ppp1 <--> /dev/pts/3
Aug 20 22:24:42 gate pppd[31629]: MPPE 128-bit stateless compression enabled
Aug 20 22:24:45 gate pppd[31629]: Cannot determine ethernet address for proxy ARP
Aug 20 22:24:45 gate pppd[31629]: local IP address 172.26.0.1
Aug 20 22:24:45 gate pppd[31629]: remote IP address 172.26.0.11
Aug 20 22:24:45 gate pppd[31629]: pptpd-logwtmp.so ip-up ppp1 vpupkin 192.168.0.2

Тунель создан. Как видно у клиента более свежая версия pptpd :)

Из винды всё проще. Создать подключение - подключение к сети на рабочем месте - подключенме к vpn - имя - ip. Потом в свойствах включаем шифрование (вроде уже включено по умолчанию). И всё. Вуаля:



Будут вопросы, милости прошу - icq #53819426.

Балансировка двух каналов средствами ipfw под FreeBSD




natd -p 8668 -a ip1
natd -p 8669 -a ip2

ipfw add divert 8668 ip from any to ip1 recv if1
ipfw add divert 8669 ip from any to ip2 recv if2
ipfw add check-state
ipfw add prob 0.5 divert 8668 ip from 192.168.0.0/16 to any xmit if1 keep-state
ipfw add divert 8669 ip from 192.168.0.0/16 to any xmit if1 keep-state
ipfw add fwd gw1 ip from ip1 to any out xmit if1 (если default на if1)
ipfw add fwd gw2 ip from ip2 to any out xmit if2

OpenVPN на Solaris 10



OpenVPN на Solaris 10

Столкнулся на днях с необходимостью поднять на Solaris VPN-сервер. После мучительных поисков пришлось ставить OpenVPN. Есть пакет на blastwave, но лучше всегда собирать самому. Прежде необходимо установить драйвер "tun". Если у вас 64-x разрядная система, то в пакете с sourceforge в файле "solaris/Makefile" надо прописать CFLAGS:


CFLAGS = -m64 -mcmodel=kernel -mno-red-zone -ffreestanding $(DEFS) -O2 -Wall -D_KERNEL -I.



Затем - "make & make install". Драйвер кладется не туда, куда надо, поэтому ручками переместите:


# mv /usr/kernel/drv/tun /kernel/drv/sparcv9


Затем:


# devfsadm -i tun


Выругался? Тогда скачайте драйвер отсюда - этот должен поставиться без проблем ("'./configure', 'make', 'make install').
Если собираете сами, надо еще сначала поставить LZO отсюда ("INSTALL=/usr/ucb/install ./configure", "
make & make install"), потом уже собственно OpenVPN ( "./configure --with-lzo-headers=/usr/local/include --with-lzo-lib=/usr/local/lib", "make & make install"), если ставите с blastwave, то просто устанавливаете openvpn.
Приведу примеры конфигурационных файлов для проверки работоспособности. Свои сертификаты создадите сами, для проверки соединения можно использовать тестовые файлы из архива OpenVPN. Итак, сервер (Solaris):


port 1194
proto tcp-server
dev tun
tls-server
ca /etc/openvpn/tmp-ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh1024.pem
server 192.168.77.0 255.255.255.0
route 192.168.1.0 255.255.255.0
keepalive 10 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status /var/log/openvpn-status.log
verb 4
mute 20
writepid /var/run/openvpn.pid


Запуск на сервере (пакет с blastwave идет с rc-скриптом, для теста из консоли можно просто дать команду "openvpn --config /etc/openvpn/openvpn.conf").
Теперь клиент:


dev tun
client
remote 82.*.. 1194 # real IP of Solaris
tls-client
ca /etc/openvpn/tmp-ca.crt
cert /etc/openvpn/client.crt
key /etc/openvpn/client.key
proto tcp-client
comp-lzo


В качестве клиента использовался Debian, где openvpn ставится с помощью "apt-get". Запуск клиента тот же:


# openvpn --config /etc/openvpn/openvpn.conf


Соединение установилось без проблем, чего нельзя сказать о Windows Vista - запущенный на ней OpenVPN GUI-клиент ругался на маску сети, и, провозившись безрезультатно около получаса, я сдался - возможно это причуды Vista и на XP проблем не будет - пробуйте, кому надо.





Мой конфиг сервера:

port 1194
proto tcp-server
dev tun
tls-server
ca /etc/openvpn/tmp-ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh1024.pem
server 10.10.0.0 255.255.255.0
route 172.26.17.0 255.255.255.0 10.10.0.1
route 10.10.0.0 255.255.255.0 10.10.0.1
push "redirect-gateway"
keepalive 10 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status /var/log/openvpn-status.log
verb 4
mute 20
writepid /var/run/openvpn.pid

Настройка BIND + DHCPD

2. Настройка первичного(master) DNS сервере и создание прямой и обратной зоны.
Пред.
Глава 3. Настройка DNS сервера След.

________________________________________
2. Настройка первичного(master) DNS сервере и создание прямой и обратной зоны.
Допустим у Вас есть доменное имя mynet.lan Вам хочется сделать свой сервер первичным сервером для этого домена и использовать у себя в сети доменные имена www.mynet.lan, kolya.mynet.lan и т.д. Для этого сначала попрвим файл /etc/named.conf
/////////////////////////////////////////////////////////
key mykey {
algorithm hmac-md5;
secret "IriCelUSbPMypSjImBsiTHMauOumRPMkdBjoxVINAx0vxJZNRKGWzFCKibad";

};
controls {
inet 127.0.0.1 allow { any; } keys { "mykey"; };

// эту строка добавлена здесь для целей которые описанны в главе про DHCP
inet 192.168.1.4 allow { any; } keys { "mykey"; };

// здесь вместо 222.222.222.222 проставте ip DNS сервера вашего провайдера
forwarders { 127.0.0.1; 222.222.222.222; };
forward first;
};
options {
pid-file "/var/run/named/named.pid";
directory "/var/named";
/*
* If there is a firewall between you and nameservers you want
* to talk to, you might need to uncomment the query-source
* directive below. Previous versions of BIND always asked
* questions using port 53, but BIND 8.1 uses an unprivileged
* port by default.
*/
// query-source address * port 53;
};

//
// a caching only nameserver config
//
zone "." {
type hint;
file "named.ca";
};
zone "0.0.127.in-addr.arpa" {
type master;
file "named.local";
};

// Прямая и обратные зоны для домена mynet.lan

zone "mynet.lan" {
type master;
file "mynet.zone";
allow-update { key mykey; };
};

zone "1.168.192.in-addr.arpa" {
type master;
file "mynet.reversed";
allow-update { key mykey; };
};
/////////////////////////////////////////////////////////
Как мы видим в конце файла добавилены две записи "zone". Теперь нам необходимо создать еще 2 файла содержащих прямую и обратную зону.
Создаем файл обратной зоны /var/named/mynet.reversed.
$ORIGIN .
$TTL 86400 ; 1 day
1.168.192.in-addr.arpa IN SOA ns.mynet.lan. ns.mynet.lan. (
2001042703 ; serial
28800 ; refresh (8 hours)
14400 ; retry (4 hours)
3600000 ; expire (5 weeks 6 days 16 hours)
86400 ; minimum (1 day)
)
NS ns.mynet.lan.
$ORIGIN 1.168.192.in-addr.arpa.
$TTL 3600 ; 1 hour
1 PTR router.mynet.lan.
4 PTR ns.mynet.lan.


теперь создаем файл прямой зоны /var/named/mynet.zone
$ORIGIN .
$TTL 86400 ; 1 day
mynet.lan IN SOA ns.mynet.lan. ns.mynet.lan. (
2001042705 ; serial
86400 ; refresh (1 day)
21600 ; retry (6 hours)
3600000 ; expire (5 weeks 6 days 16 hours)
3600 ; minimum (1 hour)
)
NS ns.mynet.lan.
$ORIGIN mynet.lan.
localhost A 127.0.0.1
ns A 192.168.1.4
router A 192.168.1.1
www A 192.168.1.1


По аналогии в конец файла прямой и обратной зон вы можете дописывать все что угодно. Обратите внимание на то что изменения вступают в силу только после изменения поля "serial". Обычно после внесения любых изменений в эти файлы serial увеличивают на 1.




3. Передача(forward) зоны
Иногда необходимо отдать какуюто часть домена для обслуживания другому DNS серверу. Это называется форвардинг зоны. Для этого можно просто добавить примерно такую запись в файл /etc/named.conf
zone "subnet.mynet.lan"{
type forward first;
forwarders {10.10.10.10;};
};
В этом примере subnet.mynet.lan - поддомен который вы передаете DNS серверу с IP 10.10.10.10. С этого момента обращения за доменными именами *.subnet.mynet.lan будут проходить не к вашеиу DNS серверу а к серверу 10.10.10.10
4. Настройка вторичного(secondary) DNS сервера
Иногда необходимо "просекондарить зону" - тоесть настроить свой DNS таким образом чтобы он был вторичным DNS сервером для какой либо зоны. По правилам необходимо чтобы у каждого первичного DNS сервера (master) было как минимум 2 вторичных (slave). Также это может быть необходимо если вам по какимто причинам нужно сделать свой сервер "авторитетным" для какой либо произвольной зоны. Просекондерить свой DNS можно двумя способами:
• С помощью web сервиса на http://secondary.net.ua/
• Настроить свой сервер самостоятельно добавив в файл /etc/named.conf примерно такую запись:
zone "subnet2.mynet.lan" {
type slave;
file "subnet2.mynet.lan.slave";
masters { 10.10.10.10; };
};
В этом примере мы "секондарим" зону subnet2.mynet.lan первичным DNS сервером которой является сервер с IP 10.10.10.10 . после перезапуска DNS сервера должен создаться файл /var/named/subnet2.mynet.lan.slave в котором будет зона которую мы секондарим.
Глава 4. Настройка DHCP сервера
1. Простейший DHCP сервер
2. Настройка динамического DHCP сервера, связанного с DNS
DHCP (Dynamic Host Configuration Protocol), динамический протокол настройки хостов - это протокол, который дает возможность компьютерам в сети получать свои сетевые настройки у сервера. В “сетевые настройки” входит IP-адрес, маска подсети, адрес DNS сервера, шлюз по умолчанию (default gateway). Также DHCP может взаимодействовать с DNS сервером и динамически менять в нем имена хостов. В GNU/Linux протокол DHCP поддерживается демоном dhcpd
1. Простейший DHCP сервер
Установим DHCP сервер:
# urpmi dhcpd
Запуск DHCP сервера:
# /etc/init.d/dhcpd start
Останов DHCP сервера:
# /etc/init.d/dhcpd stop
После установки необходимо создать конфигурационный файл /etc/dhcpd.conf. Можно просто скопировать файл примера:
cp /etc/dhcpd.conf.sample /etc/dhcpd.conf
Далее мы будем вносить изменения в этот конфигурационный файл /etc/dhcpd.conf.
Рассмотрим самый простейший вариант использования DHCP сервера: пусть мы хотим, чтобы все хосты в сети 192.168.1.0/24 получали IP в диапазоне 192.168.1.128-250. Также нам нужно, чтобы машины в сети использовали по умолчанию шлюз 192.168.1.1 и DNS сервер 192.168.1.4. Кроме того нам нужно чтобы клиентская машина знала что она работает в домене mynet.lan.
Настройки такого сервера выглядят следующим образом:
ddns-update-style none;
subnet 192.168.1.0 netmask 255.255.255.0
{
option routers 192.168.1.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.1.4;
option domain-name "mynet.lan";

range 192.168.1.128 192.168.1.250;
}
В нашем примере первая, обратившаяся за настройками, машина получит адрес 192.168.1.250, следующая 192.168.1.249 ну и так далее.
В случае, если нам нужно, чтобы некоторые компьютеры в сети получали вместо случайных адресов только жестко закрепленный за ними адрес (в соответствии с аппаратным MAC-адресом сетевой карты), тогда можно использовать такую конфигурацию:
ddns-update-style none;
subnet 192.168.1.0 netmask 255.255.255.0
{
option routers 192.168.1.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.1.4;

range 192.168.1.128 192.168.1.250;

host smith # Вася Сидоров :-)
{
hardware ethernet 00:0c:29:8b:02:e7;
fixed-address 192.168.1.5;
}

host neo # Коля Петров
{
hardware ethernet 00:22:22:22:22:22;
fixed-address 192.168.1.6;
}
}
В этом примере IP-адреса раздаются с привязкой к MAC-адресу сетевой карты. Сетевая карта с MAC 00:0c:29:8b:02:e7 всегда будет получать адрес 192.168.1.5, а сетевая карта с MAC 00:22:22:22:22:22 соответственно адрес 192.168.1.6, а остальные компьютеры в сети будут получать адреса случайным образом в диапазоне с 192.168.1.128 по 192.168.1.250. Если мы хотим чтобы IP-адреса получали только компьютеры, привязанные к MAC, тогда в данном примере нужно закомментировать строку range 192.168.1.128 192.168.1.250;.
2. Настройка динамического DHCP сервера, связанного с DNS
Работает это следующим образом: машина в сети получает случайный IP-адрес и, при получении этого IP, DHCP сервер перенастраивает DNS сервер таким образом, чтобы у компьютеров в сети независимо от того, какой у них в данный момент IP, всегда было одно и тоже доменное имя.
Файлы /etc/named.conf, /var/named/mynet.reversed, /var/named/mynet.zone должны выглядеть точно так, как было описано здесь: Глава 3. Настройка DNS сервера.
Теперь приведем как должен выглядеть файл /etc/dhcpd.conf:
### begin of /etc/dhcpd.conf #################################################
ddns-update-style ad-hoc;

subnet 192.168.1.0 netmask 255.255.255.0
{
option routers 192.168.1.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.1.4;

range 192.168.1.5 192.168.1.250;

ddns-updates on;
ddns-domainname "mynet.lan";
ddns-rev-domainname "in-addr.arpa";

option domain-name "mynet.lan";

# Этот "secret" нужно пересоздать с помощью команды dnssec-keygen
# он должен быть ОДИНАКОВЫМ в этом файле, а также в
# /etc/named.conf /etc/rndc.conf /etc/rnd.key
key mykey {
algorithm hmac-md5;
secret "IriCelUSbPMypSjImBsiTHMauOumRPMkdBjoxVINAx0vxJZNRKGWzFCKibad";
};

zone mynet.lan. {
primary 192.168.1.4;
key mykey;
}

zone 1.168.192.in-addr.arpa. {
primary 192.168.1.4;
key mykey;
}

host smith # Агент Смит
{
hardware ethernet 00:0c:29:8b:02:e7;
# option host-name "vasya";
ddns-hostname "smith";
}

host neo # Коля Петров
{
hardware ethernet 00:22:22:22:22:22;
# option host-name "kolya";
ddns-hostname "neo";
}
}
### end of /etc/dhcpd.conf #################################################
В этом примере машина с МАС-адресом 00:0c:29:8b:02:e7 получит имя smith.mynet.lan, а машина с МАС-адресом 00:22:22:22:22:22 получит имя neo.mynet.lan. Имена остальных машин будут формироваться на основе запроса DHCP клиента. В случае с M$ Window$ это будет “имя компьютера”.
Для того, чтобы DHCP сервер мог управлять DNS сервером, необходимо также отредактировать следующие файлы: /etc/rndc.conf
###### begin of /etc/rndc.conf ##################
key mykey {
algorithm hmac-md5;
secret "IriCelUSbPMypSjImBsiTHMauOumRPMkdBjoxVINAx0vxJZNRKGWzFCKibad";
};

options {
default-key mykey;
default-server 127.0.0.1;
default-port 953;
};
###### End of /etc/rndc.conf #####################
и /etc/rndc.key
key mykey {
algorithm hmac-md5;
secret "IriCelUSbPMypSjImBsiTHMauOumRPMkdBjoxVINAx0vxJZNRKGWzFCKibad";
};
После выполнения всех этих настроек перезапускаем DNS сервер и DHCP сервер и работаем.

среда, 19 августа 2009 г.

Компиляция ядра Linux




Приходилось проделывать данную операцию. Неплохая статья. Источник, кажется, Opennet.

1. Качаем

Для начала нужно выкачать само ядро [точнее исходники] с сайта http://www.kernel.org

Качайте архив tar.bz2 - он меньше по размеру. Имя файла должно быть примерно таким - linux-2.6.0.tar.bz2 , размер файла около 33 Мбайт. Качайте всегда последнее стабильное ядро.

Если у вас уже есть ядро 2.6.0. , а вам нужно поставить например 2.6.2, то необязательно качать снова 33 Мбайта, можно выкачать заплатки [их также называют еще "патчи", но давайте говорить на русском] и обновить исходники вашего ядра до последней версии. В таком случае вам нужно выкачать все заплатки по возрастанию номеров версии от вашей версии до последней. В данном примере это заплатки 2.6.1 и 2.6.2. Файлы заплаток называются так - patch-2.6.1.bz2 . Их может не быть на главной странице , поищите их на ftp сервере.

Кроме самого ядра нам возможно понадобится выкачать дополнительные заплатки, расширяющие возможности ядра. К примеру, в ядре 2.6 нет поддержки lirc (пульты дистанционного управления). Чтобы эта поддержка была, на ядро нужно наложить соответствующую заплатку.

Для примера возьмем такие заплатки:

1. bootsplash (графическая загрузка Линукса) с http://www.bootsplash.org
2. win4lin (для одноименной программы эмуляции windows) http://www.netraverse.com
3. lirc (поддержка устройств с ПДУ) - на официальном сайте http://www.lirc.org заплаток нет но вы можете их найти с помощью> http://www.google.ru по имени файла

Качать лучше заплатку для той версии ядра которую вы хотите поставить, если их нет, то можно закачать для самой последней из имеющихся. В таком случае есть вероятность что заплатка не поставится. Причем вероятность этого тем больше, чем больше разница в версиях ядер. Предположим что мы ставим ядро 2.6.1 и получили такие файлы

1. linux-2.6.0.tar.bz2
2. patch-2.6.1.bz2
3. bootsplash-3.1.3-2.6.0-test9.diff
4. Kernel-Win4Lin3-2.6.0.patch и mki-adapter26_1_3_3.patch
5. patch-lirc-20031219.diff

Хорошо. Теперь подготовим папку, где будем собирать ядро. В Линуксе для сборки из исходников есть специальный каталог /usr/src. Однако по умолчанию писать туда рядовому пользователю запрещено, поэтому сначала дадим себе права. Самый простой способ - запустить консоль, получить права root и командой chmod разрешить всем запись.

[mike@localhost mike]$ su -
Password:
[root@localhost root]# chmod a+w /usr/src
[root@localhost root]#

Копируем исходники ядра ( linux-2.6.0.tar.bz2) в папку /usr/src

Теперь их надо распаковать. Если вы пользуетесь файловым менеджером mc, на файле нажмите F2, а потом "x". Если вы пользуетесь файловым менеджером gentoo (http://linux.alhimia.ru/projects/gentoo/), то щелкните правой кнопкой и выберите Действия - РаспаковатьСюда.

Получился каталог linux-2.6.0. Переименуйте его, например, в linux-2.6.1-my

Копируем все заплатки туда и переходим к следующему пункту.
3 Компилируем
3.1 Подготовка

Для начала давайте посмотрим файл Makefile. Нас интересуют первые 4 строчки

VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 1
EXTRAVERSION =
...

Измените четвертую строку на

EXTRAVERSION = my

Это приведет к тому, что сделанное нами ядро будет называться linux-2.6.1-my. Если нам нужно будет несколько вариантов ядра 2.6.1, то можно снова изменить строчку EXTRAVERSION=my2, скомпилировать ядро еще раз и получить ядро linux-2.6.1-my2. ,что позволит при загрузке выбирать вариант ядра.
3.2 Чистка

Запустите команду make mrproper

[mike@localhost linux-2.6.1-my]$ make mrproper
RM $(CLEAN_FILES)
Making mrproper in the srctree
RM $(MRPROPER_DIRS) + $(MRPROPER_FILES)
[mike@localhost linux-2.6.1-my]$

Эта команда нужна для удаления временных файлов, созданных при предыдущей сборке. Она удаляет также все настройки, которые вы сделали во время прошлой сборки. (Настройки лежат в файле .config, если есть желание перенесите куда-нибудь этот файл, выполните чистку, а потом верните обратно)
3.3 Настройка ядра.

А вот сейчас начинается самый ответственный момент, от которого зависит успех всего мероприятия. Здесь нужно знать хотя бы немного английский и знать начинку компьютера. Для начала немного теории.

Ядро может быть монолитным, а может быть модульным. Что это означает? Монолитное ядро - это просто один файл, который грузится при старте системы, и сидит в оперативке до выключения компьютера. Те возможности, которые заложены в этом файле, не подлежат изменению. Если включить все возможности в ядро, получаем очень большое и очень медленное ядро. Если сделать маленькое и быстрое ядро, то придется пожертвовать возможностями. Кроме того с таким ядром не смогут работать такие коммерческие программы как Win4Lin . На таком ядре не поставить драйвер видеокарты от фирмы Nvidia, что ставит крест на использовании этих ядер на домашних игровых компьютерах с этими видеокартами. В чем же преимущество монолитного ядра? Оно хорошо своей более высокой защищенностью и более простым использованием. При старте ядро обладает всеми возможностями, которые в него заложены. Ядро в этом случае располагается в каталоге /boot и имеет имя vmlinuz-xxxx.

Модульное ядро - это тоже же файл, который грузиться при загрузке с диске как и в случае с монолитным ядром, но плюс к есть нему набор файлов, которые называются модулями. Эти файлы по сути - возможности ядра, которые вы можете подключить к ядру и отключить от него без перезагрузки компьютера. Ядро которое у вас поставилось вместе с дистрибутивом - модульное. В модульном ядре все возможности, которые могут быть выведены в отдельный файл, т.е. модуль, - делаются модульными. Самый большой плюс модульного ядра - то что в него можно включить абсолютно все возможности, на что может ядро, все устройства, все файловые системы и т.п. Ядро в результате получается небольшим (в оперативной памяти) , быстрым и гибким. Минусы такого подхода - собственно в необходимости работы с модулями, вы не получите возможности модуля, пока его не загрузите. К счастью, большинство модулей грузиться автоматически, а остальные грузятся при старте системы загрузочными скриптами, избавляя вас от необходимости грузить вручную десятки модулей. В этом случае ядро представлено тем же файлом /boot/vmlinuz-xxxx и содержимым каталога /lib/modules/<версия ядра>. Кроме того модульному ядру нужен специальный образ загрузки т.н. initrd. Этот образ содержит все необходимые модули которые позволяют ядру загрузить ситему. Без этих модулей оно неспособно подключить системный раздел жесткого диска и прочитать файлы. Initrd файл располагается в каталоге /boot и имеет имя initrd-xxxx.

Где же истина? Как всегда, посередине. Какие-то возможности вы включаете в ядро, какие-то делаете модулями. Какие именно? Те возможности которые вам нужны постоянно - включаете, например драйвер жесткого диска, на котором лежит система. Если к вам приходит друг раз в месяц со своей usb фотокамерой - делайте драйвер usb и камеры модулями. Если сомневаетесь, нужна ли вам та или иная особенность - ставьте модулем. Посмотреть какие модули сейчас загружены в систему вы можете командой lsmod

Если ваш дистрибутив собран для 2.4 ядра (например АСПЛинукс 9.0), то у вас могут быть проблемы с загрузкой модулей, связанные с тем что в 2.6 изменились названия модулей. Поэтому я рекомендую включать все, что вам точно необходимо, в ядро.

Итак, настройка производится на выбор одной из четырех команд

1. make xconfig
2. make menuconfig
3. make config
4. make oldconfig

Первый вариант для пользователей, у которых есть графика - у вас запустится графическая программка для настройки, остальные - для консоли. Второй вариант предлагает текстовые меню для настройки. Третий задает 1000 и 1 вопрос. Четвертый нужен если у нас уже есть сформированный файл настроек .config (можно использовать файл настроек от старого ядра), при этом варианте задаются только те вопросы которые появились в этой версии ядра. Первый вариант нам наиболее симпатичен. Итак вперед!

Если вы хотите возможность оформить модулем ставьте точку (m для консоли), Если включить в ядро галочку (* или y)

Для тех кто не знает английский привожу примерную настройку рабочей станции. Естественно, оговорюсь, что я не считаю свой подход единственно правильным, не претендую на 100% понимание всего что есть в ядре, - как я это понимаю, так и привожу в этом документе

сохраняются в файле .config (скрытый). В будущем, если вы будете переходить на следующую версия ядра, вы может после установки заплаток скопировать этот файл в каталог с исходниками ядра и выполнить в консоли команду make oldconfig. В этом случае вам не придется отвечать на все эти вопросы, вам будут заданы вопросы только по новым возможностям.
3.4 Сборка и установка

Теперь осталось собрать ядро. Процесс сборки и установки ядра можно выполнить одной командой (от пользователя root)

make bzImage modules modules_install install

а можно разбить на несколько этапов

от простого пользователя:
make bzImage
(собрать ядро)
make modules
(собрать модули

от пользователя root:
make modules_install
(установить модули)
make install
(установить ядро)

Первый вариант хорош тем, что вы может задать сразу все команды и отвлечься от компьютера. Второй вариант более правильный идеалогически. Процесс сборки занимает большую часть времени. Поэтому я обычно делаю так:

от простого пользователя:
make bzImage modules

от root:
make modules_install install

Процесс в зависимости от мощности процессора и кол-ва выбранных модулей может занимать много времени, вы успеете испить чашечку кофе или принять ванну.

Если вы слишком увлекаетесь заплатками, то ядро может и не собраться (на определенном этапе сборка прервется и вы увидите код ошибки). В этом случае вам придется либо отключать модули на которых происходит ошибка, либо повторять все сначала уже с меньшим кол-вом заплаток. Если у вас ядро без заплаток не желает компилироваться, то это говорит о неправильной установке дистрибутива, либо нехватки компилятора или библиотек. Попробуйте установить дистрибутив в режиме "Разработка" (не забудьте добавить КДЕ и другие пользовательские программы). Дистрибутивы ALT Linux Junior и ASPLinux ChipEdition - на самом деле не дистрибутивы, а, говоря интеллигентно, демо-версии, поэтому не удивляйтесь, если у вас ничего не выйдет.

Когда ядро будет собрано, у вас должны появиться следующие файлы

/boot/vmlinuz-2.6.1-my
/boot/System.map-2.6.1-my
/boot/initrd-2.6.1.img
и каталог модулей
/lib/modules/2.6.1-my

Ядро установлено, теперь надо настроить загрузчик.
4. Настройка загрузчика

После установки ядра, как правило, автоматически настраивается и загрузчик, если этого не произошло или вы хотите подправить что-либо, то читайте дальше

Три самых распространенных загрузчика

1. LILO
2. GRUB
3. ASPLoader

Первый из них - это самый старый (но это не значит самый обделенный возможностями). Отличается хорошей надежностью и большими возможностями.

GRUB - самый мощный по возможностям загрузчик. Очень хорош.

У ASPLoader есть две оригинальные особенности - поддержка мыши и простота. Однако дизайн у него уж больно смахивает на маздаевский. Да и по возможностям слабоват.

Если у вас установлен АСПЛинукс, то после установки ядра grub будет затерт ASPLoader'ом. Вам надо будет заново установить grub.

!!! Никогда не удаляйте настройки старого ядра, это может привести к невозможности загрузки системы обычным образом, если сделанное вами ядро не работоспособно !!!
4.1 Настройка ASPLoader

1. Для начала подправьте файл настроек

Он расположен в файле /etc/aspldr.conf

[linux1062672691@Linux(2.6.1-my)]
icon linux
kernel /boot/vmlinuz-2.6.1-my root=/dev/hda5 hdc=ide-scsi vga=791 splash=silent
initrd /boot/initrd-2.6.1-my.img

[SEPARATOR]

[asplinux1@ASPLinux(2.4.20-9asp)]
icon linux
kernel /boot/vmlinuz-2.4.20-9asp root=/dev/hda5 ro
initrd /boot/initrd.2.4.20-9asp.img

Если вы не используете initrd (все драйверы необходимые для загрузки системы включены в ядро и bootsplash не используется), тогда соответствующую строчку можно удалить

2. Дайте команду aspldr для записи изменений в загрузчик

Для дополнительной информации смотрите man aspldr.conf
4.2 Настройка GRUB

1. Подправьте файл настроек

/boot/grub/grub.conf

title linux-2.6.1-my
kernel /vmlinuz-2.6.1-my root=/dev/hda5 hdc=ide-scsi vga=791 splash=silent
initrd /initrd-empty.splash
boot

title linux-2.4.20
kernel /vmlinuz-2.4.20-9asp root=/dev/hda5
initrd /initrd.2.4.20-9asp.img
boot

2. Если у вас установлен АСПЛинукс, то после установки ядра grub в MBR будет затерт ASPLoader'ом. Вам надо будет заново установить grub. Под пользователем root введите в консоли

grub
grub> root (hd0,0) (/boot раздел расположен на первом разделе первого жесткого диска)
Filesystem type is ext2fs, partition type 0x83

grub> setup (hd0) (записать загрузчик в MBR первого жесткого диска)
Checking if "/boot/grub/stage1" exists... no
Checking if "/grub/stage1" exists... yes
Checking if "/grub/stage2" exists... yes
Checking if "/grub/e2fs_stage1_5" exists... yes
Running "embed /grub/e2fs_stage1_5 (hd0)"... 16 sectors are embedded... succeeded
Running "install /grub/stage1 (hd0) (hd0)1+16 p (hd0,0)/grub/stage2 /grub/grub.conf"... succeeded
Done.

grub> quit

Подробнее о настройках grub смотрите info grub
5. Доводка вашего дистрибутива.

Перед тем как загрузиться с ядра 2.6 необходимо подправить некоторые вещи в нашем дистрибутиве. (Имеется в виду дистрибутив АСПЛинукс 9.0)

Первое, нужны новые утилиты для работы с модулями - modutils. Вы их можете найти с помощью ресурса http://www.rpmfind.net. Качайте последнюю версию для RedHat (Fedora).

Для установки пакетов нужно под пользователем root ввести команду

rpm -Uhv <имя файла rpm>

Второе, загрузочные скрипты ошибочно отключают автозагрузку модулей.

Для этого в файле /etc/rc.d/rc.sysinit найдите следующие строки

if ! LC_ALL=C grep -iq nomodules /proc/cmdline 2>/dev/null && [ -f /proc/ksyms ]; then
USEMODULES=y
fi

и переделайте их к виду

if ! LC_ALL=C grep -iq nomodules /proc/cmdline 2>/dev/null ; then
USEMODULES=y
fi

Кроме этого, возможны проблемы с подключением модулей, которые имеют разные названия в версиях ядра 2.4 и 2.6. В этой ситуации помогает включение этих модулей в ядро.

На этом все. Добро пожаловать в Линукс 2.6!

Windows XP в роли router

На корпоративном буке стоит XP, есть инет. Часто приходится раздавать инет в локалку, когда прихожу в гости к офлайновым друзьям. Вот собственно последовательность действий, после которых XP начинает натить :)

Внимание! Некорректное использование редактора системного реестра может привести систему в неработоспособное состояние и потребовать проведения полной переустановки операционной системы. Microsoft не несет ответственности за некорректное использование редактора реестра.

Для включения маршрутизации пакетов TCP/IP выполните следующие действия:

1. Запустите редактор системного реестра (Regedt32.exe).
2. Откройте следующий раздел:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
3. Внесите следующие изменения:
Параметр: IPEnableRouter
Тип данных: REG_DWORD
Значение: 1
Значение "1" включает маршрутизацию пакетов TCP/IP для всех сетевых подключений, установленных на данном компьютере.
4. Значение "1" включает маршрутизацию пакетов TCP/IP для всех сетевых подключений, установленных на данном компьютере. Закройте редактор реестра.

Информация в данной статье применима к:

* Microsoft Windows XP Home Edition
* Microsoft Windows XP Professional Edition



Цитата:
слышал ещё про Routing and Remote Access это тоже подходит?
только почему я не могу найти его у себя в папке с администрацией..



1. Остановить и отключить службу WinFirewall/ICS
2.

Код:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"IPEnableRouter"=dword:00000001

3.

Код:
netsh routing ip nat uninstall
netsh routing ip nat install
netsh routing ip nat add interface name=LAN Private
netsh routing ip nat add interface name=3g Full

4. Запустить службу RRAS.


Включить службы
- локатор удаленного вызова процедур RPC
- Маршрутизация и удаленный доступ

соотв выключить...