Strongswan ашиглан IPSec VPN үүсгэх
Strongswan нь сервер болон хэрэглэгчдийг нууцлал(encryption), танилтын(authentication) боломжоор хангадаг IPSec-г хэрэгжүүлдэг пэйкеж (package) бөгөөд энэ туршилтаар түүнийг ашиглан өөр газруудад байгаа (Remote) серверүүдийн хоорондын харилцааг нууцалж тэдний алсын харилцааг(communications with remote networks) дотоод сүлжээнд байгаа мэтээр зохицуулахад ашиглана. Ингэхдээ алсаас харилцаж буй хоёр сүлжээ нь урьдчилан нууцлалын түлхүүр (PreShared Key — PSK) солилцох замаар ажиллана.
Түлхүүр үг: Pre-Shared Key, IPSec, Kernel Packet Forwarding, UFW Firewall
Туршилтын орчин
- Виртуал машин
- Oracle VM VirtualBOX
- Үйлдлийн систем
- Ubuntu
Хэрэгжүүлэлт
Туршилтыг виртуал машин дээр гүйцэтгэж байгаа тул рүүтерийг(router) интернэт гэж үзнэ харин түүнээс виртуал машин (virtual machine) авч байгаа хаягийг гадаад хаяг(external IP) харин виртуал машин дотроо зохицуулж байгаа хаягийг дотоод хаяг(Internal IP) гэж авч үзнэ. Туршилтыг гүйцэтгэхдээ 2 виртуал машин ашиглах бөгөөд тэдгээрийг “Ubuntu-1” болон “Ubuntu-2” гэж нэрлэе. Виртуал машинууд нь тус бүр 2 ширхэг сүлжээний карттай байх бөгөөд дараах тохиргоог хийсэн байх хэрэгтэй. Сүлжээний картын тохиргоо “Bridged Adapter” байна.
Ubuntu-1
OS: Ubuntu
External IP: 192.168.88.170
Internal IP: 192.168.0.101/24
Location: Ulaanbaatar, Mongolia (гэж авч үзэе)
Ubuntu-2
OS: Ubuntu
External IP: 192.168.88.169
Internal IP: 10.0.2.15/24
Location: Darkhan, Mongolia (гэж авч үзэе)
Алхам 1: Кернелд пэйкет (packet) форвард (forwarding) тохиргоо хийх
- Хоёр виртуал машины кернелд нь пэйкет форвард хийх боломжийг дараах файлд /etc/sysctl.conf доорх тохиргоог хийж идэвхжүүлж өгнө.
/etc/sysctl.conf файлаас дараах мөрүүдийг хайж олоод коммент байхыг болиулж утгыг дараах байдлаар тохируулна.
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
2. Шинэ тохиргоог дараах командыг ажилуулж системд оруулна.
sudo sysctl -p
3. UFW firewall сервис асаалттай бол дараах дүрмүүдийг виртуал машинуудын /etc/ufw/before.rules тохиргооны файл дотор филтер дүрмүүдийн(filter rules) дээр нэмж өгнө.
Ubuntu-1 дээр
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.0.2.0/24 -d 192.168.0.0/24 -j MASQUERADE
COMMIT
Ubuntu-2 дээр
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 192.168.0.0/24 -d 10.0.2.0/24 -j MASQUERADE
COMMIT
- Firewall дүрмүүдийг амжилттай нэмсэн бол машин тус бүр дээр UFW-г дараах командаар шинэ тохиргоотой дахин эхлүүлнэ.
sudo ufw disable
sudo ufw enable
Алхам 2: strongSwan суулгах
Виртуал машин тус бүр дээр пэйкежийг(package) шинэчилж, strongSwan пйэкежийг дараах командаар суулгана.
sudo apt update
sudo apt install strongswan
Алхам 3: Виртуал машинуудыг тохируулах
Виртуал машинуудыг тохируулахдаа /etc/ipsec.conf тохиргооны файлыг ашиглана.
Ubuntu-1 дээрх тохиргоо
Доорх командаар жинхэнэ тохиргооны файлыг нөөц болгон хадгалж, тохиргооны файлыг текст засагч дээр нээнэ.
sudo cp /etc/ipsec.conf /etc/ipsec.conf.orig
sudo nano /etc/ipsec.conf
Одоо /etc/ipsec.conf дотор дараах тохиргоог хуулж өгөх хэрэгтэй
config setup
charondebug=”all”
uniqueids=yes
conn Ubuntu1-to-Ubuntu2
type=tunnel
authby=secret
keyexchange=ikev2
left=192.168.88.170
leftsubnet=192.168.0.101/24
right=192.168.88.169
rightsubnet=10.0.2.15/24
ike=aes256-sha1-modp1024!
esp=aes256-sha1!
aggressive=no
keyingtries=%forever
ikelifetime=28800s
lifetime=3600s
dpddelay=30s
dpdtimeout=120s
dpdaction=restart
auto=start
Ubuntu-2 дээрх тохиргоо
Доорх командаар жинхэнэ тохиргооны файлыг нөөц болгон хадгалж, тохиргооны файлыг текст засагч дээр нээнэ.
sudo cp /etc/ipsec.conf /etc/ipsec.conf.orig
sudo nano /etc/ipsec.conf
Одоо /etc/ipsec.conf дотор дараах тохиргоог хийж өгөх хэрэгтэй
config setup
charondebug="all"
uniqueids=yesconn Ubuntu2-to-Ubuntu1
type=tunnel
authby=secret
keyexchange=ikev2
left=192.168.88.169
leftsubnet=10.0.2.15/24
right=192.168.88.170
rightsubnet=192.168.0.101/24
ike=aes256-sha1-modp1024!
esp=aes256-sha1!
aggressive=no
keyingtries=%forever
lifetime=3600s
ikelifetime=28800s
dpddelay=30s
dpdtimeout=120s
dpdaction=restart
auto=start
Алхам 4: PSK -ийг Peer-to-Peer танилтанд (Authentication) тохируулах
Виртуал машинуудаа тохируулсан бол одоо машинууд хоорондоо солилцох хэйш (hash) дараах командаар үүсгэнэ. Энэ хэйшийг бид Pre-Shared Key (PSK) болгож ашиглана.
head -c 32 /dev/urandom | base64
Миний тохиолдолд дараах хэйш үүслээ.
ajnAw9RnUYSUXnf9B2B3qEJpJukIHXDj6IlTH+lkjk0=
Дээрх командаас гарч ирсэн хэйшийг хоёр виртуал машины /etc/ipsec.secrets файл дотор дараах байдлаар тус бүр нь хийж өгнө. Ингэснээр бид хэйшийг PSK болгон ашиглаж байна.
sudo nano /etc/ipsec.secrets
Ubuntu-1 машин дээр
192.168.88.170 192.168.88.169 : PSK “ajnAw9RnUYSUXnf9B2B3qEJpJukIHXDj6IlTH+lkjk0=”
Ubuntu-2 машин дээр
192.168.88.169 192.168.88.170 : PSK “ajnAw9RnUYSUXnf9B2B3qEJpJukIHXDj6IlTH+lkjk0=”
Одоо дараах командаар IPSec ээ дахин эхлүүлж холболтын төлөвийг шалгацгаая
sudo ipsec restart
sudo ipsec status
Одоо хоёр машин хоорондоо нэг нэгнийхээ дотоор хаягт хандаж байгаа эсэхийг ping командын тусламжтай үзэцгээе
Ubuntu-1 машинаас
ping 10.0.2.15
Ubuntu-2 машинаас
ping 192.168.0.101
Мөн IPSec холболтыг шалгахдаа хоёр машин дээр ssh суулгаж хооронд нь дотоод хаягаар нь холбож үзэж болно.
apt install ssh
Ubuntu-1 дээрээс
ssh ubuntu-2@10.0.2.15
Ubuntu-2 дээрээс
ssh ubuntu-1@192.168.0.101
IPSec ийг дараах командаар унтрааж асаана
sudo ipsec stop
sudo ipsec start