Ето как съм конфигурирал NFS server + NFS clients през SSH tunnel и защитните стени.Няма да обяснявам как съм направил NAT-a рутерите и как са свръзани спрямо комутаторите главната цел е NFS.
1.Използвани устройвства:
office 1
Router: cisco 2801
Switch: hp 2626
PC : Linux Debian unstable Gnome 2.20.3
office 2
Router: Linux Debian stable
Server: Linux Debian stable
Admin@root# < ----- NFS Client
stabil:~# < ----- NFS Server
2.Кракто обяснение по диаграмата.
- Създаваме криптиран тунел от офис 1 до офис 2 с помоща на SSH
- Инсталираме NFS server на машината Office 2 следователно исталираме NFS client на комоютъра от Office 1
- Конфигуриране на NFS server & NFS client
- Отваряне на нужните портове от защитната стена.
3.Да започваме с практическата част.
3.1 Инсталиране на NFS server в Office 1 (ползвана диструбиция Debian stable ).
--- CONFIG ON OFFICE 1 (NFS server)
CODE
- Настройка на портовете на които ще работи NFS
CODE1
2
3
| stabil:~stabil:~stabil:~ |
CONFIG ON OFFICE 2 (NFS client)
- Създаване на нов юзер с който ще работят публичните ключове нужни за тунелите.
CODE
- Сега нека създадем публичните ключове.
Начин 1 Автоматично
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Може да ползвате скрипта който съм написал с цел по-бързо и лесно да прехвърлям публичните си ключове.Има вероятност да не работи с някой системи зависимост как сте си настроили SSH ,но на дефалтно инсталирана машина работи.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Как да го пуснем
CODE1
| tunnel@Admin:~$nano sh.ssh_gen |
Копирайте скрипта вътре и го запазете
CODE1
| tunnel@Admin:~$chmod +x sh.ssh_gen |
CODE1
| tunnel@Admin:~$./sh.ssh_gen |
Трябва да видите това
CODE1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
| tunnel@Admin:$/DesktopEnter remote username: tunnel <--- usera който ще ползваме да се логнем
Remote username is set to tunnel
Enter remote ip/host address: X.X.X.X < --- IP-то на NFS server
Remote ip/host is set to X.X.X.X Enter PORT: 22 < --- Понякога сменям портовете затова има и тази опция.
Remote port is 22 Your config is :User = tunnel Host = X.X.X.X Port = 22
*******PROGRAM MENU**********
1 - Generate & Upload New Key
2 - Upload Old Key
0 - exit
Enter choose:
#!/bin/bash
echo -n "Enter remote username: "
read USR
echo -n "Remote username is set to $USR "
case $usr in
esac
echo ""
echo -n "Enter remote ip/host address: "
read HOST
echo -n "Remote ip/host is set to $HOST "
case $usr in
esac
echo -n "Enter PORT: "
read PORT
echo -n "Remote port is $PORT "
case $usr in
esac
echo -n "Your config is :User = $USR Host = $HOST Port = $PORT "
NEWKEY="yes"
makekey () {
if [ $NEWKEY == "yes" ]; then
ssh-keygen -t rsa -f ~/.ssh/identity
fi
}
checkfile () {
if [ -f ~/.ssh/authorized_keys ]; then
touch ~/.ssh/authorized_keys
fi
}
upload () {
cat ~/.ssh/identity.pub | ssh -p $PORT $USR@$HOST 'sh -c "if [ ! -d .ssh ] ; then mkdir .ssh ; chmod 700 .ssh ; fi
cat - >>~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"'
echo "Done..................... "
}
press_enter () {
echo ""
echo -n "Press Enter to continue"
read
clear
}
selection=
until [ "$selection" = "0" ]; do
echo ""
echo "*******PROGRAM MENU"**********
echo "1 - Generate & Upload New Key"
echo "2 - Upload Old Key"
echo ""
echo "0 - exit "
echo ""
echo -n "Enter choose: "
read selection
echo ""
case $selection in
1 ) checkfile ; makekey ; upload ;;
2 ) upload ;;
0 ) exit ;;
echo "Please enter 1, 2 or 0"; press_enter
esac
done
exit 0
|
Опция 1 ще ви генерира нов ключ и ще го прехвърли на системата която искате
Опция 2 Ако имате вече ключове скрипта просто ще копира стария ви ключ на новата система която искате да достъпите
!!!! моя ключ е генериран без парола затова при следващото ви логване няма да е нужно да въвеждате парола .Погледнете статиите ми за SSH за повече информация. !!!!
Начин 2 Ръчно
Така ще ползваме nfs_server като име на определено IP можете да си го промените спрямо вашите конфигурации
CODE
!!! TRQBVA DA STE LOGNATI S USER "tunnel"
CODE1
| tunnel@Admin:/ssh-keygen -t rsa -b 2048 |
Сега отиваме на OFFICE 2 сървъра за да си настроим ключовете
CODE1
2
3
4
5
| stabil:~stabil:~stabil:~stabil:~stabil:~ |
Въведете този ред в началото на ~/.ssh/authorized_keys
client="nfs_client",command="/bin/sleep"
nfs_client = Вашото реално ИП от което излизате от office 1 ако не го знаете просто отворете браузера и пишете
www.whatismyip.com
Моя ~/.ssh/authorized_keys
####
client="nfs_client",command="/bin/sleep"ssh-rsa
AAAAB3NzaC1yc2EAAAABIwAAAQEA4zIJO2wbF+A5KcfgHMKHZU
####
Сега се връщаме на Office 1 ,за да пуснем тунетлите
CODE
Тук не трябва да ви иска парола ако ви иска значи имате проблем с публичните ключове ако не иска просто exit и се връщаме пак в Office 1 и продължаваме за повече информация ползвате "ssh nfs_server -v"
!!!!!!!!!!
Ако сте генерирали публичните с скрипта id_rsa трябва да бъде заменен с identity
!!!!!!!!!!
CODE
Сега нека да настроим автоматичното монтиране
ВСИЧКО Е НА ЕДИН РЕД
CODE1
2
3
| Admin@rootAdmin@root |
Office 2 Настройка на NFS server
CODEМного важна опция е "insecure" малко се измъчих докато разбера ,че зад NAT трябва да се ползва тази опиця затова ако имате ваш си рутер сложете тази опция
/Data REAL_IP_ON_NFS_SERVER(insecure,rw,no_root_squash,no_all_squash,sync)
ПОДСИГУРЯВАНЕ
Сега нека конфигурираме малко TCP wrappers (не е задължително да се конфигурира)
CODE
Сега да се прехвърлим на Fiwewall-a или аз ползвам iptables
CODE1
2
3
4
5
6
7
8
9
10
11
12
13
| IN_IP= Вашето реално ИП или просто цъкнете това на вашия реален интерфейс (eth0 ,eth1 ... etc )
IN_IP=`/sbin/ifconfig eth0 | grep inet | cut -d : -f 2 | cut -d \ -f 1` < тази команда ви дава IP ADDRESS za eth0
echo "Open ports for NFS"
iptables -A INPUT -p tcp -s 0/0 -d 0/0 -j LOG --log-prefix "Dropped by firewall: "
iptables -A INPUT -p tcp -s $IN_IP --dport 111 -j ACCEPT
iptables -A INPUT -p tcp -s $IN_IP --dport 2049 -j ACCEPT
iptables -A INPUT -p tcp -s $IN_IP --dport 3446 -j ACCEPT
|
За да хванете точно какво става с вашия NFS ползвайте #LOG след това търсете резултата в /var/log/syslog
Ето какво ще видите
Feb 7 13:01:55 Stabil kernel: TCP LOGDROP: IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=Х.Х.Х.Х DST=Х.Х.Х.Х LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=37029 DF PROTO=TCP SPT=14008 DPT=3446 WINDOW=32792 RES=0x00 SYN URGP=0
Рестартираме NFS
CODE1
2
3
4
5
6
7
8
| stabil:~Stopping NFS kernel daemon: mountd nfsd.
Unexporting directories for NFS kernel daemon....
Exporting directories for NFS kernel daemon...exportfs: /etc/exports [3]: Neither 'subtree_check' or 'no_subtree_check' specified for export "Х.Х.Х.Х:/Data".
Assuming default behaviour ('subtree_check').
NOTE: this default will change with nfs-utils version 1.1.0
.
Starting NFS kernel daemon: nfsd mountd. |
ТЕСТОВЕ с който ще можете да си помагате
1.Как да видя на кои портове работи сървъра
CODE1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| stabil:~program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100021 1 udp 16928 nlockmgr
100021 3 udp 16928 nlockmgr
100021 4 udp 16928 nlockmgr
100021 1 tcp 27098 nlockmgr
100021 3 tcp 27098 nlockmgr
100021 4 tcp 27098 nlockmgr
100005 1 udp 3446 mountd
100005 1 tcp 3446 mountd
100005 2 udp 3446 mountd
100005 2 tcp 3446 mountd
100005 3 udp 3446 mountd
100005 3 tcp 3446 mountd
stabil:~ |
Тестване на Firewall
CODE1
2
| stabil:~ACCEPT tcp -- X.X.X.X 0.0.0.0/0 tcp dpt:3446 |
Отиваме на Office 1
CODE
Това се вижда от Office 2 /var/log/syslog
CODE1
| Feb 7 15:47:06 Stabil mountd[22825]: authenticated mount request from X.X.X.X:2696 for /Data (/Data) |
Office 1 see tunnel
CODE1
2
3
| Admin@root/mntroot 8054 0.0 0.1 4988 1084 ? Ss 13:43 0:00 ssh -f -i [i]root[/i].ssh/identity -c blowfish -L 61001:X.X.X.X:2049 -l tunnel X.X.X.X sleep 600d
root 8061 0.0 0.1 4984 988 ? Ss 13:43 0:00 ssh -f -i [i]root[/i].ssh/identity -c blowfish -L 62001:X.X.X.X:3446 -l tunnel X.X.X.X sleep 600d |
Нека сега си направим един тест колко е бърза нашата връзка
Това ще генерира 268 МБ файл в директорияте ви
mnt
CODE1
2
3
4
5
6
7
8
| Admin@root/mnt256+0 records in
256+0 records out
268435456 bytes (268 MB) copied, 4.48962 s, 59.8 MB/s
real 0m4.699s
user 0m0.000s
sys 0m0.396s |
Това ще генерира 268МБ файла в директорият /mnt/stabil която се явява NFS Server
CODE1
2
3
4
5
6
7
8
9
| Admin@root/mnt
Запис на отдалечената машина (stabil) на 256 MB файл
256+0 records in
256+0 records out
268435456 bytes (268 MB) copied, 652.249 s, 412 kB/s
real 10m52.456s
user 0m0.000s
sys 0m0.196s |
Също полезна опция за следене състоянието на сървъра
CODE1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
| stabil:~Server rpc stats:
calls badcalls badauth badclnt xdrcall
1029716 0 0 0 0
Server nfs v3:
null getattr setattr lookup access readlink
24 0% 344320 33% 133 0% 313282 30% 313986 30% 0 0%
read write create mkdir symlink mknod
8025 0% 33660 3% 31 0% 13 0% 0 0% 0 0%
remove rmdir rename link readdir readdirplus
21 0% 0 0% 30 0% 0 0% 0 0% 15833 1%
fsstat fsinfo pathconf commit
192 0% 24 0% 0 0% 45 0%
Client rpc stats:
calls retrans authrefrsh
0 0 0
Client nfs v4:
null read write commit open open_conf
0 0% 0 0% 0 0% 0 0% 0 0% 0 0%
open_noat open_dgrd close setattr fsinfo renew
0 0% 0 0% 0 0% 0 0% 0 0% 0 0%
setclntid confirm lock lockt locku access
0 0% 0 0% 0 0% 0 0% 0 0% 0 0%
getattr lookup lookup_root remove rename link
0 0% 0 0% 0 0% 0 0% 0 0% 0 0%
symlink create pathconf statfs readlink readdir
0 0% 0 0% 0 0% 0 0% 0 0% 0 0%
server_caps delegreturn |
Към статията съм прекрепил снимки с който виждта файловете на сървъра.
С тези 412K трафик спокойно можете да си пуснете филм или mp3 който се намират на отдалечения сървър.
eazysnatch[a_t]gmail.com
Поздрави
В.Христев