{"id":55,"date":"2025-10-08T19:49:18","date_gmt":"2025-10-08T11:49:18","guid":{"rendered":"https:\/\/r33.it\/?p=55"},"modified":"2025-10-08T21:13:05","modified_gmt":"2025-10-08T13:13:05","slug":"%e5%b8%82%e9%9d%a2%e4%b8%8a%e5%85%8d%e8%b4%b9%e7%9a%84tunnelbroker%e6%9c%8d%e5%8a%a1%e6%b1%87%e6%80%bb","status":"publish","type":"post","link":"https:\/\/r33.it\/?p=55","title":{"rendered":"\u5e02\u9762\u4e0a\u514d\u8d39\u7684Tunnelbroker\u670d\u52a1\u6c47\u603b"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\" id=\"0-%E5%89%8D%E8%A8%80\">\u524d\u8a00<\/h2>\n\n\n\n<p>HE(Hurricane Electric)\u7684Tunnelbroker.net\u6bd4\u8f83\u8457\u540d\uff0c\u672c\u7ad9\u4e5f\u5199\u8fc7\u6ce8\u518c+\u6539IP\u5730\u533a\u7684\u6559\u7a0b\uff0c\u4f46\u662fTunnelbroker.net\u4e5f\u6709\u4e0d\u8db3\u7684\u4e00\u4e9b\u5730\u65b9\uff0c\u6240\u4ee5\u6211\u53bb\u7f51\u4e0a\u5bfb\u627e\u4e86\u4e00\u4e9b\u5176\u4ed6\u7684\u514d\u8d39\u7684Tunnelbroker\u670d\u52a1\uff0c\u4f9b\u53c2\u8003\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"1-%E4%B8%80%E3%80%81tunnelbrokernet\">\u4e00\u3001Tunnelbroker.net<\/h2>\n\n\n\n<style>\n\/* ======== \u901a\u7528\u6837\u5f0f\uff08\u652f\u6301\u6df1\u6d45\u6a21\u5f0f\uff09 ======== *\/\n.review-card {\n  --bg: #ffffff;\n  --text: #222;\n  --border: #e5e5e5;\n  --shadow: rgba(0, 0, 0, 0.08);\n  --pros-bg: #ebfbee;\n  --cons-bg: #fff0f0;\n  --pros-text: #146c2e;\n  --cons-text: #a60000;\n  --star-color: #ffb400;\n  --star-empty: #d0d0d0;\n  --accent: #4a6cf7;\n  --radius: 16px;\n  transition: all 0.3s ease;\n}\n@media (prefers-color-scheme: dark) {\n  .review-card {\n    --bg: #1e1e1e;\n    --text: #eee;\n    --border: #333;\n    --shadow: rgba(0, 0, 0, 0.6);\n    --pros-bg: #14321a;\n    --cons-bg: #3a1111;\n    --pros-text: #7cf98c;\n    --cons-text: #ff9a9a;\n    --star-empty: #444;\n    --accent: #6b8aff;\n  }\n}\n\n\/* ======== \u5361\u7247\u5e03\u5c40 ======== *\/\n.review-card {\n  max-width: 720px;\n  margin: 2.5em auto;\n  background: var(--bg);\n  color: var(--text);\n  border-radius: var(--radius);\n  box-shadow: 0 12px 40px var(--shadow);\n  overflow: hidden;\n  border: 1px solid var(--border);\n  font-family: \"Segoe UI\", \"PingFang SC\", \"Inter\", -apple-system, sans-serif;\n  animation: fadeIn 0.6s ease;\n  position: relative;\n}\n@keyframes fadeIn {\n  from { opacity: 0; transform: translateY(15px); }\n  to { opacity: 1; transform: translateY(0); }\n}\n\n\/* ======== \u6807\u9898\u4e0e\u8bc4\u5206 ======== *\/\n.review-header {\n  text-align: center;\n  padding: 2.2em 1.8em 1.8em;\n  background: linear-gradient(165deg, var(--bg) 40%, rgba(74, 108, 247, 0.03));\n  position: relative;\n  overflow: hidden;\n}\n.review-header::before {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  height: 4px;\n  background: linear-gradient(90deg, var(--accent), #8a68ee);\n}\n.review-title {\n  font-size: 1.9em;\n  font-weight: 800;\n  margin-bottom: 0.6em;\n  letter-spacing: -0.02em;\n  background: linear-gradient(135deg, var(--text), var(--accent));\n  -webkit-background-clip: text;\n  -webkit-text-fill-color: transparent;\n  background-clip: text;\n}\n.review-stars {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  gap: 0.6em;\n  margin-top: 0.8em;\n}\n.review-stars .number {\n  font-size: 1.6em;\n  font-weight: 700;\n  color: var(--star-color);\n  text-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n.star {\n  display: inline-block;\n  width: 28px;\n  height: 28px;\n  background: var(--star-color);\n  -webkit-mask: url(\"https:\/\/cdn.jsdelivr.net\/gh\/twitter\/twemoji@14.0.2\/assets\/svg\/2b50.svg\") no-repeat center \/ contain;\n  mask: url(\"https:\/\/cdn.jsdelivr.net\/gh\/twitter\/twemoji@14.0.2\/assets\/svg\/2b50.svg\") no-repeat center \/ contain;\n  transition: transform 0.2s ease;\n}\n.star:hover {\n  transform: scale(1.2);\n}\n.star.empty { background: var(--star-empty); }\n.star.partial {\n  background: linear-gradient(90deg, var(--star-color) 0%, var(--star-color) var(--percent, 0%), var(--star-empty) var(--percent, 0%));\n}\n\n\/* ======== \u4f18\u7f3a\u70b9\u533a\u57df ======== *\/\n.review-pros-cons {\n  display: flex;\n  flex-wrap: wrap;\n  border-top: 1px solid var(--border);\n  position: relative;\n}\n.pros, .cons {\n  flex: 1 1 50%;\n  padding: 1.8em 2em;\n  box-sizing: border-box;\n  white-space: pre-line;\n  min-height: 200px;\n  position: relative;\n  transition: all 0.3s ease;\n}\n.pros:hover, .cons:hover {\n  transform: translateY(-2px);\n}\n.pros {\n  background: var(--pros-bg);\n  color: var(--pros-text);\n  border-right: 1px solid var(--bg);\n}\n.cons {\n  background: var(--cons-bg);\n  color: var(--cons-text);\n}\n.section-title {\n  font-weight: 700;\n  font-size: 1.15em;\n  margin-bottom: 1em;\n  display: flex;\n  align-items: center;\n  gap: 0.5em;\n}\n.section-title::before {\n  content: \"\";\n  width: 6px;\n  height: 6px;\n  border-radius: 50%;\n  background: currentColor;\n  display: inline-block;\n}\n.pros .section-title::before {\n  background: var(--pros-text);\n}\n.cons .section-title::before {\n  background: var(--cons-text);\n}\n.section-title::before {\n  display: none;\n}\n.pros li, .cons li {\n  list-style: none;\n  margin: 0.8em 0;\n  padding-left: 1.6em;\n  position: relative;\n  line-height: 1.6em;\n  transition: transform 0.2s ease;\n}\n.pros li:hover, .cons li:hover {\n  transform: translateX(4px);\n}\n.pros li::before {\n  content: \"\u2713\";\n  position: absolute;\n  left: 0;\n  color: var(--pros-text);\n  font-weight: bold;\n  font-size: 1.1em;\n}\n.cons li::before {\n  content: \"\u2715\";\n  position: absolute;\n  left: 0;\n  color: var(--cons-text);\n  font-weight: bold;\n  font-size: 1.1em;\n}\n\n\/* \u54cd\u5e94\u5f0f\u4f18\u5316 *\/\n@media (max-width: 640px) {\n  .review-card {\n    margin: 1.5em;\n    border-radius: 12px;\n  }\n  .review-header {\n    padding: 1.8em 1.2em 1.4em;\n  }\n  .review-title {\n    font-size: 1.6em;\n  }\n  .pros, .cons {\n    flex: 1 1 100%;\n    padding: 1.4em 1.6em;\n    min-height: auto;\n  }\n  .pros {\n    border-right: none;\n    border-bottom: 1px solid var(--bg);\n  }\n}\n<\/style>\n\n<div class=\"review-card\" id=\"reviewCard-1\">\n  <div class=\"review-header\">\n    <div class=\"review-title\" id=\"reviewTitle-1\">\u4ea7\u54c1\u6807\u9898<\/div>\n    <div class=\"review-stars\">\n      <span class=\"number\" id=\"reviewScore-1\">0.0<\/span>\n      <span id=\"starContainer-1\"><\/span>\n    <\/div>\n  <\/div>\n  <div class=\"review-pros-cons\">\n    <div class=\"pros\">\n      <div class=\"section-title\">\u4f18\u70b9<\/div>\n      <ul id=\"prosList-1\"><li>\u52a0\u8f7d\u4e2d...<\/li><\/ul>\n    <\/div>\n    <div class=\"cons\">\n      <div class=\"section-title\">\u7f3a\u70b9<\/div>\n      <ul id=\"consList-1\"><li>\u52a0\u8f7d\u4e2d...<\/li><\/ul>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(() => {\n  \/* ======= \u914d\u7f6e\u533a ======= *\/\n  const config = {\n    id: 1, \/\/ \u540c\u4e00\u9875\u9762\u591a\u4e2a\u5361\u65f6\u6362\u6210 2\u30013...\n    title: \"Tunnelbroker.net\",\n    score: 4.7,\n    pros: [\n      \"Endpoint\u6570\u6781\u591a\uff0c\u5168\u7403\u5206\u5e03\",\n      \"\u76ee\u524d\u8001\u53f75\u4e2a\u96a7\u9053\uff0c\u65b0\u53f72\u4e2a\u96a7\u9053\",\n      \"\u6613\u6ce8\u518c\uff0c\u6bcf\u4e2a\u96a7\u90531\u4e2a\/64\u4e14\u53ef\u624b\u52a8\u5206\u914d\/48\",\n      \"\u53ef\u5237IP\",\n      \"\u6839\u636e\u8bbe\u7f6e\u7684\u8d26\u6237\u6240\u5728\u56fd\u5bb6\u8fdb\u884cGeoFeed\uff0c\u53ef\u6539\u6210KP\u3001\u5357\u6781\u6d32\u7b49\u5730\u533a\",\n      \"\u652f\u6301rDNS\u548cip6.arpa\u53cd\u89e3\u57df\u540d\"\n    ],\n    cons: [\n      \"\u5bf9\u56fd\u5185\u4e0d\u53cb\u597d\uff0cHK\u8282\u70b9\u7ed5\u7f8e\uff0c\u7591\u4f3c\u4ec5\u5728\u7f8e\u56fd\u4e0eCogent (AS174)\u63a5\u7ebf\uff0c\u4e4b\u524d\u6d4b\u8bd5\u9999\u6e2f\u673aping\u9999\u6e2f\u8282\u70b9\u5ef6\u8fdf100+ms\",\n      \"\u65b0\u53f7\u9700\u898124H(\u53ef\u80fd\u4e0d\u5230)\u624d\u53ef\u5206\u914d\/48\uff0c\u6bcf\u4e2a\u8d26\u53f7\u6bcf\u5929\u53ea\u80fd\u5206\u914d\u4e00\u4e2a\/48(\u5373\u4f7f\u5206\u914d\u540e\u5220\u9664\u5f53\u5929\u4e5f\u4e0d\u80fd\u518d\u5206\u914d\/48)\"\n    ]\n  };\n\n  \/* ======= \u5e94\u7528\u903b\u8f91 ======= *\/\n  const id = config.id;\n  const titleEl = document.getElementById(`reviewTitle-${id}`);\n  const scoreEl = document.getElementById(`reviewScore-${id}`);\n  const starsEl = document.getElementById(`starContainer-${id}`);\n  const prosEl = document.getElementById(`prosList-${id}`);\n  const consEl = document.getElementById(`consList-${id}`);\n\n  if (!titleEl) return;\n  titleEl.textContent = config.title;\n  scoreEl.textContent = config.score.toFixed(1);\n\n  \/\/ \u661f\u7ea7\u6e32\u67d3\n  starsEl.innerHTML = \"\";\n  const fullStars = Math.floor(config.score);\n  const remainder = config.score - fullStars;\n  for (let i = 0; i < 5; i++) {\n    const s = document.createElement(\"span\");\n    s.classList.add(\"star\");\n    if (i < fullStars) {\n      \/\/ \u6ee1\u661f\n    } else if (i === fullStars && remainder > 0) {\n      s.classList.add(\"partial\");\n      s.style.setProperty(\"--percent\", (remainder * 100) + \"%\");\n    } else s.classList.add(\"empty\");\n    starsEl.appendChild(s);\n  }\n\n  \/\/ \u4f18\u7f3a\u70b9\u6e32\u67d3\n  prosEl.innerHTML = \"\";\n  consEl.innerHTML = \"\";\n  config.pros.forEach(t => {\n    const li = document.createElement(\"li\");\n    li.textContent = t;\n    prosEl.appendChild(li);\n  });\n  config.cons.forEach(t => {\n    const li = document.createElement(\"li\");\n    li.textContent = t;\n    consEl.appendChild(li);\n  });\n})();\n<\/script>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e8c\u3001NetAssist<\/h2>\n\n\n\n<style>\n\/* ======== \u901a\u7528\u6837\u5f0f\uff08\u652f\u6301\u6df1\u6d45\u6a21\u5f0f\uff09 ======== *\/\n.review-card {\n  --bg: #ffffff;\n  --text: #222;\n  --border: #e5e5e5;\n  --shadow: rgba(0, 0, 0, 0.08);\n  --pros-bg: #ebfbee;\n  --cons-bg: #fff0f0;\n  --pros-text: #146c2e;\n  --cons-text: #a60000;\n  --star-color: #ffb400;\n  --star-empty: #d0d0d0;\n  --accent: #4a6cf7;\n  --radius: 16px;\n  transition: all 0.3s ease;\n}\n@media (prefers-color-scheme: dark) {\n  .review-card {\n    --bg: #1e1e1e;\n    --text: #eee;\n    --border: #333;\n    --shadow: rgba(0, 0, 0, 0.6);\n    --pros-bg: #14321a;\n    --cons-bg: #3a1111;\n    --pros-text: #7cf98c;\n    --cons-text: #ff9a9a;\n    --star-empty: #444;\n    --accent: #6b8aff;\n  }\n}\n\n\/* ======== \u5361\u7247\u5e03\u5c40 ======== *\/\n.review-card {\n  max-width: 720px;\n  margin: 2.5em auto;\n  background: var(--bg);\n  color: var(--text);\n  border-radius: var(--radius);\n  box-shadow: 0 12px 40px var(--shadow);\n  overflow: hidden;\n  border: 1px solid var(--border);\n  font-family: \"Segoe UI\", \"PingFang SC\", \"Inter\", -apple-system, sans-serif;\n  animation: fadeIn 0.6s ease;\n  position: relative;\n}\n@keyframes fadeIn {\n  from { opacity: 0; transform: translateY(15px); }\n  to { opacity: 1; transform: translateY(0); }\n}\n\n\/* ======== \u6807\u9898\u4e0e\u8bc4\u5206 ======== *\/\n.review-header {\n  text-align: center;\n  padding: 2.2em 1.8em 1.8em;\n  background: linear-gradient(165deg, var(--bg) 40%, rgba(74, 108, 247, 0.03));\n  position: relative;\n  overflow: hidden;\n}\n.review-header::before {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  height: 4px;\n  background: linear-gradient(90deg, var(--accent), #8a68ee);\n}\n.review-title {\n  font-size: 1.9em;\n  font-weight: 800;\n  margin-bottom: 0.6em;\n  letter-spacing: -0.02em;\n  background: linear-gradient(135deg, var(--text), var(--accent));\n  -webkit-background-clip: text;\n  -webkit-text-fill-color: transparent;\n  background-clip: text;\n}\n.review-stars {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  gap: 0.6em;\n  margin-top: 0.8em;\n}\n.review-stars .number {\n  font-size: 1.6em;\n  font-weight: 700;\n  color: var(--star-color);\n  text-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n.star {\n  display: inline-block;\n  width: 28px;\n  height: 28px;\n  background: var(--star-color);\n  -webkit-mask: url(\"https:\/\/cdn.jsdelivr.net\/gh\/twitter\/twemoji@14.0.2\/assets\/svg\/2b50.svg\") no-repeat center \/ contain;\n  mask: url(\"https:\/\/cdn.jsdelivr.net\/gh\/twitter\/twemoji@14.0.2\/assets\/svg\/2b50.svg\") no-repeat center \/ contain;\n  transition: transform 0.2s ease;\n}\n.star:hover {\n  transform: scale(1.2);\n}\n.star.empty { background: var(--star-empty); }\n.star.partial {\n  background: linear-gradient(90deg, var(--star-color) 0%, var(--star-color) var(--percent, 0%), var(--star-empty) var(--percent, 0%));\n}\n\n\/* ======== \u4f18\u7f3a\u70b9\u533a\u57df ======== *\/\n.review-pros-cons {\n  display: flex;\n  flex-wrap: wrap;\n  border-top: 1px solid var(--border);\n  position: relative;\n}\n.pros, .cons {\n  flex: 1 1 50%;\n  padding: 1.8em 2em;\n  box-sizing: border-box;\n  white-space: pre-line;\n  min-height: 200px;\n  position: relative;\n  transition: all 0.3s ease;\n}\n.pros:hover, .cons:hover {\n  transform: translateY(-2px);\n}\n.pros {\n  background: var(--pros-bg);\n  color: var(--pros-text);\n  border-right: 1px solid var(--bg);\n}\n.cons {\n  background: var(--cons-bg);\n  color: var(--cons-text);\n}\n.section-title {\n  font-weight: 700;\n  font-size: 1.15em;\n  margin-bottom: 1em;\n  display: flex;\n  align-items: center;\n  gap: 0.5em;\n}\n\/* \u53bb\u6389\u6807\u9898\u524d\u9762\u7684\u5706\u70b9 *\/\n.section-title::before {\n  display: none;\n}\n.pros li, .cons li {\n  list-style: none;\n  margin: 0.8em 0;\n  padding-left: 1.6em;\n  position: relative;\n  line-height: 1.6em;\n  transition: transform 0.2s ease;\n}\n.pros li:hover, .cons li:hover {\n  transform: translateX(4px);\n}\n.pros li::before {\n  content: \"\u2713\";\n  position: absolute;\n  left: 0;\n  color: var(--pros-text);\n  font-weight: bold;\n  font-size: 1.1em;\n}\n.cons li::before {\n  content: \"\u2715\";\n  position: absolute;\n  left: 0;\n  color: var(--cons-text);\n  font-weight: bold;\n  font-size: 1.1em;\n}\n\n\/* \u54cd\u5e94\u5f0f\u4f18\u5316 *\/\n@media (max-width: 640px) {\n  .review-card {\n    margin: 1.5em;\n    border-radius: 12px;\n  }\n  .review-header {\n    padding: 1.8em 1.2em 1.4em;\n  }\n  .review-title {\n    font-size: 1.6em;\n  }\n  .pros, .cons {\n    flex: 1 1 100%;\n    padding: 1.4em 1.6em;\n    min-height: auto;\n  }\n  .pros {\n    border-right: none;\n    border-bottom: 1px solid var(--bg);\n  }\n}\n<\/style>\n\n<div class=\"review-card\" id=\"reviewCard-2\">\n  <div class=\"review-header\">\n    <div class=\"review-title\" id=\"reviewTitle-2\">\u4ea7\u54c1\u6807\u9898<\/div>\n    <div class=\"review-stars\">\n      <span class=\"number\" id=\"reviewScore-2\">0.0<\/span>\n      <span id=\"starContainer-2\"><\/span>\n    <\/div>\n  <\/div>\n  <div class=\"review-pros-cons\">\n    <div class=\"pros\">\n      <div class=\"section-title\">\u4f18\u70b9<\/div>\n      <ul id=\"prosList-2\"><li>\u52a0\u8f7d\u4e2d...<\/li><\/ul>\n    <\/div>\n    <div class=\"cons\">\n      <div class=\"section-title\">\u7f3a\u70b9<\/div>\n      <ul id=\"consList-2\"><li>\u52a0\u8f7d\u4e2d...<\/li><\/ul>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(() => {\n  \/* ======= \u914d\u7f6e\u533a ======= *\/\n  const config = {\n    id: 2, \/\/ \u8fd9\u91cc\u6539\u56de1\uff0c\u4e0eHTML\u4e2d\u7684ID\u5339\u914d\n    title: \"NetAssist\",\n    score: 3.9,\n    pros: [\n      \"\u652f\u6301rDNS\u3001ip6.arpa\u53cd\u89e3\u57df\u540d\u548cPTR\uff0c\u4e14\u76f4\u63a5\u5c55\u793a\u53cd\u89e3\u57df\u540d\",\n      \"\u652f\u6301\u52a8\u6001IP\uff0c\u53ef\u901a\u8fc7API\u6539\u53d8IP\",\n      \"\u76f4\u63a5\u81ea\u5e26\u5206\u914d\/64\u548c\/48\"\n    ],\n    cons: [\n      \"1\u53f7\u4ec51\u96a7\u9053\uff0c\u4e0d\u53ef\u5237IP\",\n      \"IP\u5c5e\u5730\u9501\u6b7b\u4e4c\u514b\u5170\uff0cEndpoint\u4ec51\u4e2a\",\n      \"\u754c\u9762\u7b80\u964b\"\n    ]\n  };\n\n  \/* ======= \u5e94\u7528\u903b\u8f91 ======= *\/\n  const id = config.id;\n  const titleEl = document.getElementById(`reviewTitle-${id}`);\n  const scoreEl = document.getElementById(`reviewScore-${id}`);\n  const starsEl = document.getElementById(`starContainer-${id}`);\n  const prosEl = document.getElementById(`prosList-${id}`);\n  const consEl = document.getElementById(`consList-${id}`);\n\n  if (!titleEl) return;\n  titleEl.textContent = config.title;\n  scoreEl.textContent = config.score.toFixed(1);\n\n  \/\/ \u661f\u7ea7\u6e32\u67d3\n  starsEl.innerHTML = \"\";\n  const fullStars = Math.floor(config.score);\n  const remainder = config.score - fullStars;\n  for (let i = 0; i < 5; i++) {\n    const s = document.createElement(\"span\");\n    s.classList.add(\"star\");\n    if (i < fullStars) {\n      \/\/ \u6ee1\u661f\n    } else if (i === fullStars && remainder > 0) {\n      s.classList.add(\"partial\");\n      s.style.setProperty(\"--percent\", (remainder * 100) + \"%\");\n    } else s.classList.add(\"empty\");\n    starsEl.appendChild(s);\n  }\n\n  \/\/ \u4f18\u7f3a\u70b9\u6e32\u67d3\n  prosEl.innerHTML = \"\";\n  consEl.innerHTML = \"\";\n  config.pros.forEach(t => {\n    const li = document.createElement(\"li\");\n    li.textContent = t;\n    prosEl.appendChild(li);\n  });\n  config.cons.forEach(t => {\n    const li = document.createElement(\"li\");\n    li.textContent = t;\n    consEl.appendChild(li);\n  });\n})();\n<\/script>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e09\u3001Route64<\/h2>\n\n\n\n<style>\n\/* ======== \u901a\u7528\u6837\u5f0f\uff08\u652f\u6301\u6df1\u6d45\u6a21\u5f0f\uff09 ======== *\/\n.review-card {\n  --bg: #ffffff;\n  --text: #222;\n  --border: #e5e5e5;\n  --shadow: rgba(0, 0, 0, 0.08);\n  --pros-bg: #ebfbee;\n  --cons-bg: #fff0f0;\n  --pros-text: #146c2e;\n  --cons-text: #a60000;\n  --star-color: #ffb400;\n  --star-empty: #d0d0d0;\n  --accent: #4a6cf7;\n  --radius: 16px;\n  transition: all 0.3s ease;\n}\n@media (prefers-color-scheme: dark) {\n  .review-card {\n    --bg: #1e1e1e;\n    --text: #eee;\n    --border: #333;\n    --shadow: rgba(0, 0, 0, 0.6);\n    --pros-bg: #14321a;\n    --cons-bg: #3a1111;\n    --pros-text: #7cf98c;\n    --cons-text: #ff9a9a;\n    --star-empty: #444;\n    --accent: #6b8aff;\n  }\n}\n\n\/* ======== \u5361\u7247\u5e03\u5c40 ======== *\/\n.review-card {\n  max-width: 720px;\n  margin: 2.5em auto;\n  background: var(--bg);\n  color: var(--text);\n  border-radius: var(--radius);\n  box-shadow: 0 12px 40px var(--shadow);\n  overflow: hidden;\n  border: 1px solid var(--border);\n  font-family: \"Segoe UI\", \"PingFang SC\", \"Inter\", -apple-system, sans-serif;\n  animation: fadeIn 0.6s ease;\n  position: relative;\n}\n@keyframes fadeIn {\n  from { opacity: 0; transform: translateY(15px); }\n  to { opacity: 1; transform: translateY(0); }\n}\n\n\/* ======== \u6807\u9898\u4e0e\u8bc4\u5206 ======== *\/\n.review-header {\n  text-align: center;\n  padding: 2.2em 1.8em 1.8em;\n  background: linear-gradient(165deg, var(--bg) 40%, rgba(74, 108, 247, 0.03));\n  position: relative;\n  overflow: hidden;\n}\n.review-header::before {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  height: 4px;\n  background: linear-gradient(90deg, var(--accent), #8a68ee);\n}\n.review-title {\n  font-size: 1.9em;\n  font-weight: 800;\n  margin-bottom: 0.6em;\n  letter-spacing: -0.02em;\n  background: linear-gradient(135deg, var(--text), var(--accent));\n  -webkit-background-clip: text;\n  -webkit-text-fill-color: transparent;\n  background-clip: text;\n}\n.review-stars {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  gap: 0.6em;\n  margin-top: 0.8em;\n}\n.review-stars .number {\n  font-size: 1.6em;\n  font-weight: 700;\n  color: var(--star-color);\n  text-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n.star {\n  display: inline-block;\n  width: 28px;\n  height: 28px;\n  background: var(--star-color);\n  -webkit-mask: url(\"https:\/\/cdn.jsdelivr.net\/gh\/twitter\/twemoji@14.0.2\/assets\/svg\/2b50.svg\") no-repeat center \/ contain;\n  mask: url(\"https:\/\/cdn.jsdelivr.net\/gh\/twitter\/twemoji@14.0.2\/assets\/svg\/2b50.svg\") no-repeat center \/ contain;\n  transition: transform 0.2s ease;\n}\n.star:hover {\n  transform: scale(1.2);\n}\n.star.empty { background: var(--star-empty); }\n.star.partial {\n  background: linear-gradient(90deg, var(--star-color) 0%, var(--star-color) var(--percent, 0%), var(--star-empty) var(--percent, 0%));\n}\n\n\/* ======== \u4f18\u7f3a\u70b9\u533a\u57df ======== *\/\n.review-pros-cons {\n  display: flex;\n  flex-wrap: wrap;\n  border-top: 1px solid var(--border);\n  position: relative;\n}\n.pros, .cons {\n  flex: 1 1 50%;\n  padding: 1.8em 2em;\n  box-sizing: border-box;\n  white-space: pre-line;\n  min-height: 200px;\n  position: relative;\n  transition: all 0.3s ease;\n}\n.pros:hover, .cons:hover {\n  transform: translateY(-2px);\n}\n.pros {\n  background: var(--pros-bg);\n  color: var(--pros-text);\n  border-right: 1px solid var(--bg);\n}\n.cons {\n  background: var(--cons-bg);\n  color: var(--cons-text);\n}\n.section-title {\n  font-weight: 700;\n  font-size: 1.15em;\n  margin-bottom: 1em;\n  display: flex;\n  align-items: center;\n  gap: 0.5em;\n}\n\/* \u53bb\u6389\u6807\u9898\u524d\u9762\u7684\u5706\u70b9 *\/\n.section-title::before {\n  display: none;\n}\n.pros li, .cons li {\n  list-style: none;\n  margin: 0.8em 0;\n  padding-left: 1.6em;\n  position: relative;\n  line-height: 1.6em;\n  transition: transform 0.2s ease;\n}\n.pros li:hover, .cons li:hover {\n  transform: translateX(4px);\n}\n.pros li::before {\n  content: \"\u2713\";\n  position: absolute;\n  left: 0;\n  color: var(--pros-text);\n  font-weight: bold;\n  font-size: 1.1em;\n}\n.cons li::before {\n  content: \"\u2715\";\n  position: absolute;\n  left: 0;\n  color: var(--cons-text);\n  font-weight: bold;\n  font-size: 1.1em;\n}\n\n\/* \u54cd\u5e94\u5f0f\u4f18\u5316 *\/\n@media (max-width: 640px) {\n  .review-card {\n    margin: 1.5em;\n    border-radius: 12px;\n  }\n  .review-header {\n    padding: 1.8em 1.2em 1.4em;\n  }\n  .review-title {\n    font-size: 1.6em;\n  }\n  .pros, .cons {\n    flex: 1 1 100%;\n    padding: 1.4em 1.6em;\n    min-height: auto;\n  }\n  .pros {\n    border-right: none;\n    border-bottom: 1px solid var(--bg);\n  }\n}\n<\/style>\n\n<div class=\"review-card\" id=\"reviewCard-3\">\n  <div class=\"review-header\">\n    <div class=\"review-title\" id=\"reviewTitle-3\">\u4ea7\u54c1\u6807\u9898<\/div>\n    <div class=\"review-stars\">\n      <span class=\"number\" id=\"reviewScore-3\">0.0<\/span>\n      <span id=\"starContainer-3\"><\/span>\n    <\/div>\n  <\/div>\n  <div class=\"review-pros-cons\">\n    <div class=\"pros\">\n      <div class=\"section-title\">\u4f18\u70b9<\/div>\n      <ul id=\"prosList-3\"><li>\u52a0\u8f7d\u4e2d...<\/li><\/ul>\n    <\/div>\n    <div class=\"cons\">\n      <div class=\"section-title\">\u7f3a\u70b9<\/div>\n      <ul id=\"consList-3\"><li>\u52a0\u8f7d\u4e2d...<\/li><\/ul>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(() => {\n  \/* ======= \u914d\u7f6e\u533a ======= *\/\n  const config = {\n    id: 3,\n    title: \"Route64\",\n    score: 4.2,\n    pros: [\n      \"\u6709\u591a\u4e2aEndpoint\u53ef\u9009\",\n      \"\u652f\u6301\u591a\u79cd\u534f\u8bae\",\n      \"\u6613\u6ce8\u518c\uff0c\u9762\u677f\u6613\u7528\"\n    ],\n    cons: [\n      \"1\u53f7\u4ec51\u96a7\u9053\",\n      \"IP\u5c5e\u5730\u4e0d\u53ef\u66f4\u6539\",\n      \"\u9700\u8981\u66f4\u591a\u96a7\u9053\u914d\u989d\u9700\u8981\u6350\u8d60\"\n    ]\n  };\n\n  \/* ======= \u5e94\u7528\u903b\u8f91 ======= *\/\n  const id = config.id;\n  const titleEl = document.getElementById(`reviewTitle-${id}`);\n  const scoreEl = document.getElementById(`reviewScore-${id}`);\n  const starsEl = document.getElementById(`starContainer-${id}`);\n  const prosEl = document.getElementById(`prosList-${id}`);\n  const consEl = document.getElementById(`consList-${id}`);\n\n  if (!titleEl) return;\n  titleEl.textContent = config.title;\n  scoreEl.textContent = config.score.toFixed(1);\n\n  \/\/ \u661f\u7ea7\u6e32\u67d3\n  starsEl.innerHTML = \"\";\n  const fullStars = Math.floor(config.score);\n  const remainder = config.score - fullStars;\n  for (let i = 0; i < 5; i++) {\n    const s = document.createElement(\"span\");\n    s.classList.add(\"star\");\n    if (i < fullStars) {\n      \/\/ \u6ee1\u661f\n    } else if (i === fullStars && remainder > 0) {\n      s.classList.add(\"partial\");\n      s.style.setProperty(\"--percent\", (remainder * 100) + \"%\");\n    } else s.classList.add(\"empty\");\n    starsEl.appendChild(s);\n  }\n\n  \/\/ \u4f18\u7f3a\u70b9\u6e32\u67d3\n  prosEl.innerHTML = \"\";\n  consEl.innerHTML = \"\";\n  config.pros.forEach(t => {\n    const li = document.createElement(\"li\");\n    li.textContent = t;\n    prosEl.appendChild(li);\n  });\n  config.cons.forEach(t => {\n    const li = document.createElement(\"li\");\n    li.textContent = t;\n    consEl.appendChild(li);\n  });\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>\u524d\u8a00 HE(Hurricane Electric)\u7684Tunnelbroker.net\u6bd4\u8f83\u8457\u540d\uff0c\u672c\u7ad9\u4e5f\u5199\u8fc7\u6ce8\u518c+\u6539IP\u5730\u533a\u7684\u6559\u7a0b\uff0c\u4f46\u662fTunnelbroker.net\u4e5f\u6709\u4e0d\u8db3\u7684\u4e00\u4e9b\u5730\u65b9\uff0c\u6240\u4ee5\u6211\u53bb\u7f51\u4e0a\u5bfb\u627e\u4e86\u4e00\u4e9b\u5176\u4ed6\u7684\u514d\u8d39\u7684Tunnelbroker\u670d\u52a1\uff0c\u4f9b\u53c2\u8003\u3002 \u4e00\u3001Tunnelbroker.net \u4ea7\u54c1\u6807\u9898 0.0 \u4f18\u70b9 \u52a0\u8f7d\u4e2d... \u7f3a\u70b9 \u52a0\u8f7d\u4e2d... \u4e8c\u3001NetAssist \u4ea7\u54c1\u6807\u9898 0.0 \u4f18\u70b9 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[3,2,4,5],"class_list":["post-55","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-hurricane-electric","tag-tunnelbroker","tag-tunnelbroker-net","tag-5"],"_links":{"self":[{"href":"https:\/\/r33.it\/index.php?rest_route=\/wp\/v2\/posts\/55","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/r33.it\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/r33.it\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/r33.it\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/r33.it\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=55"}],"version-history":[{"count":0,"href":"https:\/\/r33.it\/index.php?rest_route=\/wp\/v2\/posts\/55\/revisions"}],"wp:attachment":[{"href":"https:\/\/r33.it\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=55"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/r33.it\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=55"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/r33.it\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=55"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}