Różnice między wybraną wersją a wersją aktualną.
Both sides previous revision Poprzednia wersja Nowa wersja | Poprzednia wersja | ||
sk2:zajecia_zdalne [2020/11/03 15:44] jkonczak [Krok 2: uruchomienie VNC] |
sk2:zajecia_zdalne [2021/12/18 13:38] (aktualna) jkonczak [Oprogramowanie do zdalnych zajęć] |
||
---|---|---|---|
Linia 1: | Linia 1: | ||
- | ====== Instrukcje do zdalnych zajęć ====== | + | ====== Oprogramowanie do zdalnych zajęć ====== |
- | ===== Narzędzia ===== | + | ++++ Programowanie niskopoziomowe | |
Do zajęć zdalnych koniecznie musicie mieć do dyspozycji: | Do zajęć zdalnych koniecznie musicie mieć do dyspozycji: | ||
Linia 7: | Linia 7: | ||
* dowolny współczesny kompilator C/C+''''+: | * dowolny współczesny kompilator C/C+''''+: | ||
* polecane: [[https://gcc.gnu.org/|GCC]] w wersji ≥9 lub [[https://clang.llvm.org/|Clang]] w wersji ≥ 9 | * polecane: [[https://gcc.gnu.org/|GCC]] w wersji ≥9 lub [[https://clang.llvm.org/|Clang]] w wersji ≥ 9 | ||
- | * uwaga: proszę sprawdzić działanie kompilatora na [[https://gitlab.cs.put.poznan.pl/jkonczak/sk2_examples/raw/master/l4/l4_z1_lambda.cpp|przykładowym pliku]] - plik powinien się kompilować komendą ''c++ -pthread --std=c++2a l4_z1_lambda.cpp''((jeśli kompilator narzeka na ''--std=c++2a'', to znaczy że jest dość stary; sugeruję zaktualizować, ale jeśli działa z ''--std=c++1z'', to na potrzeby zajęć wystarczy)) | + | * uwaga: proszę sprawdzić działanie kompilatora na [[https://gitlab.cs.put.poznan.pl/jkonczak/sk2_examples/raw/master/l4/l4_z1_lambda.cpp|przykładowym pliku]] - plik powinien się kompilować komendą ''c+''''+ -pthread --std=c+''''+2a l4_z1_lambda.cpp''((jeśli kompilator narzeka na ''--std=c+''''+2a'', to znaczy że jest dość stary; sugeruję zaktualizować, ale jeśli działa z ''--std=c+''''+1z'', to na potrzeby zajęć wystarczy)) |
* IDE lub edytor tekstowy do pisania kodu: | * IDE lub edytor tekstowy do pisania kodu: | ||
* przykładowe IDE: [[https://www.kdevelop.org/|kdevelop]], [[https://www.qt.io/product/development-tools|QtCreator]], [[https://www.jetbrains.com/clion/|CLion]] (wersja dla edukacji jest bezpłatna) | * przykładowe IDE: [[https://www.kdevelop.org/|kdevelop]], [[https://www.qt.io/product/development-tools|QtCreator]], [[https://www.jetbrains.com/clion/|CLion]] (wersja dla edukacji jest bezpłatna) | ||
Linia 23: | Linia 23: | ||
* ''wireshark'' | * ''wireshark'' | ||
* wygodny emulator terminala | * wygodny emulator terminala | ||
+ | ++++ | ||
+ | **Qt**\\ | ||
+ | Proszę zainstalować program qtcreator oraz podstawowe biblioteki deweloperskie, dokumentację i narzędzia frameworku Qt (w wersji 5.15.X lub 6.X). \\ | ||
+ | W zdecydowanej większości dystrybucji Linuksa pakiety są dostępne w domyślnych repozytoriach (np. dla Ubuntu: ''qtbase5-dev qt5-doc qtcreator''). \\ | ||
+ | Proszę przetestować czy środowisko działa poprawnie kompilując przykładowy kod: {{:sk2:l6_z2_template.tar.xz|}}. \\ | ||
+ | <html><small></html>Uwaga: dla Qt6 trzeba w CMakeLists.txt zmienić wszystkie wystąpienia ''Qt5'' na ''Qt6''<html></small></html> | ||
- | ===== Metoda #1: Udostępnienie VNC prowadzącemu ===== | + | **Java**\\ |
+ | Proszę zainstalować JDK i swoje ulubione IDE do Javy (np. IntelliJ / Eclipse / NetBeans). | ||
- | # tl;dr (czyli dla osób które chcą gotowe polecenia i nie chce im się czytać dalej) | + | ++++ DNS | |
- | wget http://www.cs.put.poznan.pl/jkonczak/pub/sk2/sk2-vpn-ca.crt | + | Proszę zainstalować programy ''dig'', ''host'' i ''bind''. \\ |
- | sudo openvpn --dev tap --client --ca sk2-vpn-ca.crt --auth-user-pass --daemon --remote ipv4.jprofesorek.mooo.com | + | W zależności od dystrybucji, programy mogą być w paczkach o nazwach: |
- | x11vnc -quiet -nopw -forever -display :0 & disown | + | |
- | sleep 5 | + | bind |
- | ip -4 addr show dev tap0 | + | bind9 |
+ | bind-tools | ||
+ | bind9-tools | ||
+ | bind-dnsutils | ||
+ | bind9-dnsutils | ||
+ | bind-utils | ||
+ | bind9-utils | ||
+ | |||
+ | Do sprawdzenia czy programy są dostępne, proszę użyć poleceń: | ||
+ | |||
+ | named -v | ||
+ | named-checkconf -v | ||
+ | dig -v | ||
+ | host -V | ||
+ | |||
+ | //Uwaga:// named i named-checkconf mogą być dostępne tylko z roota (tzn. są w | ||
+ | katalogu ''/usr/sbin'', który normalnie nie jest w ''$PATH'' zwykłego użytkownika) | ||
| | ||
+ | Proszę sprawdzić czy bind nie jest uruchamiany automatycznie. \\ | ||
+ | Jeśli polecenie: | ||
- | ==== Krok 1: dołączenie do VPNa ==== | + | ps -FA | egrep '(named|bind)' |
+ | |||
+ | znajdzie działający program ''bind'' lub ''named'', proszę go wyłączyć, właściwą | ||
+ | dla swojego systemu operacyjnego komendą, zapewne przez jedną z poniższych: | ||
+ | |||
+ | systemctl stop bind && systemctl disable bind | ||
+ | systemctl stop bind9 && systemctl disable bind9 | ||
+ | systemctl stop named && systemctl disable named | ||
+ | /etc/init.d/bind stop && rc-update delete bind | ||
+ | /etc/init.d/bind9 stop && rc-update delete bind9 | ||
+ | /etc/init.d/named stop && rc-update delete named | ||
+ | |||
+ | ++++ | ||
+ | |||
+ | ++++ Kształtowanie ruchu | | ||
+ | Na zajęciach będziecie pracować na komputerach w laboratorium na Politechnice. | ||
+ | Przed zajęciami proszę: | ||
+ | * zalogować się na ''polluks''a (tzn. sprawdzić, czy pamiętacie hasło) | ||
+ | * zalogować się z polluksa na wybrany z komputerów laboratoryjnych (lab-net-[1-16] lub lab-sec-[1-16]): | ||
+ | * swoim kontem ''inf…'', a jeśli się nie da, to | ||
+ | * na konto ''root'' ze standardowym hasłem | ||
+ | * jeśli zalogowaliście się swoim kontem do VLABa, proszę wybrać ''Start local Linux'' i zalogować się po ok. 2 minutach ponownie (na konto root) \\ __Uwaga:__ jeśli na komputerze jest uruchomiona jakaś maszyna wirtualna, może to oznaczać że ktoś pracuje (np. w ramach innych zdalnych zajęć) na tym komputerach, więc proszę wtedy nie wybierać lokalnego linuksa i spróbować później / na innej maszynie. | ||
+ | * uruchomić ponownie (''reboot'') maszynę po sprawdzeniu że udało Wam się zalogować na konto roota. | ||
+ | Zachęcam do przypomnienia sobie jak korzysta się z SSH i narzędzi takich jak screen i tmux ([[https://github.com/zolrath/wemux|wemux]]), korzystając np. [[sk1:ssh_screen_tmux|z tych materiałów]] (materiały były przedstawione [[https://emeeting.put.poznan.pl/playback/presentation/2.0/playback.html?meetingId=74d51a8d51ffe7dd7d66f8eaa6ffeffc725c5060-1585652713066|na początku jednych z zajęć z SK1]]).\\ | ||
+ | Na tych zajęciach będę sprawdzać stan Waszej pracy logując się na maszyny w laboratorium, więc nie musicie udostępniać mi ekranu. Zachęcam do używania screen/tmux żebym np. mógł wskazać Wam gdzie jest błąd w komendach które wpisujecie a są traktowane jako niepoprawne. | ||
+ | |||
+ | ++++ | ||
+ | |||
+ | |||
+ | ++++ IPv6 | | ||
+ | Podobnie jak na zajęciach z kształtowania ruchu (powyżej) w trakcie zajęć będą wykorzystywane komputery w laboratoriach. | ||
+ | |||
+ | W trakcie tych zajęć będzie konieczność uruchomienia programu Wireshark na komputerach w laboratorium. \\ | ||
+ | Dlatego proszę o przygotowanie się do używania programu wireshark, np: | ||
+ | * wykorzystując X11 forwarding w SSH (opisane [[sk1:ssh_screen_tmux|tutaj]]); \\ jeśli korzystacie z Windowsa, X11 forwardig wymaga uruchomionego serwera [[https://en.wikipedia.org/wiki/X_Window_System|X]], np. [[https://sourceforge.net/projects/vcxsrv/|vcxsrv]] \\ Uwaga: z powodu [[https://github.com/PowerShell/Win32-OpenSSH/issues/1088|błędu]] w windowsowej wersji ssh może być konieczne posiadanie pliku ''C:\dev\tty'', <html><small></html> np. tworzonego przez:<code> | ||
+ | mkdir \dev | ||
+ | echo x > \dev\tty | ||
+ | </code> <html></small></html>a następnie ustawienie zmiennej DISPLAY na odpowiednią wartość przed wywołaniem ssh, np. w cmd.exe: \\ ''set DISPLAY=localhost:0'' | ||
+ | * uruchomienie serwera VNC <html><small></html>(lub rdesktop)<html></small></html> na maszynie w laboratorium i połączenie się z tym serwerem, wykorzystując [[https://instrukcje.put.poznan.pl/category/vpn/|VPN politechniki]] lub tunelowanie po SSH (opisane skrótowo [[sk1:ssh_screen_tmux|tutaj]]). | ||
+ | ++++ | ||
+ | |||
+ | ++++ WLAN 1 | | ||
+ | Podobnie jak na zajęciach z IPv6 (powyżej) w trakcie zajęć będą wykorzystywane komputery w laboratoriach. \\ | ||
+ | Możliwe (zależy od tempa zajęć) że w trakcie zajęć będzie też potrzeba uruchomić Wireshark na komputerach w laboratorium. | ||
+ | ++++ | ||
+ | |||
+ | ++++ WLAN 2 | | ||
+ | Zajęcia będą odbywać się na komputerach w laboratorium. \\ | ||
+ | W zależności od ilości osób może wystąpić konieczność pracy w grupach – sprzętowych AP jest ograniczona ilość. | ||
+ | Dlatego proszę o przećwiczenie pracy w jednej konsoli przez kilka osób (np. używając tmux/wemux lub współdzieląc ekran). | ||
+ | ++++ | ||
+ | |||
+ | ++++ WLAN 3 | | ||
+ | Zajęcia będą odbywać się na komputerach w laboratorium. \\ | ||
+ | Będziecie konfigurować sprzęt firmy MikroTik, który najłatwiej konfiguruje się z użyciem przeglądarki pod domyślnym dla sprzętu tej firmy adresem IP 192.168.88.1.\\ | ||
+ | Dla wygody i sprawnego działania interfejsu konfiguracyjnego zalecam skonfigurować przekierowanie portów po SSH. | ||
+ | Możecie albo: | ||
+ | * użyć //local port forwarding// do przekazywania danych z połączeń nawiązywanych na podany port lokalnego komputera przez połączenie SSH do wskazanego adresu po stronie serwera SSH, np. przez: <code>ssh -Y -J infXXX@polluks.cs.put.poznan.pl -L 8080:192.168.88.1:80 root@lab-sec-X</code> Wtedy połączenie pod ''http://localhost:8080/'' z przeglądarki internetowej spowoduje nawiązanie połączenia z serwera ssh do adresu 192.168.88.1:80 i przekazywanie danych między tymi połączeniami, a więc wyświetlenie interfejsu konfiguracyjnego sprzętu. | ||
+ | * użyć //dynamic port forwarding// do uruchomienia proxy SOCKS tunelujących połączenia na drugą stronę połączenia SSH i skonfigurować połączenie przeglądarki z siecią tak by używało tego proxy. Przykładowa komenda ssh: <code>ssh -Y -J infXXX@polluks.cs.put.poznan.pl -D 8080 root@lab-sec-X</code> Przykładowa instrukcja jak używać takiego proxy jest tutaj: https://linuxize.com/post/how-to-setup-ssh-socks-tunnel-for-private-browsing/ | ||
+ | |||
+ | ++++ | ||
+ | |||
+ | ====== Udostępnianie widoku swojego pulpitu ====== | ||
+ | |||
+ | Proszę wybrać __jedną__ metodę na udostępnianie mi podglądu kodu który piszecie. | ||
+ | |||
+ | ===== Metoda #1: Udostępnienie VNC prowadzącemu (Linuks) ===== | ||
+ | |||
+ | ==== Skrócona instrukcja ==== | ||
+ | Instrukcja skrócona (dla osób które chcą gotowe polecenia i nie chce im się czytać dalej): | ||
+ | |||
+ | - zainstaluj openvpn, x11vnc i vncviewer | ||
+ | - wykonaj:<code> | ||
+ | wget http://www.cs.put.poznan.pl/jkonczak/pub/sk2/sk2-vpn-ca.crt | ||
+ | sudo openvpn --dev tap --client --ca sk2-vpn-ca.crt --auth-user-pass --daemon --remote ipv4.jprofesorek.mooo.com | ||
+ | x11vnc -quiet -nopw -forever -display :0 & disown | ||
+ | sleep 5 | ||
+ | ip -4 addr show dev tap0</code> | ||
+ | - sprawdź z drugiego komputera czy po połączeniu go identycznymi poleceniami do VPNa możesz zobaczyć swój ekran:<code>vncviewer <ip_komputera></code> | ||
+ | |||
+ | ==== Pełna Instrukcja ==== | ||
+ | |||
+ | === Krok 1: dołączenie do VPNa === | ||
W trakcie zajęć wykorzystywany będzie OpenVPN. Należy zainstalować odpowiednią paczkę (zwykle o nazwie ''openvpn'') w systemie z którego będzie udostępniany ekran. | W trakcie zajęć wykorzystywany będzie OpenVPN. Należy zainstalować odpowiednią paczkę (zwykle o nazwie ''openvpn'') w systemie z którego będzie udostępniany ekran. | ||
Linia 46: | Linia 153: | ||
* (port i protokół domyślne - 1194/udp) | * (port i protokół domyślne - 1194/udp) | ||
* nazwa użytkownika i hasło, przekazane innym kanałem przez prowadzącego. \\ Nazwę użytkownika i hasło można dla wygody wpisać do pliku o nieskomplikowanym formacie: <code - userPass.txt>theExampleUsername | * nazwa użytkownika i hasło, przekazane innym kanałem przez prowadzącego. \\ Nazwę użytkownika i hasło można dla wygody wpisać do pliku o nieskomplikowanym formacie: <code - userPass.txt>theExampleUsername | ||
- | someIncorrectPassword</code>Uwaga: plikz hasłem musi mieć uprawnienia zabraniające odczyt komukolwiek poza bieżącym użytkownikiem (do ustawienia uprawnień można użyć np. ''chmod go-rwx userPass.txt'') | + | someIncorrectPassword</code>Uwaga: plik z hasłem musi mieć uprawnienia zabraniające odczyt komukolwiek poza bieżącym użytkownikiem (do ustawienia uprawnień można użyć np. ''chmod go-rwx userPass.txt'') |
Polecenie uruchamiające VPNa, należy je uruchamiać z __roota__ (**wybierz jedno**): | Polecenie uruchamiające VPNa, należy je uruchamiać z __roota__ (**wybierz jedno**): | ||
- | * Wersja 1 - wszystko w linii poleceń: <code>openvpn --dev tap --client --ca /somewhere/sk2-vpn-ca.crt --auth-user-pass /somewhere/userPass.txt --remote ipv4.jprofesorek.mooo.com</code> Uwaga 1: można pominąć nazwę pliku '' /somewhere/userPass.txt'', wtedy program pyta o nazwę użytkownika / hasło. \\ Uwaga 2: można dodać opcję ''--daemon'', która przenosi program w tło. Bez tej opcji program openvpn zajmuje konsolę (a zamknięcie okna z konsolą przerywa połączenie). | + | * Wersja 1 - wszystko w linii poleceń: <code>openvpn --dev tap --client --ca /somewhere/sk2-vpn-ca.crt --auth-user-pass /somewhere/userPass.txt --remote ipv4.jprofesorek.mooo.com</code> Uwaga 1: można pominąć podawanie pliku ''/somewhere/userPass.txt'', wtedy program pyta o nazwę użytkownika / hasło. \\ Uwaga 2: można dodać opcję ''--daemon'', która przenosi program w tło. Bez tej opcji program openvpn zajmuje konsolę (a zamknięcie okna z konsolą przerywa połączenie). |
* Wersja 2 - przygotuj plik konfiguracyjny: <code - sk2-vpn.ovpn>client | * Wersja 2 - przygotuj plik konfiguracyjny: <code - sk2-vpn.ovpn>client | ||
remote ipv4.jprofesorek.mooo.com | remote ipv4.jprofesorek.mooo.com | ||
Linia 56: | Linia 163: | ||
auth-user-pass /somewhere/userPass.txt | auth-user-pass /somewhere/userPass.txt | ||
#daemon</code> następnie uruchom polecenie: <code>openvpn --config sk2-vpn.ovpn</code> | #daemon</code> następnie uruchom polecenie: <code>openvpn --config sk2-vpn.ovpn</code> | ||
- | * Wersja 3 - użyj graficznego konfiguracja dla NetworkManagera (ta wersja potrzebuje NetworkManagera i może potrzebować dodatkowych pakietów, np. ''network-manager-openvpn-gnome''). | + | * Wersja 3 - użyj graficznego konfiguracja dla NetworkManagera (ta wersja potrzebuje NetworkManagera i może potrzebować dodatkowych pakietów, np. ''network-manager-openvpn-gnome''). <html><small></html> \\ Uwaga: poza przeklikaniem wymienionych wyżej ustawień konieczne jest wyłączenie dodawnia domyślnej bramy przez VPN: \\ ''IPv4 options'' / ''Routes…'' / ''Use this connection only for resources on its network'' \\ Można to też zmienić z konsoli: ''nmcli c modify <nazwa_połączenia> ipv4.never-default true'' <html></small></html> |
**Sprawdzenie czy wszystko poszło dobrze:** po wykonaniu wybranej z komend, w wynikach komendy ''ip address'' powinien pojawić się interfejs ''tap0'' z adresem IP z sieci 10.0.9.0/24. Dodatkowo powinna działać komenda ''ping 10.0.9.1''. | **Sprawdzenie czy wszystko poszło dobrze:** po wykonaniu wybranej z komend, w wynikach komendy ''ip address'' powinien pojawić się interfejs ''tap0'' z adresem IP z sieci 10.0.9.0/24. Dodatkowo powinna działać komenda ''ping 10.0.9.1''. | ||
Linia 62: | Linia 169: | ||
<html><small></html>Dla zainteresowanych [[sk2:vpn_serwer_dla_zajec|konfiguracja serwera]]<html></small></html> | <html><small></html>Dla zainteresowanych [[sk2:vpn_serwer_dla_zajec|konfiguracja serwera]]<html></small></html> | ||
- | ==== Krok 2: uruchomienie VNC ==== | + | === Krok 2: uruchomienie VNC === |
Przykładowe polecenie używa serwer [[https://en.wikipedia.org/wiki/X11vnc|x11vnc]] aby udostępnić bieżącą sesję graficzną. \\ <html><small></html> | Przykładowe polecenie używa serwer [[https://en.wikipedia.org/wiki/X11vnc|x11vnc]] aby udostępnić bieżącą sesję graficzną. \\ <html><small></html> | ||
Linia 94: | Linia 201: | ||
**Po uruchomieniu VPN i VNC należy na początku zajęć przesłać do prowadzącego swój adres IP z sieci 10.0.9.0/24.** | **Po uruchomieniu VPN i VNC należy na początku zajęć przesłać do prowadzącego swój adres IP z sieci 10.0.9.0/24.** | ||
- | ===== Metoda #2: Wtyczka 'Live Share' w VS code ===== | + | ===== Metoda #1: Udostępnienie VNC prowadzącemu (Windows) ===== |
+ | Do zajęć z Qt / Javy można korzystać z Windowsa, stąd krótka instrukcja jak uruchomić VPN+VNC pod Windowsem. | ||
+ | |||
+ | === OpenVPN === | ||
+ | Należy zainstalować openvpn: https://openvpn.net/community-downloads/ \\ | ||
+ | Nie udało mi się (ale za bardzo nie próbowałem) skorzystać z GUI, stąd | ||
+ | proponuję z __uruchomionego jako administrator__ cmd.exe lub powershella | ||
+ | wykonać odpowiednią komendę: \\ | ||
+ | "C:\Program Files\OpenVPN\bin\openvpn.exe" … | ||
+ | Argumenty dla komendy wyglądają jak w Linuksie. | ||
+ | ++++ Przykładowe screeny: | | ||
+ | {{:sk2:win-vpn-1.png|}}\\ | ||
+ | {{:sk2:win-vpn-2.png|}}\\ NB: plik z certyfikatem ''sk2-vpn-ca.crt'' nazywa się tutaj ''sk2-vpn-ca.cer'', bo MS Edge "wie lepiej" jakie ściągany plik powinien mieć rozszerzenie.\\ | ||
+ | {{:sk2:win-vpn-3.png|}} | ||
+ | ++++ | ||
+ | |||
+ | === VNC === | ||
+ | Przykładowy i dość bezproblemowy serwer VNC to [[https://www.tightvnc.com/download.php|TightVNC]]. \\ | ||
+ | Inne popularne serwery VNC to np. [[https://archive.realvnc.com/download/open/|RealVNC]] czy [[https://tigervnc.org/|TigerVNC]]. \\ | ||
+ | W każdym przypadku proszę o niewymaganie hasła (ewentualnie podanie hasła prowadzącemu). | ||
+ | ++++ Przykładowy screen: | | ||
+ | {{:sk2:win-vnc.png|}} | ||
+ | ++++ | ||
+ | |||
+ | |||
+ | ===== Metoda #2: Wtyczka 'Live Share' w VS code (tylko zajęcia z programowania C/C++) ===== | ||
+ | |||
+ | ++++ Ten sposób nie nadaje się do tematów innych niż 5-10 (od "Wstęp do BSD sockets" do "Dobre praktyki w programowaniu") | | ||
+ | |||
+ | Ta metoda jest prostsza do skonfigurowania, ale nie pozwala ona mi widzieć terminala, co utrudnia mi pomaganie w razie problemów z/podczas uruchomienia programów. | ||
Edytor VisualStudio Code pozwala udostępniać bieżąco edytowany projekt przy użyciu rozszerzenia [[https://visualstudio.microsoft.com/pl/services/live-share/|Live Share]]. | Edytor VisualStudio Code pozwala udostępniać bieżąco edytowany projekt przy użyciu rozszerzenia [[https://visualstudio.microsoft.com/pl/services/live-share/|Live Share]]. | ||
Linia 104: | Linia 240: | ||
{{:sk2:vscode_ls.png|}} | {{:sk2:vscode_ls.png|}} | ||
- | **Uwaga**: Osoby korzystające z tej metody powinny: | + | **Uwaga**: Osoby korzystające z tej metody powinny do zajęć 1 i 2 z BSD sockets: |
* uruchomić u siebie usługę daytime na TCP i UDP | * uruchomić u siebie usługę daytime na TCP i UDP | ||
* lub wykonać z roota polecenie zastępujące daytime, np: \\ ''socat udp-l:daytime,fork exec:date & socat tcp-l:daytime,fork exec:date &'' | * lub wykonać z roota polecenie zastępujące daytime, np: \\ ''socat udp-l:daytime,fork exec:date & socat tcp-l:daytime,fork exec:date &'' | ||
+ | ++++ |