<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                [TOC] # 前提 首先你家里寬帶要分配公網ip 我們用路由跟蹤命令查看下 ~~~ traceroute baidu.com ~~~ mac是traceroute,linux和windows自己百度路由跟蹤命令 可以看出你電腦去百度經過的ip 一般家庭的路由器ip是192.168.0.1或者192.168.1.1 如果分配了公網ip就往下看 ## ios開啟ipv6 ios-APN文件 https://www.v2ex.com/amp/t/474539 安卓和電信 https://www.youtube.com/watch?v=09QOuRrYCC0&app=desktop # 進行端口映射 首先我們在外部分配公網ip的那個路由器中設置端口映射 轉發規則-虛擬服務器 ![](https://box.kancloud.cn/bb4e3ac0d20ae1b7275468f41a712863_1328x360.png) 由于我家里里面又接入了一個路由器,所以我還有一個路由器要設置端口映射 (建議自己電腦設置靜態ip,在路由器那邊設置,DHCP) ![](https://box.kancloud.cn/7b9285fd378b4f40269ad0a6fd2266d8_900x160.png) 把上層路由器的端口再映射到我的mac上 # ip分析 ~~~ http://ip.koolcenter.com/all ~~~ # 查詢公網ip接入 ## ipv4 試了發現有用的,有可能會沒響應 ~~~ curl members.3322.org/dyndns/getip curl http://v4.ipv6-test.com/api/myip.php curl http://ip.koolcenter.com curl ipecho.net/plain curl www.trackip.net/i # 可能需要正則切割下 curl icanhazip.com curl ipinfo.io/ip curl ipecho.net/plain ~~~ 暫時沒響應,有時有響應 ~~~ curl curlmyip.com curl ifconfig.me curl ip.appspot.com ~~~ 或者你可以curl路由器,然后正則切割把路由器中的公網ip提取出來 ## ipv6 ~~~ http://v6.ipv6-test.com/api/myip.php ~~~ ## 成品 ~~~ 支持ipv6 https://github.com/NewFuture/DDNS ~~~ ## ip地址查詢 ~~~ <?php $ip = @file_get_contents("http://ip.taobao.com/service/getIpInfo.php?ip=".$_GET["ip"]); $ip = json_decode($ip,true); ?> ~~~ 其他的 ~~~ api.help.bj.cn/apis/ip?ip=xx.xx.xx.xx ~~~ http://ip-api.com/json/?fields=520191&lang=zh-CN 獲取的數據默認語言可以隨便設置,較精確,但是沒有城市行政代碼 http://pv.sohu.com/cityjson?ie=utf-8 搜狐這個接口很穩定,也會返回城市代碼500000,但是有時用4G或者其他情況返回的城市代碼為CN,城市名為CHINA,不夠精確 # php獲取公網ip ~~~ /** * 參數: * * @param string $proxy_override, [true|false], 是否優先獲取從代理過來的地址 * @return string * */ function get_client_ip_from_ns($proxy_override = false) { if ($proxy_override) { /* 優先從代理那獲取地址或者 HTTP_CLIENT_IP 沒有值 */ $ip = empty($_SERVER["HTTP_X_FORWARDED_FOR"]) ? (empty($_SERVER["HTTP_CLIENT_IP"]) ? NULL : $_SERVER["HTTP_CLIENT_IP"]) : $_SERVER["HTTP_X_FORWARDED_FOR"]; } else { /* 取 HTTP_CLIENT_IP, 雖然這個值可以被偽造, 但被偽造之后 NS 會把客戶端真實的 IP 附加在后面 */ $ip = empty($_SERVER["HTTP_CLIENT_IP"]) ? NULL : $_SERVER["HTTP_CLIENT_IP"]; } if (empty($ip)) { $ip = $_SERVER['REMOTE_ADDR']; } /* 真實的IP在以逗號分隔的最后一個, 當然如果沒用代理, 沒偽造IP, 就沒有逗號分離的IP */ if ($p = strrpos($ip, ",")) { $ip = substr($ip, $p+1); } return trim($ip); } $rel = get_client_ip_from_ns(); var_dump($rel); ~~~ # 保持存活機制 ## 在linux下使用TCP的keepalive tcp_keepalive_time 一個連接需要TCP開始發送keepalive探測數據包之前的空閑時間。以秒為單位 tcp_keepalive_probes 發送TCP keepalive探測數據包的最大數量,默認是9.如果發送9個keepalive探測包后對端仍然沒有響應,就關掉這個連接 tcp_keepalive_intvl 發送兩個TCP keepalive探測數據包的間隔時間,默認是75秒 ~~~ $ cat /proc/sys/net/ipv4/tcp_keepalive_time 7200 $ cat /proc/sys/net/ipv4/tcp_keepalive_probes 9 $ cat /proc/sys/net/ipv4/tcp_keepalive_intvl 75 ~~~ 可以通過echo臨時修改 ~~~ echo "300" > /proc/sys/net/ipv4/tcp_keepalive_time ~~~ 也可以通過修改/etc/sysctl.conf永久生效 ~~~ $ grep net.ipv4.tcp_keepalive_time /etc/sysctl.conf net.ipv4.tcp_keepalive_time = 300 $ sysctl -p|grep net.ipv4.tcp_keepalive_time net.ipv4.tcp_keepalive_time = 300 ~~~ ## ssh的keepalive SSH連接總是隔一段時間沒有輸入時就斷開,解決辦法如下: **服務端配置** ~~~ sudo vim /etc/ssh/sshd_config ClientAliveInterval 60 #服務端主動向客戶端請求響應的間隔,數值是秒 ClientAliveCountMax 10 #服務器發出請求后客戶端沒有響應的次數達到一定值就自動斷開 sudo restart ssh ~~~ **客戶端配置 ** ~~~ sudo vi /etc/ssh/ssh_config #或~/.ssh/config ~~~ 客戶端主動向服務端請求響應的間隔 ServerAliveInterval ~~~ ServerAliveInterval 60 TCPKeepAlive=yes ~~~ 或 ~~~ ssh -i <key-file> -o StrictHostKeyChecking=no -o TCPKeepAlive=yes -o ServerAliveInterval=30 ubuntu@<ip> ~~~ 上面方式任選一種,我選客戶端配置方式。 # mac端口轉發 找個端口轉發工具就可以,我這邊用的是rinetd brew下載rinetd,可能需要翻墻 ~~~ brew install rinetd ~~~ 修改配置文件`/usr/local/etc/rinetd.conf` ~~~ # 設置允許訪問的ip地址信息 allow * # 9503轉發到本機的ssh 0.0.0.0 9503 127.0.0.1 22 # 日志 logfile /usr/local/var/log/rinetd.log ~~~ 啟動 ~~~ rinetd ~~~ 我這邊設置9503端口轉發到ssh的22 # mac設置開啟ssh端口 系統設置中共享 遠程登錄打鉤,選所有人 ![](https://box.kancloud.cn/9b22ba7fb03367fb7e59011e4f201fa7_1256x724.png) # ssh指定端口 ~~~ ssh 到指定端口 ssh -p xx user@ip xx 為 端口號 user為用戶名 ip為要登陸的ip ~~~ # shell 要有curl,里面查公網ip用的是一個url ~~~ #!/bin/sh #By h46incon #Dependences: bind-dig, curl, openssl-util, tr, sort ## ----- Setting ----- AccessKeyId="testid" AccessKeySec="testsecret" DomainRecordId="00000" # DomainRR, use "@" to set top level domain DomainRR="www" DomainName="example.com" DomainType="A" # DNS Server for check current IP of the record # Perferred setting is your domain name service provider # Leave it blank if using the default DNS Server DNSServer="dns9.hichina.com" # The server address of ALi API ALiServerAddr="alidns.aliyuncs.com" # A url provided by a third-party to echo the public IP of host MyIPEchoUrl="http://members.3322.org/dyndns/getip" # MyIPEchoUrl="http://icanhazip.com" # the generatation a random number can be modified here #((rand_num=${RANDOM} * ${RANDOM} * ${RANDOM})) rand_num=$(openssl rand -hex 16) ## ----- Log level ----- _DEBUG_=true _LOG_=true _ERR_=true ## ===== private ===== ## ----- global var ----- # g_pkey_$i # param keys # g_pval_$key # param values g_pn=0 # number of params _func_ret="" ## ----- Base Util ----- _debug() { ${_DEBUG_} && echo "> $*"; } _log() { ${_LOG_} && echo "* $*"; } _err() { ${_ERR_} && echo "! $*"; } reset_func_ret() { _func_ret="" } ## ----- params ----- # @Param1: Key # @Param2: Value put_param() { eval g_pkey_${g_pn}=$1 eval g_pval_$1=$2 g_pn=$((g_pn + 1)) } # This function will init all public params EXCLUDE "Signature" put_params_public() { put_param "Format" "JSON" put_param "Version" "2015-01-09" put_param "AccessKeyId" "${AccessKeyId}" put_param "SignatureMethod" "HMAC-SHA1" put_param "SignatureVersion" "1.0" # time stamp local time_utc=$(date -u +"%Y-%m-%dT%H:%M:%SZ") _debug time_stamp: ${time_utc} put_param "Timestamp" "${time_utc}" # random number _debug rand_num: ${rand_num} put_param "SignatureNonce" "${rand_num}" } # @Param1: New IP address put_params_UpdateDomainRecord() { put_param "Action" "UpdateDomainRecord" put_param "RR" "${DomainRR}" put_param "RecordId" "${DomainRecordId}" put_param "Type" "${DomainType}" put_param "Value" "${1}" } put_params_DescribeDomainRecords() { put_param "Action" "DescribeDomainRecords" put_param "DomainName" ${DomainName} } pack_params() { reset_func_ret local ret="" local key key_enc val val_enc local i=0 while [ $i -lt ${g_pn} ] do eval key="\$g_pkey_${i}" eval val="\$g_pval_${key}" rawurl_encode "${key}" key_enc=${_func_ret} rawurl_encode "${val}" val_enc=${_func_ret} ret="${ret}${key_enc}=${val_enc}&" i=$((++i)) done #delete last "&" _func_ret=${ret%"&"} } # ----- Other utils ----- get_my_ip() { reset_func_ret local my_ip=$(curl ${MyIPEchoUrl} --silent --connect-timeout 10) #echo ${my_ip} _func_ret=${my_ip} } get_domain_ip() { reset_func_ret local full_domain="" if [ -z "${DomainRR}" ] || [ "${DomainRR}" == "@" ]; then full_domain=${DomainName} else full_domain=${DomainRR}.${DomainName} fi local ns_param="" if [ -z "${DNSServer}" ] ; then ns_param="" else ns_param="@${DNSServer}" fi _func_ret=$(dig "$ns_param" "${full_domain}" +short) } # @Param1: Raw url to be encoded rawurl_encode() { reset_func_ret local string="${1}" local strlen=${#string} local encoded="" local pos c o pos=0 while [ ${pos} -lt ${strlen} ] do c=${string:$pos:1} case "$c" in [-_.~a-zA-Z0-9] ) o="${c}" ;; * ) o=$(printf "%%%02X" "'$c") esac encoded="${encoded}${o}" pos=$(($pos + 1)) done _func_ret="${encoded}" } calc_signature() { reset_func_ret local sorted_key=$( i=0 while [ $i -lt ${g_pn} ] do eval key="\$g_pkey_$i" echo "${key}" i=$((++i)) done | LC_COLLATE=C sort ) local query_str="" for key in ${sorted_key} do eval val="\$g_pval_${key}" rawurl_encode "${key}" key_enc=${_func_ret} rawurl_encode "${val}" val_enc=${_func_ret} query_str="${query_str}${key_enc}=${val_enc}&" done query_str=${query_str%'&'} _debug Query String: ${query_str} # encode rawurl_encode "${query_str}" local encoded_str=${_func_ret} local str_to_signed="GET&%2F&"${encoded_str} _debug String to Signed: ${str_to_signed} local key_sign="${AccessKeySec}&" _func_ret=$(/bin/echo -n ${str_to_signed} | openssl dgst -binary -sha1 -hmac ${key_sign} | openssl enc -base64) } send_request() { # put signature calc_signature local signature=${_func_ret} put_param "Signature" "${signature}" # pack all params pack_params local packed_params=${_func_ret} local req_url="${ALiServerAddr}/?${packed_params}" _debug Request addr: ${req_url} local respond=$(curl -3 ${req_url} --silent --connect-timeout 10 -w "HttpCode:%{http_code}") echo ${respond} } describe_record() { put_params_public put_params_DescribeDomainRecords send_request } update_record() { # get ip get_my_ip local my_ip=${_func_ret} # Check if need update _debug My IP: ${my_ip} if [ -z "${my_ip}" ]; then _err Could not get my ip, exitting... exit fi get_domain_ip local domain_ip=${_func_ret} _debug Current Domain IP: ${domain_ip} if [ "${my_ip}" == "${domain_ip}" ]; then _log Need not to update, current IP: ${my_ip} exit fi # init params put_params_public put_params_UpdateDomainRecord ${my_ip} send_request } main() { describe_record #update_record } main ~~~ # 判斷主機是否支持 ### **進入BIOS** 當電腦開機啟動時,通過反復按鍵盤“DELETE”鍵或“F2”鍵,進入到主板BIOS設置界面。更多啟動主板BIOS設置界面幫助,參考[百度經驗](http://jingyan.baidu.com/article/b24f6c82c11ad286bfe5da23.html)。 ### **開啟喚醒功能** 通常到“Power Managment(電源管理)”下尋找如下列選項: "Boot on LAN"; "Wake on LAN"; "PME Event WakeUp",; "Resume by MAC LAN"; "Wake-Up by PCI card"; "Wake Up On PCI PME"; "Power On by PCI Card"; "WakeUp by PME of PCI"; "Power On By PCI Devices"; "WakeUp by Onborad LAN"; "Resume By PCI or PCI-E Ddevice"或類似的東西,并可以啟用它。 可視圖形化的UEFI BIOS,可參考下列方式設置: 高級 > 高級電源管理(APM)> 開啟**Resume By PCI or PCI-E Ddevice**(由pci/pcie設備喚醒)選項 **聯想主板** 進入**Power——Automatic Power ON**——**Wake On LAN**設為**Enabled** ![](https://box.kancloud.cn/896e2ea9ea8f22de665855d7900bc461_537x447.png) **華碩主板** 進入高級——高級電源管理——開啟由PCI/PCIE設備喚醒選項 ![](https://box.kancloud.cn/6b3b53c2eb759ef48b8ba8daafdf0f73_549x472.png) **技嘉** 進入BIOS功能——網絡啟動——選擇Legacy First或UEFI First選項 ![](https://box.kancloud.cn/f8ede3afa860835d275d549f0215b106_492x373.png) ## 關閉節電功能 遠程開機需要網卡保持待機,關機后網卡燈不亮,請檢查主板是否開啟節能模式。因各廠商對此功能名稱定義不一,常見的節電功能選項: 1. 假如有**Low Power Mode**選項,一定要設置為**Off** ![](https://box.kancloud.cn/f901d67130170a8bd2e4b2b99d5a7ed7_638x373.png) 2. 或者是**ErP**和**EuP**選項,設置為**Disabled** ![](https://box.kancloud.cn/dd604a1f3a4615308b18ab318b16920d_646x145.png) # 斷電后自動開機 wakeonlan怕非正常關機, 如果非正常關機, wakeonlan會失效, 用這個代替wakeonlan失效 ![](https://img.kancloud.cn/d0/7d/d07d3d825991d0b5ad446db0e29a5fd8_1124x504.png) # linux系統設置喚醒 檢查網卡是否支持喚醒功能,輸入命令**ethtool eth0**打印出網卡的信息 ![](https://box.kancloud.cn/e5f422377f7c21c9b02c6c2b089d8954_595x394.png) Supports Wake-on 值為g,表示網卡支持遠程開機;若為d,則不支持。 Wake-on值為g,表示網卡已開啟遠程喚醒功能; 若為d,則輸入命令 ethtool -s eth0 wol g 開啟。 命令執行后,輸入ethtool eth0,檢測是否成功開啟wake on lan功能
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看