thảo luận Hướng dẫn dùng Cloudflare Zero Trust

  • Người tạo chủ đề Người tạo chủ đề Fioren
  • Ngày bắt đầu Ngày bắt đầu
Bác thiếu bước Linked IP ấy. Trước em cũng bị y hệt, gán CF vào router rồi, bắt wifi, check ở đth ra CF rồi nhưng vẫn ko chặn được qc in-apps, dùng dot trong đth thì lại chặn ngon
giờ bác vào CF -> Zero Trust -> Gateway -> DNS Locations -> ấn vào cái ... ở dòng profile -> Configure -> kéo xuống một tí xong ấn cái này là Done
Xem tệp đính kèm 2090032
bác có thể sử dụng Cloudflare Worker để nó tự update được mà


HKL0c8T.png
 
Sửa lần cuối:
Hướng dẫn sử dụng Cloudflare Worker để cập nhật IP match với Cloudflare qua DDNS:
Tại sao nên dùng: Bạn có thể set dns dạng 172.64.36.1, 172.64.36.2 thẳng vào router và sử dụng cho tất cả các thiết bị mạng có trong nhà mà không cần phải dùng DoH, DoT. Tốc độ truy vấn rất nhanh
  • Yêu cầu có ddns trỏ về IP nhà.
  • Cloudflare API, Cloudflare Email, Cloudflare ID (có hướng dẫn lấy tại #1)
(1) Tạo Worker và chỉnh sửa code theo code dưới đây:
OqargG6.png

Tiếp theo
D1c93dC.png

Tiếp theo
MtT1t73.png
Tiếp theo, nhập Name cho Worker
Tx5e8on.png

Kéo xuống cuối trang nhấn Deploy
EowsqQ5.png

Tiếp theo, nhấn Edit code
0aUoPq9.png

Tiếp theo, xoá tất cả các code, sửa code theo dưới đây:
IpczZnM.png

Điền các thông tin sau:
TZVbNKN.png

- Chỉnh sửa các thông tin: accountEmail, accountId (Cloudflare ID), apiToken, domain (DDNS của bạn).
Mã:
addEventListener('scheduled', (event) => {
  event.waitUntil(handleRequest());
});

addEventListener('fetch', (event) => {
  return event.respondWith(handleRequest(event.request));
});

async function handleRequest(request) {
  const accountEmail = '';
  const accountId= '';
  const apiToken = '';
  const domain = '';
  const ip = await resolveDomain(domain);

  if (ip) {
    console.log(`The IP address of ${domain} is: ${ip}`);
    const locationId = await getLocationId(accountId, apiToken, accountEmail);
    if (locationId) {
      console.log(`The location ID is: ${locationId}`);
      const updateResult = await updateLocation(accountId, apiToken, locationId, ip, accountEmail);
      if (updateResult) {
        console.log("Update location successful:");
        console.log(`Location ID: ${updateResult.id}`);
        console.log(`Name: ${updateResult.name}`);
        console.log(`IP: ${updateResult.networks[0].network}`);
        console.log(`Subnet: ${updateResult.networks[0].network.split('/')[1]}`);
        console.log(`Created At: ${updateResult.created_at}`);
        console.log(`Updated At: ${updateResult.updated_at}`);
      } else {
        console.log("No location data found.");
      }
    } else {
      console.log("No locations found.");
    }
  } else {
    console.log(`Failed to resolve the IP address of ${domain}`);
  }

  return new Response('Worker execution completed', { status: 200 });
}

async function resolveDomain(domain) {
  const apiURL = 'https://dns.google.com/resolve';
  const queryURL = new URL(apiURL);
  queryURL.searchParams.append('name', domain);
  queryURL.searchParams.append('type', 'A');

  const response = await fetch(queryURL);
  const data = await response.json();

  if (data.Answer instanceof Array && data.Answer.length > 0) {
    const ipAddresses = data.Answer
      .filter(answer => answer.type === 1)
      .map(answer => answer.data);
    return ipAddresses[0] || null;
  } else {
    return null;
  }
}

async function getLocationId(accountId, apiToken, accountEmail) {

  const url = `https://api.cloudflare.com/client/v4/accounts/${accountId}/gateway/locations`;

  const response = await fetch(url, {
    headers: {
      'Authorization': `Bearer ${apiToken}`,
      'Content-Type': 'application/json',
      'X-Auth-Email': accountEmail,
      'X-Auth-Key': apiToken
    }
  });

  if (response.ok) {
    const data = await response.json();
    const result = data.result;
    return result.length > 0 ? result[0].id : null;
  } else {
    return null;
  }
}

async function updateLocation(accountId, apiToken, locationId, ip, accountEmail) {
  const url = `https://api.cloudflare.com/client/v4/accounts/${accountId}/gateway/locations/${locationId}`;

  const response = await fetch(url, {
    method: 'PUT',
    headers: {
      'Authorization': `Bearer ${apiToken}`,
      'Content-Type': 'application/json',
      'X-Auth-Email': accountEmail,
      'X-Auth-Key': apiToken
    },
    body: JSON.stringify({
      client_default: true,
      ecs_support: true,
      name: 'RouterZTE',
      networks: [
        { network: `${ip}/32` }
      ]
    })
  });

  if (response.ok) {
    const data = await response.json();
    return data.result || null;
  } else {
    return null;
  }
}
=> Save and deploy.
(2) Tạo Cron trigger để tự động chạy script cập nhật IP qua DDNS mỗi 1 phút (rất nhanh).
uxUmAud.png



(3) Chỉnh sửa giá trị Minutes là 1 (Chạy worker mỗi phút), sau đó nhấn Add Trigger
QAPmDJl.png


(4) Kết quả như thế này là hoàn tất:
oZXiESp.png


4. Cập nhật DNS cho thiết bị của bạn:
IPV4:

172.64.36.1
172.64.36.2
---
Máy tính:
rX0BoIt.png


Các thiết bị khác tương tự
Tốt nhất là đặt lên Router tổng để áp dụng cho tất cả các thiết bị trong nhà.
5. Kết thúc

Chúc các bạn cấu hình thành công. Sử dụng DNS dạng này cảm giác lướt web rất nhanh, không bị lỗi DoH (Mikrotik DoH không ổn định).
Kiểm tra xem đã chặn quảng cáo chưa:
Link 1:
https://d3ward.github.io/toolz/adblock.html
Link 2: https://iblockads.net/test
Nhớ flush dns trước khi test nhé.
CMD: ipconfig /flushdns
*đã cập nhật ảnh lỗi
cho hỏi ngu tí nha thím, cái worker đó muốn edit thì bấm vào đâu nhỉ? ví dụ như mình muốn sửa lại ddns í
 
Lâu ko coi thread, ae cho hỏi:
Tôi cài theo #1 từ ngày đầu. Sau vào thấy lỗi nên đổi qua nextdns (iphone t cài sẵn 2 profile, switch qua lại).
Nay lại dùng profile Cloud flare này thì vẫn thấy chạy quảng cáo bth, mà thấy 1 số page nói phải fork lại cái khác mới đc à?
 
Lâu ko coi thread, ae cho hỏi:
Tôi cài theo #1 từ ngày đầu. Sau vào thấy lỗi nên đổi qua nextdns (iphone t cài sẵn 2 profile, switch qua lại).
Nay lại dùng profile Cloud flare này thì vẫn thấy chạy quảng cáo bth, mà thấy 1 số page nói phải fork lại cái khác mới đc à?
cái fork ở #1 sau khi sync thì nó bị lỗi cấm từa lưa hột dưa chứ ko phải ko cấm, t đổi qua cái fork này
thì chạy lại bình thường, giờ vẫn sử dụng bình thường
 
Lâu ko coi thread, ae cho hỏi:
Tôi cài theo #1 từ ngày đầu. Sau vào thấy lỗi nên đổi qua nextdns (iphone t cài sẵn 2 profile, switch qua lại).
Nay lại dùng profile Cloud flare này thì vẫn thấy chạy quảng cáo bth, mà thấy 1 số page nói phải fork lại cái khác mới đc à?
đọc lại #1 nhé xem lại có hướng dẫn mới
 
Ngoài list nhập vào thì nhớ tận dụng tính năng sờ cu ri ti sẵn có :big_smile:

1695761124488.png


Tổ chức rõ ràng để dễ quản lý :big_smile:

1695761290070.png
 
1695762751076.png


Chạy được rồi nhưng tốc độ phân giải cao quá khắc phục sao mấy bác.
 
Sửa lần cuối:
Tốc độ phân giải trên là do gắn vào con mik, còn đây khi add doh thẳng vào edge.
1695768932659.png

Có cách nào add vào mik mà tốc độ phân giải đc như này kg mấy bác.
 
Sửa lần cuối:

Thống kê chủ đề

Ngày tạo
Fioren,
Người trả lời cuối
tuananhhd88,
Trả lời
4.335
Lượt xem
418.040
Quay lại
Lên đầu trang