Router Mikrotik là dòng sản phẩm router mạnh mẽ, đa năng được phát triển bởi Mikrotik, một công ty công nghệ nổi tiếng của Latvia. Các router của Mikrotik chạy trên hệ điều hành độc quyền RouterOS, dựa trên nền tảng Linux, nổi bật nhờ khả năng tùy biến cao, tính năng mạnh mẽ và ổn định trong việc quản lý mạng.
Residential Proxy là loại Proxy sử dụng địa chỉ IP được cấp bởi nhà cung cấp dịch vụ Internet (ISP) của người dùng thực tế. Các Proxy này giúp che giấu địa chỉ IP gốc của bạn, giúp bạn truy cập các trang web với danh tính thật từ nhiều vị trí địa lý khác nhau. Residential Proxy được ứng dụng phổ biến trong thu thập dữ liệu (web scraping), SEO, kiểm thử quảng cáo và nhiều lĩnh vực cần đảm bảo tính xác thực và tránh bị chặn do phát hiện địa chỉ IP ảo hoặc trung tâm dữ liệu (Datacenter IP).
Bài viết hôm nay, POWERNET sẽ hướng dẫn bạn cấu hình 250 Proxy Dân cư trên Mikrotik
Bước 1: Chuẩn bị tài nguyên
- Bạn cần trang bị 1 PC/Workstation/MiniPC có tối thiểu 2 cổng mạng, nhiều hơn càng tốt. Trong đó:
- 1 cổng mạng sẽ làm Management (MGMT) bạn dùng để kết nối vào thiết bị khi thiết bị gặp lỗi không thể truy cập qua giao diện Winbox.
- 1 cổng mạng để kết nối vào Modem nhà mạng cung cấp. Nếu bạn không dùng các gói đa phiên của nhà mạng mà chỉ muốn Cheat PPPoE thì chỉ cần 1 cổng là được.
- Nếu bạn sử dụng các gói đa phiên của nhà mạng để tạo Proxy thì tùy thuôc số lượng Proxy bạn muốn tạo mà bạn gắn thêm cổng mạng cho phù hợp
- Gói đa phiên của nhà mạng thường sẽ quay được 35 phiên PPPoE, nếu bạn muốn dùng gói đa phiên của nhà mạng để tạo đủ 250 Proxy thì sẽ cần 8 Port mạng (1 Port mạng cho MGMT và 7 Port đấu nối lên modem nhà mạng)
- Nếu bạn muốn giảm chi phí thì có thể kết hợp 1 phần Cheat PPPoE với cả sử dụng gói đa phiên, tùy vào số lượng Line PPPoE bạn muốn Cheat thì bạn sẽ ra được số Port mạng cần thiết.
- Nếu bạn dùng MiniPC thì MiniPC này cần phải được cài đặt sẵn Mikrotik
- Nếu bạn dùng PC/Workstation thì PC/Workstation đã được cài đặt ESXi 7/8 hoặc đã được cài sẵn Mikrotik (Nếu bạn không muốn tạo máy ảo Mikrotik để làm Proxy)
- Gói Internet FTTH (Nếu bạn muốn Cheat Line PPPoE) hoặc gói đa phiên từ nhà mạng (Nếu bạn muốn ổn định, không bị khóa line bất thình lình)
- Modem nhà mạng phải chuyển sang chế độ Bridge.
- Thiết bị MiniPC hoặc PC/Workstation đã đấu dây mạng vào modem của nhà mạng.
Bước 2: Chuẩn bị trước khi cấu hình Mikrotik
Bước 2.1: Bạn cần kiểm tra xem dịch vụ Container đã được Enable hay chưa. Để kiểm tra xem dịch vụ Container đã được Enable hay chưa bạn sử dụng lệnh sau. Mở Terminal và gõ lệnh
1 | /system/device-mode/print |
Nếu kết quả giá trị container: yes thì là đã được bật lên. Nếu giá trị container: no nghĩa là chưa được bật. Bạn dùng lệnh sau để Enable dịch vụ Container trên Mikrotik
1 | /system/device-mode/update container=yes |
Sau khi chạy lệnh xong, nếu thiết bị Mikrotik của các bạn là thiết bị vật lý thì bạn thực hiện rút dây nguồn thiết bị sau đó cắm lại. Nếu bạn dùng máy ảo làm Mikrotik thì bạn thực hiện Shutdown máy ảo xong bật lại
Sau khi thực hiện xong, bạn chạy kiểm tra lại xem giá trị container đã chuyển sang yes hay chưa, nếu chuyển sang yes thì là ok
Bước 2.2: Cấu hình DNS
Bạn vào mục IP > DNS và set DNS 8.8.8.8/1.1.1.1 > Apply > OK. Mục đích là để phân giải DNS khi thực hiện tải các Container cho Proxy
Bước 2.3: Tạo trước 1 Interface PPPoE
Bạn nhấn vào mục PPP > Interface > PPPoE Client > Apply > OK
Lưu ý, tại dòng Interface, bạn chọn đúng cổng ether đang đấu vào Modem nhà mạng, nếu cổng ether2 đang đấu vào modem nhà mạng thì phải chọn ether2
Interface PPPoE này bạn vẫn khai báo User/Password đầy đủ, quay ra được IP như bình thường. Mục đích Mikrotik có thể kết nối Internet để tải Container về.
Bước 2.4: Tạo thư mục sata1, các Container khi tải về sẽ lưu ở đây
Bạn nhấn vào mục File > File > Nhấn vào dấu “+” chọn Directory > tại mục File Name bạn gõ sata1 > Apply > OK
Bước 2.5: Tắt bớt các dịch vụ không cần thiết
Bạn vào mục IP > Service và tắt các dịch vụ không cần thiết, bạn có thể tắt hết và để lại mỗi dịch vụ Winbox là được
Bước 3: Cấu hình Proxy trên Mikrotik
Bạn nhấn vào mục System > Scripts > Scripts > nhấn vào dấu “+” để tạo 1 Script mới > Bạn nhớ tích vào mục Don’t Require Permissions và Paste các đoạn mã sau vào.
Lưu ý, Paste lần lượt từng đoạn, chạy xong đoạn nào thì thực hiện xóa rồi mới paste đoạn mới vào. Sau khi Paste đoạn mã vào khung Scripts thì nhấn Apply > Run Script để hệ thống tiến hành chạy đoạn mã vừa Paste
Với mỗi lần Run Script thì tại mục Run Count sẽ cộng thêm 1 giá trị. Vi dụ bạn nhấn Run Script 5 lần thì Run Count sẽ hiển thị 5
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | :local prxcount 250; #số proxy muốn tạo :local orgpppoe pppoe-out1; #PPPoE goc de tao proxy :local prxnat yes; #dung proxy tu ngoai internet :local randompass true; :local staticuser prxacc; :local staticpass prxpass; :local exdir sata1/Container; #Proxy data folder :local Socks5List; :local HttpList; :local wanether [/interface/pppoe-client/get pppoe-out1 value-name=interface]; /interface/bridge/add name=("BrProxy-".$orgpppoe); #tạo bridge cho proxy /interface/list/add name=("list-".$orgpppoe."-prx"); #tạo list cho pppoe /ip/fire/nat/add chain=srcnat out-interface-list=("list-".$orgpppoe."-prx") action=masquerade; #masquerade ra list pppoe /ip/address/add address=192.168.88.254/24 interface=("BrProxy-".$orgpppoe); #gán IP cho bridge proxy /container/config/set registry-url=https://ghcr.io tmpdir=usb1-part1/pull; /ip/firewall/address-list/add list=Local address=10.0.0.0/8; /ip/firewall/address-list/add list=Local address=192.168.0.0/16; /ip/firewall/address-list/add list=Local address=172.16.0.0/12; /ip/firewall/nat/add chain=srcnat dst-address-list=Local src-address-list=Local action=masquerade; #hairpin nat :for i from=1 to=$prxcount do={ # Them macvlan cho pppoe /interface/macvlan/add name=($wanether."mvl".$i) interface=($wanether) mode=private; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | :local prxcount 250; #số proxy muốn tạo :local orgpppoe pppoe-out1; #PPPoE goc de tao proxy :local prxnat yes; #dung proxy tu ngoai internet :local randompass true; :local staticuser prxacc; :local staticpass prxpass; :local exdir sata1/Container; #Proxy data folder :local Socks5List; :local HttpList; :local wanether [/interface/pppoe-client/get pppoe-out1 value-name=interface]; :for i from=1 to=$prxcount do={ # Them pppoe /interface/pppoe-client/add name=($orgpppoe."-prx".$i) copy-from=$orgpppoe dial-on-demand=yes add-default-route=no interface=($wanether."mvl".$i) disable=yes; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | :local prxcount 250; #số proxy muốn tạo :local orgpppoe pppoe-out1; #PPPoE goc de tao proxy :local prxnat yes; #dung proxy tu ngoai internet :local randompass true; :local staticuser prxacc; :local staticpass prxpass; :local exdir sata1/Container; #Proxy data folder :local Socks5List; :local HttpList; :local wanether [/interface/pppoe-client/get pppoe-out1 value-name=interface]; :for i from=1 to=$prxcount do={ # Them pppoe vao list /interface/list/member/add list=("list-".$orgpppoe."-prx") interface=($orgpppoe."-prx".$i); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | :local prxcount 250; #số proxy muốn tạo :local orgpppoe pppoe-out1; #PPPoE goc de tao proxy :local prxnat yes; #dung proxy tu ngoai internet :local randompass true; :local staticuser prxacc; :local staticpass prxpass; :local exdir sata1/Container; #Proxy data folder :local Socks5List; :local HttpList; :local wanether [/interface/pppoe-client/get pppoe-out1 value-name=interface]; :for i from=1 to=$prxcount do={ # Them VETH cho container proxy /interface/veth/add name=("Proxy-".$orgpppoe.".".$i) address=("192.168.88.".$i."/24") gateway=("192.168.88.254"); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | :local prxcount 250; #số proxy muốn tạo :local orgpppoe pppoe-out1; #PPPoE goc de tao proxy :local prxnat yes; #dung proxy tu ngoai internet :local randompass true; :local staticuser prxacc; :local staticpass prxpass; :local exdir sata1/Container; #Proxy data folder :local Socks5List; :local HttpList; :local wanether [/interface/pppoe-client/get pppoe-out1 value-name=interface]; :for i from=1 to=$prxcount do={ #Them VETH vao bridge /interface/bridge/port/add interface=("Proxy-".$orgpppoe.".".$i) bridge=("BrProxy-".$orgpppoe); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | :local prxcount 250; #số proxy muốn tạo :local orgpppoe pppoe-out1; #PPPoE goc de tao proxy :local prxnat yes; #dung proxy tu ngoai internet :local randompass true; :local staticuser prxacc; :local staticpass prxpass; :local exdir sata1/Container; #Proxy data folder :local Socks5List; :local HttpList; :local wanether [/interface/pppoe-client/get pppoe-out1 value-name=interface]; :for i from=1 to=$prxcount do={ #Them routing table /routing/table/add name=("out-".$orgpppoe."-prx".$i) fib; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | :local prxcount 250; #số proxy muốn tạo :local orgpppoe pppoe-out1; #PPPoE goc de tao proxy :local prxnat yes; #dung proxy tu ngoai internet :local randompass true; :local staticuser prxacc; :local staticpass prxpass; :local exdir sata1/Container; #Proxy data folder :local Socks5List; :local HttpList; :local wanether [/interface/pppoe-client/get pppoe-out1 value-name=interface]; :for i from=1 to=$prxcount do={ #Them route cho cac pppoe /ip/route/add dst-address=0.0.0.0/0 gateway=($orgpppoe."-prx".$i) routing-table=("out-".$orgpppoe."-prx".$i); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | :local prxcount 250; #số proxy muốn tạo :local orgpppoe pppoe-out1; #PPPoE goc de tao proxy :local prxnat yes; #dung proxy tu ngoai internet :local randompass true; :local staticuser prxacc; :local staticpass prxpass; :local exdir sata1/Container; #Proxy data folder :local Socks5List; :local HttpList; :local wanether [/interface/pppoe-client/get pppoe-out1 value-name=interface]; :for i from=1 to=$prxcount do={ #NAT IP :if ($prxnat = yes) do={ /ip/firewall/nat/add chain=dstnat protocol=tcp dst-port=(8000 + $i) dst-address-type=local action=dst-nat to-address=("192.168.88.".$i) to-ports=1080; /ip/firewall/nat/add chain=dstnat protocol=tcp dst-port=(9000 + $i) dst-address-type=local action=dst-nat to-address=("192.168.88.".$i) to-ports=3128; :if (i = $prxcount) do={:put "Finish dstnat\r\n"} } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | :local prxcount 250; #số proxy muốn tạo :local orgpppoe pppoe-out1; #PPPoE goc de tao proxy :local prxnat yes; #dung proxy tu ngoai internet :local randompass true; :local staticuser prxacc; :local staticpass prxpass; :local exdir sata1/Container; #Proxy data folder :local Socks5List; :local HttpList; :local wanether [/interface/pppoe-client/get pppoe-out1 value-name=interface]; :for i from=1 to=$prxcount do={ /ip/firewall/mangle/add chain=prerouting src-address=("192.168.88.".$i) dst-address-list=!Local action=mark-routing new-routing-mark=("out-".$orgpppoe."-prx".$i) passthrough=no; :if (i = $prxcount) do={:put "Finish mangle\r\n"} } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | :local prxcount 250; #số proxy muốn tạo :local orgpppoe pppoe-out1; #PPPoE goc de tao proxy :local prxnat yes; #dung proxy tu ngoai internet :local randompass true; :local staticuser prxacc; :local staticpass prxpass; :local exdir sata1/Container; #Proxy data folder :local Socks5List; :local HttpList; :local wanether [/interface/pppoe-client/get pppoe-out1 value-name=interface]; :for i from=1 to=$prxcount do={ :if (randompass = true) do={ :local prxacc [$genStr1]; } else={} /container/envs/add name=("Prx-".$orgpppoe."-envs".$i) key=PROXY_LOGIN value=$prxacc; /container/add remote-image=ghcr.io/tarampampam/3proxy envlist=("Prx-".$orgpppoe."-envs".$i) root-dir=($exdir."/3proxy/".$orgpppoe.".".$i."-prx-root") interface=("Proxy-".$orgpppoe.".".$i); :local prxpass [$genStr2]; /container/envs/add name=("Prx-".$orgpppoe."-envs".$i) key=PROXY_PASSWORD value=$prxpass; :local prxsock ("192.168.88.254".":".(20000 + $i).":".$prxacc.":".$prxpass."\r\n"); :local prxhttp ("192.168.88.254".":".(10000 + $i).":".$prxacc.":".$prxpass."\r\n"); :put ("Added HTTP proxy ".$prxhttp."Added Socks5 proxy ".$prxsock) :set Socks5List ($Socks5List.$prxsock); :set HttpList ($HttpList.$prxhttp); :delay 15s; } /file/add name=($orgpppoe."HttpList.txt"); /file/add name=($orgpppoe."Socks5List.txt"); :delay 1s; /file/set ($orgpppoe."HttpList.txt") contents=$HttpList; /file/set ($orgpppoe."Socks5List.txt") contents=$Socks5List; # /file/remove RouterOS-Proxy.rsc; |
Bước cuối cùng là thực hiện tải 250 Container về Mikrotik để chạy Proxy, bước này sẽ hơi mất thời gian nên bạn phải đợi đến khi nó tải xong hoàn tất
Bước 4: Cấu hình User/Pass cho Proxy
Sau khi đã tải xong 250 Container cho 250 Port Proxy, bạn tiến hành tạo User/Pass cho 250 Container này. Bạn nhấn vào mục Container, chuyển qua tab Envs, sau đó chọn tất cả và nhấn vào dấu “-“ để xóa Envs hiện tại của 250 Container. Tiếp đó bạn chạy các lệnh sau để tạo User/Pass cho 250 Container
Nếu bạn muốn 250 Proxy sử dụng chung 1 User/Pass thì duy nhất dùng lệnh sau (Chạy trên Terminal hoặc trong mục Scripts)
1 2 | :for i from=1 to=250 do={/container/envs/add name=("Prx-pppoe-out1-envs".$i) key=PROXY_LOGIN value=powernet} :for i from=1 to=250 do={/container/envs/add name=("Prx-pppoe-out1-envs".$i) key=PROXY_PASSWORD value=PowerNet@2025} |
Trong đó powernet chính là User, PowerNet@2025 là Password, bạn có thể thay đổi lại giá trị này tùy theo nhu cầu của bạn
Nếu bạn muốn 250 Proxy sử dụng 250 Password khác nhau. Bạn sử dụng Scripts sau, lưu ý chạy trong mục Scritps
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | :local charset "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" :local passlen 10 :local charsetLen [:len $charset] :for i from=1 to=250 do={ :local randpass "" :local seed [/system clock get time] :local seedLen [:len $seed] :for j from=0 to=($passlen - 1) do={ :local seedChar [:pick $seed ($j % $seedLen)] :local seedNum [:tonum $seedChar] :if ([:typeof $seedNum] != "num") do={ :set seedNum 0 } :local charIndex (($seedNum + $j + $i) % $charsetLen) :set randpass ($randpass . [:pick $charset $charIndex]) } /container/envs/add name=("Prx-pppoe-out1-envs".$i) key=PROXY_PASSWORD value=$randpass } |
Sau khi cập nhật lại User/Password cho Container hoàn tất, bạn chuyển qua Tab Container và chuyển trạng thái các Container từ Stopped sang Running để Container cập nhật cấu hình User/Pass mới
Bước 5: Khai báo tài khoản PPPoE cho các phiên Proxy
Ở Bước 3 đã khai báo 250 phiên PPPoE trong mục PPP, tuy nhiên các phiên PPPoE này chưa được khai báo User/Pass PPPoE phía nhà mạng cung cấp. Giả sử nhà mạng cung cấp cho bạn tài khoản PPPoE với User là d511_gftth_thanhpv106 – Pass là PQHYGM, bạn muốn cấu hình thông tin PPPoE này cho các phiên từ 01 – 34 thì bạn dùng lệnh như sau
1 | :for i from=1 to=34 do={/interface pppoe-client/ set [find name=("pppoe-out1-prx".$i)] user=d511_gftth_thanhpv106 password=PQHYGM} |
Sau khi chạy lệnh cập nhật tài khoản PPPoE xong, bạn vào mục PPP, nhấn vào bất kỳ 1 phiên PPPoE từ 01 – 34, chuyển qua Tab Dial Out để kiểm tra xem đã cập nhật User/Pass PPPoE hay chưa. Cuối cùng bạn thực hiện Enable các phiên PPPoE đã cập nhật User/Pass PPPoE