{"id":188598,"date":"2013-08-01T12:12:04","date_gmt":"2013-08-01T08:12:04","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=188598"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=188598","title":{"rendered":"<span class=\"post_title\">\u0421\u0432\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 DynDNS \u0441\u0435\u0440\u0432\u0435\u0440<\/span>"},"content":{"rendered":"<div class=\"content html_format\">   \t\u041d\u0435\u0434\u0430\u0432\u043d\u043e \u043a\u043e \u043c\u043d\u0435 \u043e\u0431\u0440\u0430\u0442\u0438\u043b\u0438\u0441\u044c \u0441 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c \u00ab\u0410 \u043a\u0430\u043a\u043e\u0439 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 IP \u0430\u0434\u0440\u0435\u0441 \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u043c\u043e\u0434\u0435\u043c\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0431\u0440\u043e\u0441\u0430 \u043f\u043e\u0440\u0442\u0430 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440?\u00bb. \u041e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441 \u044f \u043d\u0435 \u0441\u043c\u043e\u0433, \u0442\u0430\u043a \u043a\u0430\u043a \u0434\u0430\u0432\u043d\u043e \u043d\u0435 \u0431\u044b\u043b \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u0430 \u043a\u0432\u0430\u043b\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430 \u043d\u0430 \u0442\u043e\u043c \u043a\u043e\u043d\u0446\u0435 \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u043b\u0430 \u0437\u0430\u043b\u043e\u0433\u0438\u043d\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c ip address show. \u0422\u043e\u0433\u0434\u0430 \u044f \u0437\u0430\u0434\u0443\u043c\u0430\u043b\u0441\u044f \u043d\u0430\u0434 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u0441\u0432\u043e\u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0430 DynDNS \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f IP \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0432\u0441\u0435\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u043a\u043b\u0438\u0435\u043d\u0442\u0430.<br \/>  <a name=\"habracut\"><\/a><br \/>  \u0421\u0435\u0440\u0432\u0435\u0440\u043d\u0430\u044f \u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u043d\u0430 Python. \u041e\u0421 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u2014 Debian 7, \u043a\u043b\u0438\u0435\u043d\u0442 \u2014 \u043b\u044e\u0431\u043e\u0439 Linux \u0441 Python. \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0439 \u0434\u043e\u043c\u0435\u043d \u0438 \u0441\u0432\u043e\u0438 DNS \u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/p>\n<h5>\u0421\u0435\u0440\u0432\u0435\u0440\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c<\/h5>\n<p>  <\/p>\n<h6>Bind<\/h6>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043a\u043b\u044e\u0447\u0438 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c DNS-\u0441\u0435\u0440\u0432\u0435\u0440:  <\/p>\n<pre><code class=\"bash\">dnssec-keygen -r \/dev\/urandom -a hmac-md5 -b 512 -n HOST dyndns.example.com. <\/code><\/pre>\n<p>  \u0418\u0437 \u043b\u043e\u0431\u043e\u0433\u043e \u0438\u0437 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432\u0438\u0434\u0430 <code>Kdyndns.example.com.+x+y.key<\/code> \u0438\u043b\u0438 <code>Kdyndns.example.com.+x+y.private<\/code> \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u043a\u043b\u044e\u0447 \u0437\u043e\u043d\u044b \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u043e\u043d\u0443 (<code>\/etc\/bind\/named.conf.local<\/code>):<\/p>\n<pre><code class=\"nginx\">key &quot;dyndns.example.com.&quot; {     algorithm hmac-md5;     secret &quot;\u0432\u043e\u0442 \u0442\u0443\u0442 \u0437\u0430\u043f\u043e\u043c\u043d\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u043d\u0435\u0435 \u043a\u043b\u044e\u0447&quot;; };  zone &quot;dyndns.example.com&quot; {     type master;     file &quot;\/etc\/bind\/db.dyndns.example.com&quot;;     allow-query { any; };     allow-transfer { 127.0.0.1; };     allow-update { key dyndns.example.com.; }; }; <\/code><\/pre>\n<h6>Apache<\/h6>\n<p>  \u0411\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Apache \u0441 mod-wsgi. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 Apache, \u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043e\u0434\u0438\u043d \u043d\u0443\u0436\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442:  <\/p>\n<pre><code class=\"bash\">sudo aptitude install libapache2-mod-wsgi <\/code><\/pre>\n<p>  \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043c\u043e\u0434\u0443\u043b\u044c wsgi:  <\/p>\n<pre><code class=\"bash\">sudo a2enmod wsgi sudo service apache2 reload <\/code><\/pre>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 VirtualHost \u0441 SSL:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\/etc\/apache2\/sites-available\/dyndns-ssl<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"apache\">&lt;VirtualHost *:443&gt; \tServerName dyndns.example.com \tServerAdmin admin@example.com \tDocumentRoot \/var\/www\/tmp \t&lt;Directory \/&gt; \t\tOptions -FollowSymLinks \t\tAllowOverride None \t\tOrder allow,deny \t\tAllow from all \t&lt;\/Directory&gt; \t&lt;Directory \/var\/www\/tmp&gt; \t\tOptions -Indexes -FollowSymLinks -MultiViews \t\tAllowOverride None \t\tdeny from all \t&lt;\/Directory&gt; \tAlias \/wsgi-scripts\/ \/var\/www\/dyndns\/wsgi-scripts\/ \t&lt;Location \/wsgi-scripts&gt; \t\tSetHandler wsgi-script \t\tOptions +ExecCGI \t&lt;\/Location&gt; \tSSLEngine on \tSSLCertificateFile \/etc\/ssl\/localcerts\/dyndns.example.com \tLogLevel info \tErrorLog ${APACHE_LOG_DIR}\/error_dyndns-ssl.example.com.log \tCustomLog ${APACHE_LOG_DIR}\/access_dyndns-ssl.example.com.log combined &lt;\/VirtualHost&gt; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0418 \u043a\u043b\u0430\u0434\u0435\u043c \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 <code>update-dyndns.wsgi<\/code> \u0432 <code>\/var\/www\/dyndns\/wsgi-scripts\/<\/code>:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">update-dyndns.wsgi<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">import dns.query import dns.tsigkeyring import dns.update import sys import datetime from IPy import IP from cgi import parse_qs, escape import hashlib   def application(environ, start_response): \tstatus = '200 OK' \toutput = 'example.com DynDNS: ' \tttl = 300 \tdomain = 'dyndns.example.com' \tsalt = 'YourSalt'   \td = parse_qs(environ['QUERY_STRING'])   \thostname = escape(d.get('hostname',[''])[0]) \tmain_address = escape(environ['REMOTE_ADDR']) \tinterfacesRaw = [i.split('_') for i in [escape(interface) for interface in d.get('interface',[])]] \tcheckRemote = escape(d.get('checkstring',[''])[0]) \tcheckString = hashlib.md5(salt + hostname).hexdigest()   \tinterfaces=[] \tfor interface in interfacesRaw: \t\ttry: \t\t\tIP(interface[1]) \t\t\tinterfaces.append(interface) \t\texcept: \t\t\toutput += 'Following addresses are not valid: ' + ' '.join(interface) \ttimestampStr = &quot;Last_update_at_&quot; + str(datetime.datetime.now().strftime(&quot;%Y-%m-%d_%H:%M&quot;))   \toutput += timestampStr + '; Hostname: ' + hostname + '; External address: ' + main_address + '; Check string: ' + checkRemote + '; Interfaces: ' + str(interfaces) \tif hostname != '' and main_address != '' and checkRemote == checkString: \t\ttry: \t\t\tkeyring = dns.tsigkeyring.from_text({domain+'.' : 'YourKeyring'}) \t\t\tupdate = dns.update.Update(domain, keyring=keyring) \t\t\tupdate.replace(hostname, ttl, 'a', main_address) \t\t\tupdate.replace(hostname, ttl, 'txt', timestampStr) \t\t\tif interfaces != []: \t\t\t\tfor interface in interfaces: \t\t\t\t\tstr1 = interface[0] + '.' + hostname + '.' + domain + '.' \t\t\t\t\tstr2 = interface[0] + '.' + hostname + '.' + domain + '.' \t\t\t\t\tupdate.replace(str1, ttl, 'a', interface[1]) \t\t\t\t\tupdate.replace(str2, ttl, 'txt', timestampStr) \t\t\tnsResponse = dns.query.tcp(update, '127.0.0.1') \t\t\toutput += '; update OK' \t\texcept: \t\t\toutput += '; Error inserting records!\\n\\n' \telse: \t\tprint 'Error in query ' + escape(environ['QUERY_STRING']) \t\toutput += '; Error in input' \tprint output   \toutput = '' \tresponse_headers = [('Content-type', 'text\/plain'),('Content-Length', str(len(output)))] \tstart_response(status, response_headers) \treturn [output] <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041e\u0431\u0449\u0438\u0439 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0442\u0430\u043a\u043e\u0432: \u043a\u043b\u0438\u0435\u043d\u0442 \u0434\u0435\u0440\u0433\u0430\u0435\u0442 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 URL \u0432\u0438\u0434\u0430 <code>https:\/\/dyndns.example.com\/wsgi-scripts\/update-dyndns.wsgi?hostname=&lt;hostname&gt;&interface=&lt;ifname&gt;_&lt;address&gt;&checkstring=&lt;checkstring&gt;<\/code>, \u0433\u0434\u0435 <code>checkstring<\/code> \u2014 \u043d\u0435\u043a\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u0430\u044f \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0435\u0439 \u0441\u043e\u043b\u0438 (\u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <i>salt<\/i>), \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u0438 \u0432\u0441\u0435\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c \u0438 \u0438\u043c\u0435\u043d\u0438 \u0445\u043e\u0441\u0442\u0430. <code>interface<\/code> \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0433\u043e\u0434\u043d\u043e \u2014 \u043e\u043d\u0438 \u0432\u0441\u0435 \u043f\u043e\u043f\u0430\u0434\u0443\u0442 \u0432 DNS-\u0437\u043e\u043d\u0443. \u041f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 A \u0438 TXT \u0437\u0430\u043f\u0438\u0441\u0438 \u0437\u043e\u043d\u044b \u0432\u0438\u0434\u0430 <code>interface.hostname.example.com<\/code> \u0438 <code>hostname.example.com<\/code>.<\/p>\n<h5>\u041a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0430\u044f \u0447\u0430\u0441\u0442\u044c<\/h5>\n<p>  \u0422\u0443\u0442 \u0432\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e \u2014 \u043f\u043e cron \u043a\u0430\u0436\u0434\u044b\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u043b \u0447\u0430\u0441\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442, \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u0434\u0430\u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 <code>domain<\/code>, <code>myhostname<\/code> \u0438 <code>salt<\/code>:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">update_mydyndns.py<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">#!\/usr\/bin\/python ################################################################## # #Configuration: domain='dyndns.example.com' myhostname='hostname-placeholder' ##################################################################  import socket import fcntl import struct import sys import array import hashlib import httplib import urllib  def all_interfaces(): \tis_64bits = sys.maxsize &gt; 2**32 \tstruct_size = 40 if is_64bits else 32 \ts = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) \tmax_possible = 8 # initial value \twhile True: \t\tbytes = max_possible * struct_size \t\tnames = array.array('B', '\\0' * bytes) \t\toutbytes = struct.unpack('iL', fcntl.ioctl(s.fileno(),0x8912,struct.pack('iL', bytes, names.buffer_info()[0])))[0] \t\tif outbytes == bytes: \t\t\tmax_possible *= 2 \t\telse: \t\t\tbreak \tnamestr = names.tostring() \tlst = [] \tfor i in range(0, outbytes, struct_size): \t\tname = namestr[i:i+16].split('\\0', 1)[0] \t\tip = socket.inet_ntoa(namestr[i+20:i+24]) \t\tif name != 'lo': \t\t\tlst.append((name,ip)) \treturn lst  salt = 'YourSalt' checkString = hashlib.md5(salt + myhostname).hexdigest() requestData = {} requestData['hostname'] = myhostname requestData['checkstring'] = checkString requestData['interface'] = [j for j in [i[0]+'_'+i[1] for i in all_interfaces()]] requestString = urllib.urlencode(requestData,True)  conn = httplib.HTTPSConnection(&quot;dyndns.example.com&quot;, 443) conn.request(&quot;GET&quot;, &quot;\/wsgi-scripts\/update-dyndns.wsgi?&quot;+requestString) r1 = conn.getresponse() print r1.status, r1.reason <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0435\u0449\u0451 \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0437\u043e\u043d\u044b (\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0432 <code>\/var\/www\/dyndns\/wsgi-scripts\/<\/code>):  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">get-whole-zone.wsgi<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">import dns.query import dns.zone   def application(environ, start_response): \tstatus = '200 OK' \toutput = '' \tdomain = 'dyndns.example.com'   \tz = dns.zone.from_xfr(dns.query.xfr('127.0.0.1', 'dyndns.example.com')) \tnames = z.nodes.keys() \tnames.sort() \tfor n in names: \t\toutput += '\\n' + z[n].to_text(n)   \tresponse_headers = [('Content-type', 'text\/plain'),('Content-Length', str(len(output)))] \tstart_response(status, response_headers) \treturn [output] <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<h5>P.S.<\/h5>\n<p>  \u042f \u043f\u043e\u043d\u0438\u043c\u0430\u044e, \u0447\u0442\u043e Python-\u043a\u043e\u0434 \u043d\u0435 \u043f\u0440\u0435\u0442\u0435\u043d\u0434\u0443\u0435\u0442 \u043d\u0430 \u043a\u0440\u0430\u0441\u0438\u0432\u043e\u0441\u0442\u044c \u0438 \u0432 \u0446\u0435\u043b\u043e\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0441\u0435\u043a\u044c\u044e\u0440\u043d\u043e (\u0431\u044b\u043b \u0431\u044b \u0440\u0430\u0434 \u0443\u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0431\u0435\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u0447\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u0441\u043e\u043b\u0438), \u043d\u043e \u0443 \u043c\u0435\u043d\u044f \u043e\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u0440\u0435\u0448\u0430\u0435\u0442 \u043a\u0443\u0447\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u043a\u043e\u043c\u0443-\u043d\u0438\u0431\u0443\u0434\u044c \u0432\u0441\u0435 \u044d\u0442\u043e \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f.    \t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/188598\/\"> http:\/\/habrahabr.ru\/post\/188598\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">   \t\u041d\u0435\u0434\u0430\u0432\u043d\u043e \u043a\u043e \u043c\u043d\u0435 \u043e\u0431\u0440\u0430\u0442\u0438\u043b\u0438\u0441\u044c \u0441 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c \u00ab\u0410 \u043a\u0430\u043a\u043e\u0439 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 IP \u0430\u0434\u0440\u0435\u0441 \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u043c\u043e\u0434\u0435\u043c\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0431\u0440\u043e\u0441\u0430 \u043f\u043e\u0440\u0442\u0430 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440?\u00bb. \u041e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441 \u044f \u043d\u0435 \u0441\u043c\u043e\u0433, \u0442\u0430\u043a \u043a\u0430\u043a \u0434\u0430\u0432\u043d\u043e \u043d\u0435 \u0431\u044b\u043b \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u0430 \u043a\u0432\u0430\u043b\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430 \u043d\u0430 \u0442\u043e\u043c \u043a\u043e\u043d\u0446\u0435 \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u043b\u0430 \u0437\u0430\u043b\u043e\u0433\u0438\u043d\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c ip address show. \u0422\u043e\u0433\u0434\u0430 \u044f \u0437\u0430\u0434\u0443\u043c\u0430\u043b\u0441\u044f \u043d\u0430\u0434 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u0441\u0432\u043e\u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0430 DynDNS \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f IP \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0432\u0441\u0435\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u043a\u043b\u0438\u0435\u043d\u0442\u0430.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-188598","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/188598","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=188598"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/188598\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=188598"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=188598"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=188598"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}