dnsmasq ನಲ್ಲಿ OpenVPN ಕ್ಲೈಂಟ್ ಹೆಸರುಗಳು: ಸ್ಕ್ರಿಪ್ಟ್ ಅಥವಾ ಸ್ಥಿರ ನಮೂದುಗಳು?
ಕ್ಲೈಂಟ್ ವಿಳಾಸಗಳು ಬದಲಾಗುತ್ತವೆ, ಸೇವಾ ಹೆಸರುಗಳು ಬದಲಾಗುವುದಿಲ್ಲ. VPN ಸೆಷನ್ನಿಂದ ಕ್ಲೈಂಟ್ ಹೆಸರುಗಳನ್ನು ರಚಿಸಿ, drop-in ಫೈಲ್ನಲ್ಲಿ ಸೇವಾ ಹೆಸರುಗಳನ್ನು ಸ್ಥಿರಗೊಳಿಸಿ, ನಂತರ ಕ್ಲೈಂಟ್ಗಳು ಅದನ್ನು ಬಳಸುವಂತೆ ಮಾಡಿ.
ಬಹುತೇಕ ಪ್ರತಿ ಸಣ್ಣ OpenVPN ಗೇಟ್ವೇಯಲ್ಲಿ ಎರಡು ಹೆಸರಿನ ಸಮಸ್ಯೆಗಳು ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತವೆ. ಸಂಪರ್ಕಿತ ಲ್ಯಾಪ್ಟಾಪ್ ಅನ್ನು ಅದರ ಪ್ರಮಾಣಪತ್ರದಲ್ಲಿರುವ ಹೆಸರಿನಿಂದ ತಲುಪಲು ಸಾಧ್ಯವಿಲ್ಲ, ಮತ್ತು ಸುರಂಗದ ಹಿಂದಿನ ಸೇವೆಗಳಿಗೆ ಯಾವುದೇ ಹೆಸರಿಲ್ಲ. ಅವು ಒಂದೇ ಸಮಸ್ಯೆಯಂತೆ ಕಾಣುತ್ತವೆ ಮತ್ತು ವಿರುದ್ಧ ಪರಿಹಾರಗಳನ್ನು ಬೇಡುತ್ತವೆ, ಏಕೆಂದರೆ ಒಂದು ವಿಳಾಸ ಪ್ರತಿ ಸೆಷನ್ನಲ್ಲೂ ಚಲಿಸುತ್ತದೆ ಮತ್ತು ಇನ್ನೊಂದು ಚಲಿಸುವುದಿಲ್ಲ. ಏನನ್ನಾದರೂ ಸಂಪಾದಿಸುವ ಮೊದಲು ನೀವು ಯಾವ ರೀತಿಯ ಹೆಸರನ್ನು ಸೇರಿಸುತ್ತಿದ್ದೀರಿ ಎಂಬುದನ್ನು ನಿರ್ಧರಿಸಿ.
ಗೇಟ್ವೇಯ ಪ್ರಕಾರವಲ್ಲ, ಹೆಸರಿನ ಪ್ರಕಾರ ನಿರ್ಧರಿಸಿ
ಪರೀಕ್ಷೆ ಸರಳವಾಗಿದೆ: ಕ್ಲೈಂಟ್ ಮತ್ತೆ ಸಂಪರ್ಕಿಸಿದಾಗ ಈ ವಿಳಾಸ ಬದಲಾಗುತ್ತದೆಯೇ? ಹೌದಾದರೆ, ಹೆಸರನ್ನು VPN ಸೆಷನ್ನಿಂದ ರಚಿಸಬೇಕು. ಇಲ್ಲದಿದ್ದರೆ, ಅದು ನೀವು ಓದಿ ಪರಿಶೀಲಿಸಬಹುದಾದ ಸ್ಥಿರ ನಮೂದಿಗೆ ಸೇರುತ್ತದೆ.
| Name kind | Source of truth | Where it lives |
|---|---|---|
| Connected client | The address OpenVPN just assigned | Generated hosts file, rewritten per session |
| Service behind the tunnel | A fixed address you chose | Static address= drop-in |
| Anything with a certificate name | The certificate, not the pool | Either, but the name must match the certificate |
ಎರಡನ್ನೂ ಬೆರೆಸುವುದೇ ಸಾಮಾನ್ಯ ವೈಫಲ್ಯ. ರಚಿಸಿದ ಫೈಲ್ನಲ್ಲಿ ಸ್ಥಿರಗೊಳಿಸಿದ ಸೇವೆ ಸ್ಕ್ರಿಪ್ಟ್ ಅದನ್ನು ಮೊದಲ ಬಾರಿ ಮತ್ತೆ ಬರೆಯುವಾಗ ಕಣ್ಮರೆಯಾಗುತ್ತದೆ, ಮತ್ತು ಸ್ಥಿರ ನಮೂದಿನಲ್ಲಿ ಬರೆದ ಕ್ಲೈಂಟ್ ಆ ವಿಳಾಸವನ್ನು ಕೊನೆಯದಾಗಿ ಹೊಂದಿದವರನ್ನು ತೋರಿಸುತ್ತದೆ. ಎರಡೂ ತಪ್ಪುಗಳು ಹೆಸರು ತಪ್ಪು ಯಂತ್ರಕ್ಕೆ ಪರಿಹಾರವಾಗುವವರೆಗೆ ಕಾಣಿಸುವುದಿಲ್ಲ. ಆ ಹೊತ್ತಿಗೆ ಡೀಬಗ್ ಮಾಡುತ್ತಿರುವವರು DNS ಕೆಟ್ಟಿದೆ ಎಂದು ಭಾವಿಸುತ್ತಾರೆ, ಫೈಲ್ ಅಲ್ಲ.
ಕ್ರಿಯಾತ್ಮಕ ಮಾರ್ಗ: learn-address ಮತ್ತು ಪೂಲ್
OpenVPN ಹಂಚಿಕೆಯನ್ನು ತಿಳಿದಿದೆ, ಆದ್ದರಿಂದ ಅದು ನಿಮಗೆ ಹೇಳಲಿ. ಈ ಸರ್ವರ್ ಆಯ್ಕೆಗಳು ಹಂಚಿಕೆಯನ್ನು ಬಾಳಿಕೆಯ ಮತ್ತು ಸ್ಕ್ರಿಪ್ಟ್ ಮಾಡಬಹುದಾದಂತೆ ಮಾಡುತ್ತವೆ:
client-config-dir /etc/openvpn/ccd
ifconfig-pool-persist /etc/openvpn/ip-pool 60
script-security 2
learn-address /etc/openvpn/learn-address.sh
learn-address ವಿಳಾಸ ಸೇರಿಸಿದ, ನವೀಕರಿಸಿದ ಅಥವಾ ಅಳಿಸಿದ ಪ್ರತಿ ಬಾರಿಯೂ ನಿಮ್ಮ ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಚಲಾಯಿಸುತ್ತದೆ, ಮತ್ತು ಕಾರ್ಯಾಚರಣೆ, ವಿಳಾಸ ಮತ್ತು ಸಾಮಾನ್ಯ ಹೆಸರನ್ನು ರವಾನಿಸುತ್ತದೆ. ಕನಿಷ್ಠ ಸ್ಕ್ರಿಪ್ಟ್ ಪ್ರತಿ ಕ್ಲೈಂಟ್ಗೆ ಒಂದು ಸಾಲು ಸೇರಿಸುತ್ತದೆ ಮತ್ತು ಅಳಿಸುವಾಗ ಅದನ್ನು ತೆಗೆದುಹಾಕುತ್ತದೆ:
#!/bin/sh
HOSTS=/etc/openvpn/hosts.lan
case "$1" in
add|update) echo "$2 $3" >> "$HOSTS" ;;
delete) sed -i "/^$2 /d" "$HOSTS" ;;
esac
kill -HUP $(cat /var/run/dnsmasq.pid)
tun ಸಾಧನದಲ್ಲಿ ಎರಡನೇ ಆರ್ಗ್ಯುಮೆಂಟ್ ಕ್ಲೈಂಟ್ನ ಸುರಂಗ ವಿಳಾಸ, ಆದ್ದರಿಂದ ಸಾಲನ್ನು ನೇರವಾಗಿ ಬಳಸಬಹುದು. tap ಸಾಧನದಲ್ಲಿ OpenVPN ಬದಲಿಗೆ ಕ್ಲೈಂಟ್ನ MAC ವಿಳಾಸವನ್ನು ರವಾನಿಸುತ್ತದೆ, ಏಕೆಂದರೆ tap ವಿಭಾಗವು IPv4 ಹೊರತುಪಡಿಸಿ ಇತರ ಪ್ರೋಟೋಕಾಲ್ಗಳನ್ನೂ ಸಾಗಿಸಬಲ್ಲದು, ಮತ್ತು ಆಗ ಏನನ್ನಾದರೂ ಬರೆಯುವ ಮೊದಲು ಪೂಲ್ ಫೈಲ್ನಲ್ಲಿ ಸಾಮಾನ್ಯ ಹೆಸರಿನಿಂದ ವಿಳಾಸವನ್ನು ಹುಡುಕಬೇಕು.
ರಚಿಸಿದ ಫೈಲ್ ಏನೆಂದು ಸ್ಪಷ್ಟವಾಗಿರಲಿ: ಈಗ ಯಾರು ಸಂಪರ್ಕಿತರಾಗಿದ್ದಾರೆ ಎಂಬುದರ ಸ್ನ್ಯಾಪ್ಶಾಟ್. ಸಂಪರ್ಕ ಕಡಿತಗೊಂಡಾಗ ಹೆಸರುಗಳು ಕಣ್ಮರೆಯಾಗುತ್ತವೆ, ಇದು ನೆಟ್ವರ್ಕ್ಗಳ ನಡುವೆ ಚಲಿಸುವ ಲ್ಯಾಪ್ಟಾಪ್ಗಳಿಗೆ ನಿಖರವಾಗಿ ನೀವು ಬಯಸುವಂತಹದ್ದು ಮತ್ತು ರಾತ್ರಿಯೆಲ್ಲಾ ಆನ್ ಇರುವ ಸರ್ವರ್ಗೆ ನಿಖರವಾಗಿ ನೀವು ಬಯಸದಿರುವಂತಹದ್ದು.
ಸ್ಥಿರ ಮಾರ್ಗ: address= ಮತ್ತು ಡೊಮೇನ್ ವಿಸ್ತರಣೆ
ಸಿಸ್ಟಮ್ನ hosts ಫೈಲ್ ಬದಲಿಗೆ dnsmasq ಅನ್ನು ರಚಿಸಿದ ಫೈಲ್ಗೆ ತೋರಿಸಿ, ಮತ್ತು ಅದಕ್ಕೆ ಡೊಮೇನ್ ನೀಡಿ ಇದರಿಂದ ಸಣ್ಣ ಹೆಸರುಗಳು ಪೂರ್ಣ ಅರ್ಹ ಹೆಸರುಗಳಾಗಿ ವಿಸ್ತರಿಸುತ್ತವೆ:
domain=corp.example
no-hosts
addn-hosts=/etc/openvpn/hosts.lan
listen-address=127.0.0.1,10.8.0.1
bind-interfaces
domain ಸೆಟ್ ಆಗಿರುವಾಗ, 10.8.0.6 alice ನಂತಹ ಸಾಲು alice ಮತ್ತು alice.corp.example ಎರಡಕ್ಕೂ ಉತ್ತರಿಸುತ್ತದೆ. listen-address ಅನ್ನು ಸುರಂಗ ಗೇಟ್ವೇ ಮತ್ತು loopback ಗೆ ಮಾತ್ರ ಸೀಮಿತಗೊಳಿಸಿ, ಏಕೆಂದರೆ LAN ಇಂಟರ್ಫೇಸ್ನಲ್ಲಿ ಆಕಸ್ಮಿಕವಾಗಿ ಪ್ರಕಟವಾದ ರಿಸಾಲ್ವರ್ ನೀವು ನೀಡಲು ಉದ್ದೇಶಿಸದ ಸೇವೆಯಾಗಿದೆ.
ಪೂಲ್ನಿಂದ ಎಂದಿಗೂ ಬಾರದ ಸೇವೆಗಳು ತಮ್ಮದೇ ನಮೂದುಗಳನ್ನು ಪಡೆಯುತ್ತವೆ. ಅವುಗಳನ್ನು ವಿತರಣೆಯ ಸಂರಚನಾ ಡೈರೆಕ್ಟರಿಯಲ್ಲಿ ಪ್ರತ್ಯೇಕ drop-in ಫೈಲ್ನಲ್ಲಿ ಇರಿಸಿ ಇದರಿಂದ ಪ್ಯಾಕೇಜ್ ಅಪ್ಗ್ರೇಡ್ ಅವುಗಳನ್ನು ಮೇಲೆ ಬರೆಯಲು ಸಾಧ್ಯವಾಗದು:
address=/files.corp.example/10.8.0.20
address=/db.corp.example/10.9.0.5
ರಿಸಾಲ್ವರ್ ಅನ್ನು ಒಪ್ಪಿಸಿ ಇಲ್ಲದಿದ್ದರೆ ಏನೂ ಸಂಭವಿಸುವುದಿಲ್ಲ
ಯಾರೂ ಕೇಳದ ರಿಸಾಲ್ವರ್ ಏನನ್ನೂ ಬದಲಿಸುವುದಿಲ್ಲ. ಸರ್ವರ್ ಅದನ್ನು ಘೋಷಿಸಬೇಕು:
push "dhcp-option DNS 10.8.0.1"
push "dhcp-option DOMAIN corp.example"
Windows ಕ್ಲೈಂಟ್ಗಳು ಎರಡೂ ಆಯ್ಕೆಗಳನ್ನು ತಾವೇ ಅನ್ವಯಿಸುತ್ತವೆ. ಬಹುತೇಕ Linux ಕ್ಲೈಂಟ್ಗಳು ಅನ್ವಯಿಸುವುದಿಲ್ಲ: ಅವುಗಳಿಗೆ ಬೆಂಬಲಿತ ರಿಸಾಲ್ವರ್ ಏಕೀಕರಣ ಬೇಕು, ಉದಾಹರಣೆಗೆ ವಿತರಣೆಯ update-resolv-conf ಹುಕ್ ಅಥವಾ NetworkManager ನ DNS ನಿರ್ವಹಣೆ, ಅಥವಾ ಕೈಯಿಂದ ಸೆಟ್ ಮಾಡಿದ ಹುಡುಕಾಟ ಡೊಮೇನ್ ಮತ್ತು ನೇಮ್ಸರ್ವರ್. push ಗೌರವಿಸಲಾಗಿದೆ ಎಂದು ಊಹಿಸುವ ಬದಲು ಕ್ಲೈಂಟ್ನ ನಿಜವಾದ ರಿಸಾಲ್ವರ್ ಅನ್ನು ಪರಿಶೀಲಿಸಿ, ಏಕೆಂದರೆ ನಿರ್ಲಕ್ಷಿಸಿದ push ಉತ್ತರಿಸದ ಸರ್ವರ್ನಂತೆಯೇ ಕಾಣುತ್ತದೆ.
ಮೂರು ಪದರಗಳಲ್ಲಿ ಪರಿಶೀಲಿಸಿ
ಮೊದಲು ನೇರವಾಗಿ ಸರ್ವರ್ ಅನ್ನು ಕೇಳಿ, ನಂತರ ಕ್ಲೈಂಟ್, ನಂತರ ಅಪ್ಲಿಕೇಶನ್:
dig +short @10.8.0.1 alice.corp.example
getent hosts files.corp.example
ನೇರ ಪ್ರಶ್ನೆಗಳು ಉತ್ತರಿಸಿ ಅಪ್ಲಿಕೇಶನ್ ಉತ್ತರಿಸದಿದ್ದರೆ, ದೋಷ ಝೋನ್ನದಲ್ಲ, ಕ್ಲೈಂಟ್ಗೆ ಹಸ್ತಾಂತರದಲ್ಲಿದೆ. ಹೆಸರು ಪರಿಹಾರವಾಗಿ ಸಂಪರ್ಕ ಇನ್ನೂ ವಿಫಲವಾದರೆ, ಹೆಸರು ಸರಿಯಾಗಿದೆ ಮತ್ತು ಮುಂದೆ ನೋಡಬೇಕಾದದ್ದು ಮಾರ್ಗ ಅಥವಾ ಫೈರ್ವಾಲ್.
ಎರಡು ವರ್ಗಗಳನ್ನು ಸಂರಚನೆಯ ಪಕ್ಕದಲ್ಲಿ ಬರೆಯಿರಿ: ಯಾವ ಹೆಸರುಗಳು ರಚನೆಯಾಗುತ್ತವೆ, ಯಾವುವು ಸ್ಥಿರವಾಗಿವೆ, ಮತ್ತು ಪ್ರತಿಯೊಂದೂ ಯಾವ ಪ್ರಮಾಣಪತ್ರಕ್ಕೆ ಹೊಂದಬೇಕು. ಮುಂದೆ ಸರ್ವರ್ ಸೇರಿಸುವ ವ್ಯಕ್ತಿ ಮೊದಲು ಕಂಡ ಮಾದರಿಯನ್ನು ನಕಲಿಸುತ್ತಾರೆ.