ಅದು ಸರಿ, ನಾವು ಇಂದು ಗೂಢಲಿಪೀಕರಣದ ದೇವರಿಗೆ ಅದೇ ರೀತಿ ಹೇಳುತ್ತೇವೆ.
ಇಲ್ಲಿ ನಾವು ಎನ್ಕ್ರಿಪ್ಟ್ ಮಾಡದ IPv4 ಸುರಂಗದ ಬಗ್ಗೆ ಮಾತನಾಡುತ್ತೇವೆ, ಆದರೆ "ಬೆಚ್ಚಗಿನ ದೀಪ" ಒಂದರ ಬಗ್ಗೆ ಅಲ್ಲ, ಆದರೆ ಆಧುನಿಕ "LED" ಬಗ್ಗೆ. ಮತ್ತು ಇಲ್ಲಿ ಕಚ್ಚಾ ಸಾಕೆಟ್ಗಳು ಮಿನುಗುತ್ತಿವೆ ಮತ್ತು ಬಳಕೆದಾರರ ಜಾಗದಲ್ಲಿ ಪ್ಯಾಕೆಟ್ಗಳೊಂದಿಗೆ ಕೆಲಸ ನಡೆಯುತ್ತಿದೆ.
ಪ್ರತಿ ರುಚಿ ಮತ್ತು ಬಣ್ಣಕ್ಕೆ N ಸುರಂಗ ಪ್ರೋಟೋಕಾಲ್ಗಳಿವೆ:
ಆದರೆ ನಾನು ಪ್ರೋಗ್ರಾಮರ್ ಆಗಿದ್ದೇನೆ, ಆದ್ದರಿಂದ ನಾನು N ಅನ್ನು ಒಂದು ಭಾಗದಿಂದ ಮಾತ್ರ ಹೆಚ್ಚಿಸುತ್ತೇನೆ ಮತ್ತು ನೈಜ ಪ್ರೋಟೋಕಾಲ್ಗಳ ಅಭಿವೃದ್ಧಿಯನ್ನು ಕೊಮ್ಮರ್ಸಾಂಟ್ ಡೆವಲಪರ್ಗಳಿಗೆ ಬಿಡುತ್ತೇನೆ.
ಒಂದರಲ್ಲಿ ಇನ್ನೂ ಹುಟ್ಟಿಲ್ಲ ಕರಡುನಾನು ಈಗ ಮಾಡುತ್ತಿರುವುದೆಂದರೆ ಹೊರಗಿನಿಂದ NAT ಹಿಂದೆ ಹೋಸ್ಟ್ಗಳನ್ನು ತಲುಪುವುದು. ಇದಕ್ಕಾಗಿ ವಯಸ್ಕ ಗುಪ್ತ ಲಿಪಿ ಶಾಸ್ತ್ರದೊಂದಿಗೆ ಪ್ರೋಟೋಕಾಲ್ಗಳನ್ನು ಬಳಸುವುದರಿಂದ, ಇದು ಗುಬ್ಬಚ್ಚಿಗಳನ್ನು ಗುಬ್ಬಚ್ಚಿಯಿಂದ ಹೊಡೆದಂತೆ ಎಂಬ ಭಾವನೆಯನ್ನು ನಾನು ಅಲ್ಲಾಡಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ಏಕೆಂದರೆ ಸುರಂಗವನ್ನು ಬಹುಪಾಲು NAT-e ನಲ್ಲಿ ರಂಧ್ರಗಳನ್ನು ಮಾಡಲು ಮಾತ್ರ ಬಳಸಲಾಗುತ್ತದೆ, ಆಂತರಿಕ ಸಂಚಾರವನ್ನು ಸಾಮಾನ್ಯವಾಗಿ ಎನ್ಕ್ರಿಪ್ಟ್ ಮಾಡಲಾಗುತ್ತದೆ, ಆದರೆ ಅವು ಇನ್ನೂ HTTPS ನಲ್ಲಿ ಮುಳುಗುತ್ತವೆ.
ವಿವಿಧ ಟನೆಲಿಂಗ್ ಪ್ರೋಟೋಕಾಲ್ಗಳನ್ನು ಸಂಶೋಧಿಸುವಾಗ, ನನ್ನ ಆಂತರಿಕ ಪರಿಪೂರ್ಣತಾವಾದಿಯ ಗಮನವು ಅದರ ಕನಿಷ್ಠ ಓವರ್ಹೆಡ್ನಿಂದಾಗಿ ಮತ್ತೆ ಮತ್ತೆ IPIP ಗೆ ಸೆಳೆಯಲ್ಪಟ್ಟಿತು. ಆದರೆ ಇದು ನನ್ನ ಕಾರ್ಯಗಳಿಗೆ ಒಂದೂವರೆ ಗಮನಾರ್ಹ ನ್ಯೂನತೆಗಳನ್ನು ಹೊಂದಿದೆ:
ಇದಕ್ಕೆ ಎರಡೂ ಕಡೆಗಳಲ್ಲಿ ಸಾರ್ವಜನಿಕ ಐಪಿಗಳ ಅಗತ್ಯವಿದೆ,
ಮತ್ತು ನಿಮಗಾಗಿ ಯಾವುದೇ ದೃಢೀಕರಣವಿಲ್ಲ.
ಆದ್ದರಿಂದ, ಪರಿಪೂರ್ಣತಾವಾದಿಯನ್ನು ತಲೆಬುರುಡೆಯ ಡಾರ್ಕ್ ಮೂಲೆಯಲ್ಲಿ ಅಥವಾ ಅವನು ಎಲ್ಲಿ ಕುಳಿತುಕೊಳ್ಳುತ್ತಾನೆಯೋ ಅಲ್ಲಿಗೆ ಓಡಿಸಲಾಯಿತು.
ತದನಂತರ ಒಂದು ದಿನ, ಲೇಖನಗಳನ್ನು ಓದುವಾಗ ಸ್ಥಳೀಯವಾಗಿ ಬೆಂಬಲಿತ ಸುರಂಗಗಳು Linux ನಲ್ಲಿ ನಾನು FOU (Foo-over-UDP) ಅನ್ನು ಕಂಡಿದ್ದೇನೆ, ಅಂದರೆ. ಏನೇ ಇರಲಿ, UDP ಯಲ್ಲಿ ಸುತ್ತಿ. ಇಲ್ಲಿಯವರೆಗೆ, IPIP ಮತ್ತು GUE (ಜೆನೆರಿಕ್ UDP ಎನ್ಕ್ಯಾಪ್ಸುಲೇಶನ್) ಮಾತ್ರ ಬೆಂಬಲಿತವಾಗಿದೆ.
“ಇಲ್ಲಿದೆ ಬೆಳ್ಳಿ ಗುಂಡು! ಒಂದು ಸರಳ IPIP ನನಗೆ ಸಾಕು. - ನಾನು ಯೋಚಿಸಿದೆ.
ವಾಸ್ತವವಾಗಿ, ಬುಲೆಟ್ ಸಂಪೂರ್ಣವಾಗಿ ಬೆಳ್ಳಿಯಾಗಿಲ್ಲ. UDP ಯಲ್ಲಿನ ಎನ್ಕ್ಯಾಪ್ಸುಲೇಷನ್ ಮೊದಲ ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸುತ್ತದೆ - ನೀವು ಪೂರ್ವ-ಸ್ಥಾಪಿತ ಸಂಪರ್ಕವನ್ನು ಬಳಸಿಕೊಂಡು ಹೊರಗಿನಿಂದ NAT ಹಿಂದಿನ ಕ್ಲೈಂಟ್ಗಳಿಗೆ ಸಂಪರ್ಕಿಸಬಹುದು, ಆದರೆ ಇಲ್ಲಿ IPIP ಯ ಮುಂದಿನ ನ್ಯೂನತೆಯ ಅರ್ಧದಷ್ಟು ಹೊಸ ಬೆಳಕಿನಲ್ಲಿ ಅರಳುತ್ತದೆ - ಖಾಸಗಿ ನೆಟ್ವರ್ಕ್ನಿಂದ ಯಾರಾದರೂ ಗೋಚರಿಸುವ ಹಿಂದೆ ಮರೆಮಾಡಬಹುದು. ಸಾರ್ವಜನಿಕ IP ಮತ್ತು ಕ್ಲೈಂಟ್ ಪೋರ್ಟ್ (ಶುದ್ಧ IPIP ನಲ್ಲಿ ಈ ಸಮಸ್ಯೆ ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ).
ಈ ಒಂದೂವರೆ ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸಲು, ಉಪಯುಕ್ತತೆ ಹುಟ್ಟಿದೆ ಐಪಿಪೌ. ಇದು ಕರ್ನಲ್ FOU ನ ಕಾರ್ಯಾಚರಣೆಯನ್ನು ಅಡ್ಡಿಪಡಿಸದೆಯೇ ರಿಮೋಟ್ ಹೋಸ್ಟ್ ಅನ್ನು ದೃಢೀಕರಿಸಲು ಮನೆ-ನಿರ್ಮಿತ ಕಾರ್ಯವಿಧಾನವನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುತ್ತದೆ, ಇದು ಕರ್ನಲ್ ಜಾಗದಲ್ಲಿ ಪ್ಯಾಕೆಟ್ಗಳನ್ನು ತ್ವರಿತವಾಗಿ ಮತ್ತು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುತ್ತದೆ.
ನಿಮ್ಮ ಸ್ಕ್ರಿಪ್ಟ್ ನಮಗೆ ಅಗತ್ಯವಿಲ್ಲ!
ಸರಿ, ಕ್ಲೈಂಟ್ನ ಸಾರ್ವಜನಿಕ ಪೋರ್ಟ್ ಮತ್ತು IP ನಿಮಗೆ ತಿಳಿದಿದ್ದರೆ (ಉದಾಹರಣೆಗೆ, ಅದರ ಹಿಂದೆ ಇರುವ ಪ್ರತಿಯೊಬ್ಬರೂ ಎಲ್ಲಿಯೂ ಹೋಗುವುದಿಲ್ಲ, NAT 1-ಇನ್-1 ಪೋರ್ಟ್ಗಳನ್ನು ನಕ್ಷೆ ಮಾಡಲು ಪ್ರಯತ್ನಿಸುತ್ತದೆ), ನೀವು IPIP-ಓವರ್-FOU ಸುರಂಗವನ್ನು ರಚಿಸಬಹುದು ಕೆಳಗಿನ ಆಜ್ಞೆಗಳು, ಯಾವುದೇ ಸ್ಕ್ರಿಪ್ಟ್ಗಳಿಲ್ಲದೆ.
ಸರ್ವರ್ನಲ್ಲಿ:
# Подгрузить модуль ядра FOU
modprobe fou
# Создать IPIP туннель с инкапсуляцией в FOU.
# Модуль ipip подгрузится автоматически.
ip link add name ipipou0 type ipip
remote 198.51.100.2 local 203.0.113.1
encap fou encap-sport 10000 encap-dport 20001
mode ipip dev eth0
# Добавить порт на котором будет слушать FOU для этого туннеля
ip fou add port 10000 ipproto 4 local 203.0.113.1 dev eth0
# Назначить IP адрес туннелю
ip address add 172.28.0.0 peer 172.28.0.1 dev ipipou0
# Поднять туннель
ip link set ipipou0 up
ಕ್ಲೈಂಟ್ ಮೇಲೆ:
modprobe fou
ip link add name ipipou1 type ipip
remote 203.0.113.1 local 192.168.0.2
encap fou encap-sport 10001 encap-dport 10000 encap-csum
mode ipip dev eth0
# Опции local, peer, peer_port, dev могут не поддерживаться старыми ядрами, можно их опустить.
# peer и peer_port используются для создания соединения сразу при создании FOU-listener-а.
ip fou add port 10001 ipproto 4 local 192.168.0.2 peer 203.0.113.1 peer_port 10000 dev eth0
ip address add 172.28.0.1 peer 172.28.0.0 dev ipipou1
ip link set ipipou1 up
ಅಲ್ಲಿ
ipipou* - ಸ್ಥಳೀಯ ಸುರಂಗ ನೆಟ್ವರ್ಕ್ ಇಂಟರ್ಫೇಸ್ ಹೆಸರು
203.0.113.1 - ಸಾರ್ವಜನಿಕ IP ಸರ್ವರ್
198.51.100.2 - ಕ್ಲೈಂಟ್ನ ಸಾರ್ವಜನಿಕ ಐಪಿ
192.168.0.2 — ಕ್ಲೈಂಟ್ ಐಪಿ ಇಂಟರ್ಫೇಸ್ eth0 ಗೆ ನಿಯೋಜಿಸಲಾಗಿದೆ
10001 - FOU ಗಾಗಿ ಸ್ಥಳೀಯ ಕ್ಲೈಂಟ್ ಪೋರ್ಟ್
20001 - FOU ಗಾಗಿ ಸಾರ್ವಜನಿಕ ಕ್ಲೈಂಟ್ ಪೋರ್ಟ್
10000 - FOU ಗಾಗಿ ಸಾರ್ವಜನಿಕ ಸರ್ವರ್ ಪೋರ್ಟ್
encap-csum - ಎನ್ಕ್ಯಾಪ್ಸುಲೇಟೆಡ್ UDP ಪ್ಯಾಕೆಟ್ಗಳಿಗೆ UDP ಚೆಕ್ಸಮ್ ಅನ್ನು ಸೇರಿಸುವ ಆಯ್ಕೆ; ಮೂಲಕ ಬದಲಾಯಿಸಬಹುದು noencap-csum, ನಮೂದಿಸಬಾರದು, ಸಮಗ್ರತೆಯನ್ನು ಈಗಾಗಲೇ ಹೊರಗಿನ ಎನ್ಕ್ಯಾಪ್ಸುಲೇಷನ್ ಲೇಯರ್ನಿಂದ ನಿಯಂತ್ರಿಸಲಾಗುತ್ತದೆ (ಪ್ಯಾಕೆಟ್ ಸುರಂಗದ ಒಳಗಿರುವಾಗ)
eth0 - ಐಪಿಪಿ ಸುರಂಗವನ್ನು ಬಂಧಿಸುವ ಸ್ಥಳೀಯ ಇಂಟರ್ಫೇಸ್
172.28.0.1 - ಕ್ಲೈಂಟ್ ಟನಲ್ ಇಂಟರ್ಫೇಸ್ನ IP (ಖಾಸಗಿ)
172.28.0.0 - IP ಟನಲ್ ಸರ್ವರ್ ಇಂಟರ್ಫೇಸ್ (ಖಾಸಗಿ)
UDP ಸಂಪರ್ಕವು ಜೀವಂತವಾಗಿರುವವರೆಗೆ, ಸುರಂಗವು ಕೆಲಸದ ಕ್ರಮದಲ್ಲಿರುತ್ತದೆ, ಆದರೆ ಅದು ಮುರಿದರೆ, ನೀವು ಅದೃಷ್ಟಶಾಲಿಯಾಗುತ್ತೀರಿ - ಕ್ಲೈಂಟ್ನ ಐಪಿ: ಪೋರ್ಟ್ ಒಂದೇ ಆಗಿದ್ದರೆ - ಅದು ಬದುಕುತ್ತದೆ, ಅವರು ಬದಲಾಯಿಸಿದರೆ - ಅದು ಮುರಿಯುತ್ತದೆ.
ಎಲ್ಲವನ್ನೂ ಹಿಂತಿರುಗಿಸಲು ಸುಲಭವಾದ ಮಾರ್ಗವೆಂದರೆ ಕರ್ನಲ್ ಮಾಡ್ಯೂಲ್ಗಳನ್ನು ಅನ್ಲೋಡ್ ಮಾಡುವುದು: modprobe -r fou ipip
ದೃಢೀಕರಣದ ಅಗತ್ಯವಿಲ್ಲದಿದ್ದರೂ, ಕ್ಲೈಂಟ್ನ ಸಾರ್ವಜನಿಕ IP ಮತ್ತು ಪೋರ್ಟ್ ಯಾವಾಗಲೂ ತಿಳಿದಿರುವುದಿಲ್ಲ ಮತ್ತು ಆಗಾಗ್ಗೆ ಅನಿರೀಕ್ಷಿತ ಅಥವಾ ವೇರಿಯಬಲ್ ಆಗಿರುತ್ತವೆ (NAT ಪ್ರಕಾರವನ್ನು ಅವಲಂಬಿಸಿ). ನೀವು ಬಿಟ್ಟುಬಿಟ್ಟರೆ encap-dport ಸರ್ವರ್ ಬದಿಯಲ್ಲಿ, ಸುರಂಗವು ಕಾರ್ಯನಿರ್ವಹಿಸುವುದಿಲ್ಲ, ದೂರಸ್ಥ ಸಂಪರ್ಕ ಪೋರ್ಟ್ ಅನ್ನು ತೆಗೆದುಕೊಳ್ಳುವಷ್ಟು ಸ್ಮಾರ್ಟ್ ಅಲ್ಲ. ಈ ಸಂದರ್ಭದಲ್ಲಿ, ipipou ಸಹ ಸಹಾಯ ಮಾಡಬಹುದು, ಅಥವಾ WireGuard ಮತ್ತು ಇತರರು ನಿಮಗೆ ಸಹಾಯ ಮಾಡಬಹುದು.
ಇದು ಹೇಗೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ?
ಕ್ಲೈಂಟ್ (ಇದು ಸಾಮಾನ್ಯವಾಗಿ NAT ಯ ಹಿಂದೆ) ಸುರಂಗವನ್ನು ತೆರೆಯುತ್ತದೆ (ಮೇಲಿನ ಉದಾಹರಣೆಯಲ್ಲಿರುವಂತೆ), ಮತ್ತು ದೃಢೀಕರಣ ಪ್ಯಾಕೆಟ್ ಅನ್ನು ಸರ್ವರ್ಗೆ ಕಳುಹಿಸುತ್ತದೆ ಇದರಿಂದ ಅದು ಅದರ ಬದಿಯಲ್ಲಿ ಸುರಂಗವನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡುತ್ತದೆ. ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಅವಲಂಬಿಸಿ, ಇದು ಖಾಲಿ ಪ್ಯಾಕೆಟ್ ಆಗಿರಬಹುದು (ಸರ್ವರ್ ಸಾರ್ವಜನಿಕ IP: ಸಂಪರ್ಕ ಪೋರ್ಟ್ ಅನ್ನು ನೋಡಬಹುದು), ಅಥವಾ ಸರ್ವರ್ ಕ್ಲೈಂಟ್ ಅನ್ನು ಗುರುತಿಸಬಹುದಾದ ಡೇಟಾದೊಂದಿಗೆ. ಡೇಟಾವು ಸ್ಪಷ್ಟ ಪಠ್ಯದಲ್ಲಿ ಸರಳವಾದ ಪಾಸ್ಫ್ರೇಸ್ ಆಗಿರಬಹುದು (HTTP ಮೂಲ ದೃಢೀಕರಣದೊಂದಿಗೆ ಸಾದೃಶ್ಯವು ಮನಸ್ಸಿಗೆ ಬರುತ್ತದೆ) ಅಥವಾ ಖಾಸಗಿ ಕೀಲಿಯೊಂದಿಗೆ ವಿಶೇಷವಾಗಿ ವಿನ್ಯಾಸಗೊಳಿಸಲಾದ ಡೇಟಾ (HTTP ಡೈಜೆಸ್ಟ್ ದೃಢೀಕರಣದಂತೆಯೇ ಮಾತ್ರ ಪ್ರಬಲವಾಗಿದೆ, ಕಾರ್ಯವನ್ನು ನೋಡಿ. client_auth ಕೋಡ್ನಲ್ಲಿ).
ಸರ್ವರ್ನಲ್ಲಿ (ಸಾರ್ವಜನಿಕ IP ಇರುವ ಬದಿಯಲ್ಲಿ), ipipou ಪ್ರಾರಂಭವಾದಾಗ, ಅದು nfqueue ಕ್ಯೂ ಹ್ಯಾಂಡ್ಲರ್ ಅನ್ನು ರಚಿಸುತ್ತದೆ ಮತ್ತು netfilter ಅನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡುತ್ತದೆ, ಇದರಿಂದಾಗಿ ಅಗತ್ಯವಿರುವ ಪ್ಯಾಕೆಟ್ಗಳನ್ನು ಕಳುಹಿಸಲಾಗುತ್ತದೆ: nfqueue ಕ್ಯೂಗೆ ಸಂಪರ್ಕವನ್ನು ಪ್ರಾರಂಭಿಸುವ ಪ್ಯಾಕೆಟ್ಗಳು ಮತ್ತು [ಬಹುತೇಕ] ಎಲ್ಲಾ ಉಳಿದವು ಕೇಳುಗ FOU ಗೆ ನೇರವಾಗಿ ಹೋಗುತ್ತವೆ.
ತಿಳಿದಿಲ್ಲದವರಿಗೆ, nfqueue (ಅಥವಾ NetfilterQueue) ಕರ್ನಲ್ ಮಾಡ್ಯೂಲ್ಗಳನ್ನು ಹೇಗೆ ಅಭಿವೃದ್ಧಿಪಡಿಸುವುದು ಎಂದು ತಿಳಿದಿಲ್ಲದ ಹವ್ಯಾಸಿಗಳಿಗೆ ವಿಶೇಷ ವಿಷಯವಾಗಿದೆ, ಇದು ನೆಟ್ಫಿಲ್ಟರ್ (nftables/iptables) ಅನ್ನು ಬಳಸಿಕೊಂಡು ನೆಟ್ವರ್ಕ್ ಪ್ಯಾಕೆಟ್ಗಳನ್ನು ಬಳಕೆದಾರರ ಜಾಗಕ್ಕೆ ಮರುನಿರ್ದೇಶಿಸಲು ಮತ್ತು ಅವುಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲು ಅನುಮತಿಸುತ್ತದೆ. primitive ಎಂದರೆ ಕೈಯಲ್ಲಿದೆ: ಮಾರ್ಪಡಿಸಿ (ಐಚ್ಛಿಕ ) ಮತ್ತು ಅದನ್ನು ಕರ್ನಲ್ಗೆ ಹಿಂತಿರುಗಿಸಿ, ಅಥವಾ ಅದನ್ನು ತಿರಸ್ಕರಿಸಿ.
ಕೆಲವು ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಭಾಷೆಗಳಿಗೆ nfqueue ನೊಂದಿಗೆ ಕೆಲಸ ಮಾಡಲು ಬೈಂಡಿಂಗ್ಗಳಿವೆ, ಬ್ಯಾಷ್ಗಾಗಿ ಯಾವುದೂ ಇರಲಿಲ್ಲ (ಹೆಹ್, ಆಶ್ಚರ್ಯವೇನಿಲ್ಲ), ನಾನು ಪೈಥಾನ್ ಅನ್ನು ಬಳಸಬೇಕಾಗಿತ್ತು: ipipou ಬಳಸುತ್ತದೆ NetfilterQueue.
ಕಾರ್ಯಕ್ಷಮತೆಯು ನಿರ್ಣಾಯಕವಾಗಿಲ್ಲದಿದ್ದರೆ, ಈ ವಿಷಯವನ್ನು ಬಳಸಿಕೊಂಡು ನೀವು ಕಡಿಮೆ ಮಟ್ಟದಲ್ಲಿ ಪ್ಯಾಕೆಟ್ಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡಲು ನಿಮ್ಮ ಸ್ವಂತ ತರ್ಕವನ್ನು ತುಲನಾತ್ಮಕವಾಗಿ ತ್ವರಿತವಾಗಿ ಮತ್ತು ಸುಲಭವಾಗಿ ರಚಿಸಬಹುದು, ಉದಾಹರಣೆಗೆ, ಪ್ರಾಯೋಗಿಕ ಡೇಟಾ ವರ್ಗಾವಣೆ ಪ್ರೋಟೋಕಾಲ್ಗಳನ್ನು ರಚಿಸಿ, ಅಥವಾ ಪ್ರಮಾಣಿತವಲ್ಲದ ನಡವಳಿಕೆಯೊಂದಿಗೆ ಸ್ಥಳೀಯ ಮತ್ತು ದೂರಸ್ಥ ಸೇವೆಗಳನ್ನು ಟ್ರೋಲ್ ಮಾಡಿ.
ಕಚ್ಚಾ ಸಾಕೆಟ್ಗಳು nfqueue ನೊಂದಿಗೆ ಕೈಜೋಡಿಸುತ್ತವೆ, ಉದಾಹರಣೆಗೆ, ಸುರಂಗವನ್ನು ಈಗಾಗಲೇ ಕಾನ್ಫಿಗರ್ ಮಾಡಿದಾಗ ಮತ್ತು FOU ಬಯಸಿದ ಪೋರ್ಟ್ನಲ್ಲಿ ಕೇಳುತ್ತಿರುವಾಗ, ನೀವು ಅದೇ ಪೋರ್ಟ್ನಿಂದ ಸಾಮಾನ್ಯ ರೀತಿಯಲ್ಲಿ ಪ್ಯಾಕೆಟ್ ಅನ್ನು ಕಳುಹಿಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ - ಇದು ಕಾರ್ಯನಿರತವಾಗಿದೆ, ಆದರೆ ಕಚ್ಚಾ ಸಾಕೆಟ್ ಅನ್ನು ಬಳಸಿಕೊಂಡು ನೀವು ಯಾದೃಚ್ಛಿಕವಾಗಿ ರಚಿಸಲಾದ ಪ್ಯಾಕೆಟ್ ಅನ್ನು ನೇರವಾಗಿ ನೆಟ್ವರ್ಕ್ ಇಂಟರ್ಫೇಸ್ಗೆ ತೆಗೆದುಕೊಳ್ಳಬಹುದು ಮತ್ತು ಕಳುಹಿಸಬಹುದು, ಆದರೂ ಅಂತಹ ಪ್ಯಾಕೆಟ್ ಅನ್ನು ಉತ್ಪಾದಿಸಲು ಸ್ವಲ್ಪ ಹೆಚ್ಚು ಟಿಂಕರಿಂಗ್ ಅಗತ್ಯವಿರುತ್ತದೆ. ಐಪಿಪೌನಲ್ಲಿ ದೃಢೀಕರಣದೊಂದಿಗೆ ಪ್ಯಾಕೆಟ್ಗಳನ್ನು ಹೇಗೆ ರಚಿಸಲಾಗಿದೆ.
ipipou ಸಂಪರ್ಕದಿಂದ ಮೊದಲ ಪ್ಯಾಕೆಟ್ಗಳನ್ನು ಮಾತ್ರ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುವುದರಿಂದ (ಮತ್ತು ಸಂಪರ್ಕವನ್ನು ಸ್ಥಾಪಿಸುವ ಮೊದಲು ಸರದಿಯಲ್ಲಿ ಸೋರಿಕೆಯಾಗಲು ನಿರ್ವಹಿಸುತ್ತಿದ್ದವು), ಕಾರ್ಯಕ್ಷಮತೆ ಬಹುತೇಕ ತೊಂದರೆಯಾಗುವುದಿಲ್ಲ.
ipipou ಸರ್ವರ್ ದೃಢೀಕರಿಸಿದ ಪ್ಯಾಕೆಟ್ ಅನ್ನು ಸ್ವೀಕರಿಸಿದ ತಕ್ಷಣ, ಒಂದು ಸುರಂಗವನ್ನು ರಚಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಸಂಪರ್ಕದಲ್ಲಿರುವ ಎಲ್ಲಾ ನಂತರದ ಪ್ಯಾಕೆಟ್ಗಳನ್ನು ಈಗಾಗಲೇ ಕರ್ನಲ್ ಬೈಪಾಸ್ ಮಾಡುವ nfqueue ಮೂಲಕ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲಾಗುತ್ತದೆ. ಸಂಪರ್ಕವು ವಿಫಲವಾದಲ್ಲಿ, ನಂತರದ ಮೊದಲ ಪ್ಯಾಕೆಟ್ ಅನ್ನು ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಅವಲಂಬಿಸಿ nfqueue ಕ್ಯೂಗೆ ಕಳುಹಿಸಲಾಗುತ್ತದೆ, ಅದು ದೃಢೀಕರಣದೊಂದಿಗೆ ಪ್ಯಾಕೆಟ್ ಆಗಿಲ್ಲದಿದ್ದರೆ, ಆದರೆ ಕೊನೆಯದಾಗಿ ನೆನಪಿಸಿಕೊಳ್ಳಲಾದ IP ಮತ್ತು ಕ್ಲೈಂಟ್ ಪೋರ್ಟ್ನಿಂದ, ಅದನ್ನು ರವಾನಿಸಬಹುದು ಮೇಲೆ ಅಥವಾ ತಿರಸ್ಕರಿಸಲಾಗಿದೆ. ದೃಢೀಕೃತ ಪ್ಯಾಕೆಟ್ ಹೊಸ IP ಮತ್ತು ಪೋರ್ಟ್ನಿಂದ ಬಂದರೆ, ಅವುಗಳನ್ನು ಬಳಸಲು ಸುರಂಗವನ್ನು ಮರುಸಂರಚಿಸಲಾಗಿದೆ.
NAT ನೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವಾಗ ಸಾಮಾನ್ಯ IPIP-ಓವರ್-FOU ಇನ್ನೂ ಒಂದು ಸಮಸ್ಯೆಯನ್ನು ಹೊಂದಿದೆ - UDP ಯಲ್ಲಿ ಒಂದೇ IP ಯೊಂದಿಗೆ ಸುತ್ತುವರಿದ ಎರಡು IPIP ಸುರಂಗಗಳನ್ನು ರಚಿಸುವುದು ಅಸಾಧ್ಯ, ಏಕೆಂದರೆ FOU ಮತ್ತು IPIP ಮಾಡ್ಯೂಲ್ಗಳು ಪರಸ್ಪರ ಸಾಕಷ್ಟು ಪ್ರತ್ಯೇಕವಾಗಿರುತ್ತವೆ. ಆ. ಒಂದೇ ಸಾರ್ವಜನಿಕ IP ಯ ಹಿಂದೆ ಒಂದು ಜೋಡಿ ಕ್ಲೈಂಟ್ಗಳು ಈ ರೀತಿಯಲ್ಲಿ ಒಂದೇ ಸರ್ವರ್ಗೆ ಏಕಕಾಲದಲ್ಲಿ ಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ. ಭವಿಷ್ಯದಲ್ಲಿ, ಬಹುಶಃ, ಇದನ್ನು ಕರ್ನಲ್ ಮಟ್ಟದಲ್ಲಿ ಪರಿಹರಿಸಲಾಗುವುದು, ಆದರೆ ಇದು ಖಚಿತವಾಗಿಲ್ಲ. ಈ ಮಧ್ಯೆ, NAT ಸಮಸ್ಯೆಗಳನ್ನು NAT ಮೂಲಕ ಪರಿಹರಿಸಬಹುದು - ಒಂದು ಜೋಡಿ IP ವಿಳಾಸಗಳು ಈಗಾಗಲೇ ಮತ್ತೊಂದು ಸುರಂಗದಿಂದ ಆಕ್ರಮಿಸಿಕೊಂಡಿದ್ದರೆ, ipipou ಸಾರ್ವಜನಿಕರಿಂದ ಪರ್ಯಾಯ ಖಾಸಗಿ IP ಗೆ NAT ಮಾಡುತ್ತದೆ, voila! - ಬಂದರುಗಳು ಖಾಲಿಯಾಗುವವರೆಗೆ ನೀವು ಸುರಂಗಗಳನ್ನು ರಚಿಸಬಹುದು.
ಏಕೆಂದರೆ ಸಂಪರ್ಕದಲ್ಲಿರುವ ಎಲ್ಲಾ ಪ್ಯಾಕೆಟ್ಗಳಿಗೆ ಸಹಿ ಮಾಡಲಾಗಿಲ್ಲ, ನಂತರ ಈ ಸರಳ ರಕ್ಷಣೆ MITM ಗೆ ದುರ್ಬಲವಾಗಿರುತ್ತದೆ, ಆದ್ದರಿಂದ ಕ್ಲೈಂಟ್ ಮತ್ತು ಸರ್ವರ್ ನಡುವಿನ ಮಾರ್ಗದಲ್ಲಿ ಸುಪ್ತವಾಗಿ ದಟ್ಟಣೆಯನ್ನು ಆಲಿಸುವ ಮತ್ತು ಅದನ್ನು ಕುಶಲತೆಯಿಂದ ನಿರ್ವಹಿಸುವ ಖಳನಾಯಕನಿದ್ದರೆ, ಅವನು ದೃಢೀಕೃತ ಪ್ಯಾಕೆಟ್ಗಳನ್ನು ಮರುನಿರ್ದೇಶಿಸಬಹುದು ಮತ್ತೊಂದು ವಿಳಾಸ ಮತ್ತು ವಿಶ್ವಾಸಾರ್ಹವಲ್ಲದ ಹೋಸ್ಟ್ನಿಂದ ಸುರಂಗವನ್ನು ರಚಿಸಿ.
ಕೋರ್ನಲ್ಲಿ ಹೆಚ್ಚಿನ ದಟ್ಟಣೆಯನ್ನು ಬಿಡುವಾಗ ಇದನ್ನು ಹೇಗೆ ಸರಿಪಡಿಸುವುದು ಎಂಬುದರ ಕುರಿತು ಯಾರಾದರೂ ಆಲೋಚನೆಗಳನ್ನು ಹೊಂದಿದ್ದರೆ, ಮಾತನಾಡಲು ಹಿಂಜರಿಯಬೇಡಿ.
ಮೂಲಕ, ಯುಡಿಪಿಯಲ್ಲಿ ಎನ್ಕ್ಯಾಪ್ಸುಲೇಷನ್ ಸ್ವತಃ ಚೆನ್ನಾಗಿ ಸಾಬೀತಾಗಿದೆ. IP ಮೇಲಿನ ಎನ್ಕ್ಯಾಪ್ಸುಲೇಶನ್ಗೆ ಹೋಲಿಸಿದರೆ, UDP ಹೆಡರ್ನ ಹೆಚ್ಚುವರಿ ಓವರ್ಹೆಡ್ ಹೊರತಾಗಿಯೂ ಇದು ಹೆಚ್ಚು ಸ್ಥಿರವಾಗಿರುತ್ತದೆ ಮತ್ತು ಆಗಾಗ್ಗೆ ವೇಗವಾಗಿರುತ್ತದೆ. ಇಂಟರ್ನೆಟ್ನಲ್ಲಿನ ಹೆಚ್ಚಿನ ಹೋಸ್ಟ್ಗಳು ಮೂರು ಅತ್ಯಂತ ಜನಪ್ರಿಯ ಪ್ರೋಟೋಕಾಲ್ಗಳೊಂದಿಗೆ ಮಾತ್ರ ಉತ್ತಮವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ ಎಂಬುದು ಇದಕ್ಕೆ ಕಾರಣ: TCP, UDP, ICMP. ಸ್ಪಷ್ಟವಾದ ಭಾಗವು ಎಲ್ಲವನ್ನೂ ಸಂಪೂರ್ಣವಾಗಿ ತ್ಯಜಿಸಬಹುದು ಅಥವಾ ಹೆಚ್ಚು ನಿಧಾನವಾಗಿ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಬಹುದು, ಏಕೆಂದರೆ ಇದು ಈ ಮೂರಕ್ಕೆ ಮಾತ್ರ ಹೊಂದುವಂತೆ ಮಾಡುತ್ತದೆ.
ಉದಾಹರಣೆಗೆ, ಇದಕ್ಕಾಗಿಯೇ ಕ್ವಿಕ್, ಇದು HTTP/3 ಅನ್ನು ಆಧರಿಸಿದೆ, UDP ಮೇಲೆ ರಚಿಸಲಾಗಿದೆ ಮತ್ತು IP ಮೇಲೆ ಅಲ್ಲ.
ಸರಿ, ಸಾಕಷ್ಟು ಪದಗಳು, ಇದು "ನೈಜ ಜಗತ್ತಿನಲ್ಲಿ" ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ನೋಡಲು ಸಮಯವಾಗಿದೆ.
ಕದನ
ನೈಜ ಪ್ರಪಂಚವನ್ನು ಅನುಕರಿಸಲು ಬಳಸಲಾಗುತ್ತದೆ iperf3. ವಾಸ್ತವಕ್ಕೆ ನಿಕಟತೆಯ ಮಟ್ಟಕ್ಕೆ ಸಂಬಂಧಿಸಿದಂತೆ, ಇದು Minecraft ನಲ್ಲಿ ನೈಜ ಪ್ರಪಂಚವನ್ನು ಅನುಕರಿಸುವಂತೆಯೇ ಇರುತ್ತದೆ, ಆದರೆ ಇದೀಗ ಅದು ಮಾಡುತ್ತದೆ.
ಸ್ಪರ್ಧೆಯಲ್ಲಿ ಭಾಗವಹಿಸುವವರು:
ಉಲ್ಲೇಖ ಮುಖ್ಯ ಚಾನಲ್
ಈ ಲೇಖನದ ನಾಯಕ ipipou
ದೃಢೀಕರಣದೊಂದಿಗೆ OpenVPN ಆದರೆ ಎನ್ಕ್ರಿಪ್ಶನ್ ಇಲ್ಲ
ಓಪನ್ವಿಪಿಎನ್ ಎಲ್ಲವನ್ನೂ ಒಳಗೊಂಡ ಮೋಡ್ನಲ್ಲಿ
PresharedKey ಇಲ್ಲದೆ WireGuard, MTU=1440 (IPv4 ರಿಂದ ಮಾತ್ರ)
ಗೀಕ್ಗಳಿಗೆ ತಾಂತ್ರಿಕ ಡೇಟಾ ಕೆಳಗಿನ ಆಜ್ಞೆಗಳೊಂದಿಗೆ ಮೆಟ್ರಿಕ್ಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳಲಾಗುತ್ತದೆ:
ಕ್ಲೈಂಟ್ ಮೇಲೆ:
UDP
CPULOG=NAME.udp.cpu.log; sar 10 6 >"$CPULOG" & iperf3 -c SERVER_IP -4 -t 60 -f m -i 10 -B LOCAL_IP -P 2 -u -b 12M; tail -1 "$CPULOG"
# Где "-b 12M" это пропускная способность основного канала, делённая на число потоков "-P", чтобы лишние пакеты не плодить и не портить производительность.