thảo luận Cộng đồng người dùng MikroTik Router

Chip có vẻ là 8153 vì kiểm tra trong thông tin card nó hiện PID 8153
View attachment 2401709
Cái L2MTU nó bị ẩn luôn bác ạ. Frame type đã admit all. Máy tính kết nối với USB Lan đã nhận IP động. Trừ cái không kết nối được winbox bằng cái usb Lan đó và không kết nối được internet bác à.

Do không vào dc winbox nên là không thể tourch đc.

Chiều PC - Usb lan > cable lan > Pcrouter thì vào mạng, winbox ok.
Nhưng theo chiều PC -> cable Lan -> Usb lan -> pc router thì không kết nối được bất cứ thứ gì trừ việc nhận được IP động do con pc router cấp phát.

Đúng là con 8153 ạ, con MikroTik bảo support từ 7.12 cho x86. Đúng là ở bản 7.11 chưa có file kernel module r8152.ko, và bản hiện tại thì có:

1711313355761.png


Kernel module này từ file mã nguồn drivers/net/usb/r8152.c, đúng là driver cho RTL8153 ạ. Đây mà mã nguồn của file này của nhánh kernel 5.6.x mà RouterOS 7 đang sử dụng.


1711313499893.png


Bác thử vào Tab Status của cái cửa sổ property của ether4 trong bảng Ethernet xem nó có negotiate được đúng tốc độ không ạ. Nếu không bác thử quay ra tab Ethernet tắt Auto Negotiation chọn 1 tốc độ cố định thí dụ "1G baseT full" xem sao ạ?

Phần cấp được IP động, là đúng địa chỉ IP dải DHCP thiết lập trên RouterOS đúng không ạ? Chứ không phải địa chỉ APIPA (Automatic Private IP Addressing) bắt đầu bằng 169.254.x.x?

Với ở trên em bảo bác thử torch là thử lúc nối WinBox vào Router bằng đường bình thường vẫn dùng hằng ngày (được có hoạt động ấy ạ) rồi nối thiết bị khác vào cổng ether4, rồi bật torch trên cổng đó ạ, chứ không phải thử từ WinBox chạy trên máy đang nối vào cổng ether4 :).
 
Last edited:
Chip có vẻ là 8153 vì kiểm tra trong thông tin card nó hiện PID 8153
View attachment 2401709

Hic khi cắm cái adapter USB này vào PC, bác có thể sang tab Details của cửa sổ này, xem toàn bộ phần Hardware Ids, tương tự như thế này được không ạ?

1711314759426.png


Vì hiện cái driver theo RouterOS nó không hỗ trợ chịp RTL8156, là bản 2.5Gbps, còn bản hiện thời của cái mã nguồn r8152.c thì có support, nên em tìm thử xem từ lúc nào nó support cái chip đó, thì tình hình là từ kernel 5.13


Tuy nhiên theo commit này thì cũng từ 5.13 ngoài hỗ trợ thêm RTL8156, driver còn hỗ trợ thêm 2 revision của cái RTL8153 là C và D nữa. Từ 5.13


Có thêm đống version phần cứng này mà 5.6.x chưa hỗ trợ:

1711315159629.png


Bản theo kernel 5.6.x chỉ hỗ trợ RTL8153A và RTL8153B. Chưa kể theo Realtek thì giờ còn có cả bản E. Em không rõ các chú MikroTik có backport driver từ bản mới không, có vẻ hiện thời là chưa vì cái RTL8156 chưa thấy được RouterOS hỗ trợ. Nếu chỉ dùng driver theo 5.6.x và cái adapter của bác nó là revision C/D/E thì có khả năng không chạy được 100%.

Nếu chip bác thuộc revision mới thì có khi hoặc là phải đợi các chú thêm hỗ trợ cho RTL8156, cái này thấy mọi người yêu cầu trên diễn đàn rồi (khi đó sẽ có theo hỗ trợ RTL8153C/D/E), hoặc tự bác tạo support ticket yêu cầu, chắc sẽ phải cắm cái adapter vào router, rồi ấn Make Supout.rif, rồi gửi file đó theo ticket nữa để các chú MikroTik có thông tin về cái adapter.

Theo em hiểu thì các chú sẽ không bắt buộc phải backport từ bản mã nguồn của kernel mới, mà có thể dịch từ mã nguồn Realtek cung cấp trực tiếp ở đây

Realtek USB FE / GBE / 2.5G / 5G Ethernet Family Controller Software - REALTEK (https://www.realtek.com/en/component/zoo/category/network-interface-controllers-10-100-1000m-gigabit-ethernet-usb-3-0-software)

Mã nguồn này (lần cuối update 2023/06/13) hỗ trợ dịch ra kernel module cho kernel cũ đến tận 2.6.31 nên các chú MikroTik về lý thuyết có thể dùng được mà không phải chỉnh sửa gì.
 
Last edited:
Nếu đầu bên kia của cái WireGuard (server bên nước ngoài ạ?) cho bác add thêm peers, thì bác add thêm riêng 1 peer cho con pihole ở trên đó, rồi cấu hình WireGuard trên con đang chạy pihole cho nó đi đường riêng của nó, không dùng chung đường WireGuard của router thôi ạ.

Tức là ở cái server bên ngoài đang chạy WireGuard kia đang có cấu hình 1 peer cho con router của bác với public key của router và AllowedIPs 10.6.0.13/32.

Giờ bác cài WireGuard lên con 192.168.10.10, cho nó tạo public/private key. Thiết lập 1 peer trên chứa endpoint và public key của con WireGuard bên ngoài kia, preshared key (tạo mới riêng 1 cái cho con pihole), AllowedIPs để 0.0.0.0/0,::/0 (giống các thông tin bác đang điền trên router cho cái interface wghp225). Rồi ở cái server bác thêm 1 peer cho con pihole với cái public key và preshared key đã tạo ở trên, AllowedIPs 10.6.0.14/32 chẳng hạn. Như thế là pihole sẽ có đường WireGuard của riêng mình ạ, không chung đường với router. Và tất nhiên bác cũng cần bỏ 192.168.10.10 khỏi cái address list "ip to vpn hp225" vì không muốn mangle cho con 192.168.10.10 chạy qua interface wghp225 nữa.

Khi cấu hình WireGuard trên con 192.168.10.10 và để AllowedIPs 0.0.0.0/0 thì mặc định mọi thứ sẽ đi qua WireGuard, trừ địa chỉ đích 192.168.10.0/24 là đi qua gateway 192.168.10.1 (RouterOS). Tức là lúc này nếu như bác vẫn muốn các dải địa chỉ trong LAN khác như 192.168.5.0/24 nối trực tiếp được vào 192.168.10.10 (nếu đã bật accept trên firewall) thì bác phải thêm route trên con pihole để dải 192.168.x.x/24 đó dùng 192.168.10.1 làm gateway, không đi qua WireGuard (nếu không packet trả lời không tới đích trong LAN mà lại đi qua đường WireGuard). Còn nếu bác vẫn đang cấu hình cho RouterOS là DNS server cho toàn mạng và pihole là upstream server của RouterOS, và pihole chỉ cần nói chuyện với mỗi dải 192.168.10.0/24 trong LAN thì không cần làm việc này.
ý em là hiện tại em định tạo một cái vpn server để bên ngoài kết nối vào trong mạng lan, nhưng đồng thời muốn mấy kết nối vào trong mạng lan qua cái vpn server này đồng thời cũng đi qua cái vpnclient và hiện ip khi ra internet là ip của cái vpn á bác

via theNEXTvoz for iPhone
 
Dùng VRF bác nhá, nhưng mà upgrade con router lên 7.14.1 đã, vì bản này vừa sửa một lỗi liên quan đến VRF và bảng route :)

Bác tạo VRF, gán với cái interface loopback, và thêm chỉnh default route ở bảng ứng với cái VRF cho đi qua interface wireguard:

Code:
/ip vrf
add interfaces=lo name=usewg

/ip route
add disabled=no dst-address=0.0.0.0/0 gateway=wireguard2 \
    routing-table=usewg suppress-hw-offload=no

Lúc này để test bác có thể vào Tools -Traceroute, kiểm tra bằng cách chọn VRF = usewg rồi so sánh với VRF = main xem có đúng lúc chọn usewg thì nó đi qua WireGuard hay không:

View attachment 2398080

View attachment 2398083

Sau đó config cho NTP client sử dụng VRF usewg này:

Code:
/system ntp client
set enabled=yes vrf=usewg
/system ntp client servers
add address=asia.pool.ntp.org

View attachment 2398088

Các chú MikroTik đang dần dần update để nhiều chỗ trong RouterOS chọn được VRF hơn bác ạ. Bác vào MikroTik (https://mikrotik.com/download/changelogs) Expand ra rồi search VRF là thấy.
Thx U bác, sync đc rồi. Traceroute 100% los nhưng NTP client vẫn sync đc.
1711334305390.png
 
Last edited:
ý em là hiện tại em định tạo một cái vpn server để bên ngoài kết nối vào trong mạng lan, nhưng đồng thời muốn mấy kết nối vào trong mạng lan qua cái vpn server này đồng thời cũng đi qua cái vpnclient và hiện ip khi ra internet là ip của cái vpn á bác

via theNEXTvoz for iPhone

Post kia là em đề cập đến việc để cái pihole nó tiếp tục chạy, với yêu cầu là đi qua WireGuard, mà không bị phụ thuộc vào cái kết nối WireGuard trên router ý ạ, là reply của cái phần này :D

em vẫn thích cho nó chạy với unbound hơn á bác. nêu chạy doh thì e thấy chạy adguard home ổn hơn.

Còn cái tạo kết nối để bên ngoài vào được LAN, đồng thời vẫn giữ thiết lập hiện thời là cho 192.168.10.100-192.168.10.150 đi qua WireGuard khi vào internet em nghĩ có thể làm như sau, với giả định cái hp255 là cái VPN server bên ngoài của bác đang sẵn có và chạy sẵn WireGuard.

Trên router MikroTik, bác tạo 1 interface WireGuard hoàn toàn mới, thí dụ tên là wghp225lan. Listen Port khác với cái 51820 của cái wghp225 đã có sẵn.

Code:
/interface wireguard
add listen-port=51822 mtu=1420 name=wghp225lan

Bác cho interface này vào interface list Lan. Như thế sau này từ interface này sẽ truy cập được vào các vlan của bác:

Code:
/interface list member
add interface=wghp225lan list=Lan

Bác gán dải địa chỉ cho interface này:

Code:
/ip address
add address=10.6.1.10/24 interface=wghp225lan network=10.6.1.0

Khi này trong bảng IP - Routes sẽ tự động có entry destination 10.6.1.0/24 đi default gateway wghp225lan, table main.

Đưa dải địa chỉ này vào list "ip from vlan" để packet có destination là dải này không bị mangle rule lái sang wghp225:

Code:
/ip firewall address-list
add address=10.6.1.0/24 list="ip from vlan"

Vẫn trên router MikroTik, vào bảng WireGuard - Peers, tạo thêm 1 Peer mới gắn với interface wghp225lan. Để endpoint-address và port là cái con VPN server của bác (giống hệt tham số bên interface wghp225), preshared-key thì tạo mới hoặc copy cũng được (miễn là sau này bác dùng đúng cái preshared key này trên server). Bác chú ý để Persistent Keepalive là 5s ạ!

Code:
/interface wireguard peers
add allowed-address=10.6.1.0/24 endpoint-address=xxx.xxx.xxx.xxx \
    endpoint-port=51820 interface=wghp225lan preshared-key="xxxxxxxxxxxxxx=" \
    public-key="xxxxxxxxxxxxxxxxxx=" persistent-keepalive=5s

Cấu hình trên router như vậy là xong ạ. Sau đó bác lên con server hp225 của bác để cấu hình peer cho WireGuard.

Phần chỗ dưới [Interface] của cấu hình WireGuard, chỗ Address, bác thêm địa chỉ mới của server ở dải 10.6.1.0/24 vào, thí dụ 10.16.1.1, bên cạnh địa chỉ 10.6.0.1 sẵn có

Code:
[Interface]
Address = 10.6.0.1/24
Address = 10.6.1.1/24

Bác thêm 1 peer thứ 2 cho con router trên đó. Public key là public key lấy từ cái interface wghp225lan ở trên kia, PresharedKey cũng phải khớp.

Code:
[Peer]
PublicKey = xxxx=
PresharedKey = xxxx=
AllowedIPs = 10.6.1.10/32, 192.168.5.0/24, 192.168.10.0/24, 192.168.2.0/24, 192.168.30.0/24, 192.168.40.0/24

Chỗ AllowedIPs của peer này bác có thể thêm/bớt dải địa chỉ vlan ở nhà mà bác muốn/không muốn được truy cập tương ứng.

Giả sử bây giờ bác đã có điện thoại với cấu hình WireGuard nối sẵn vào cái wghp225 này rồi, và giờ bác muốn từ điện thoại này cũng truy cập được vào 192.168.10.5 chẳng hạn, thì giờ bác chỉ việc:

Đầu tiên là sửa địa chỉ của điện thoại (chỗ Addresses) trong cấu hình WireGuard trên điện thoại, không còn là địa chỉ dạng 10.6.0.x/32 nữa, mà là 10.6.1.x/32! Trên server hp225 bác cũng sửa địa chỉ của Peer điện thoại ở mục AllowedIPs sang 10.6.1.x/32 tương ứng.

Sau đó edit cấu hình Peer trên điện thoại, chỗ AllowedIPs nếu đang có 10.6.0.0/24 không thôi thì bác sửa thành 10.6.1.0/24 và cho thêm các dải /24 của các VLAN vào. Còn nếu trên điện thoại chỗ cấu hình peer đã để sẵn AllowedIPs = 0.0.0.0/0 rồi thì bác không cần chỉnh sửa gì thêm trên điện thoại cả.

Em đã test cấu hình tương tự ở nhà em và nó đã chạy ạ.



Để em lấy thí dụ, điện thoại có cấu hình VPN WireGuard như trên, trong cấu hình để Addresses = 10.6.1.20/32, phần Peer có endpoint là server VPN hp225. AllowedIPs (Allowed Addresses) chỗ peer này trên điện thoại để 10.6.1.0/24, 192.168.5.0/24, 192.168.10.0/24, 192.168.2.0/24, 192.168.30.0/24, 192.168.40.0/24 hoặc 0.0.0.0/0.

Điện thoại muốn nối vào 192.168.10.5 cổng 80 TCP, gửi packet đến địa chỉ này thì packet sẽ có source address = 10.6.1.20, destination address 192.168.10.5. Vì địa chỉ đích nằm trong danh sách Allowed IPs/Allow Addresses của Peer trên điện thoại đi hướng VPN server hp225, packet này sẽ được chuyển qua WireGuard đến hp225.

WireGuard trên hp225 nhận được packet, vì địa chỉ source 10.6.1.20 trùng với AllowedIPs trên cấu hình Peer ứng với điện thoại nên packet được chấp thuận cho chuyển tiếp. Vì địa chỉ đích là 192.168.10.5, nên WireGuard sẽ tìm trong số các Peer trong cấu hình của mình, xem có Peer nào có địa chỉ này trong danh sách AllowedIPs, kết quả là Peer thứ 2 của Router MikroTik được chọn, packet được lái qua kết nối này.

Tại router MikroTik, packet đến interface wghp225lan. Ứng với peer đã thiết lập có AllowedIPs 10.6.1.0/24, thế nên packet được chấp thuận, in-interface=wghp225lan, in-interface-list=Lan.

Đích đến của packet là 192.168.10.5, tra bảng routes thì ra ứng với out-interface là VlanHome, out-interface-list=Lan. Không có rule tường lửa block Lan-Lan nên packet được cho qua.

Host 192.168.10.5 xử lý packet và gửi packet trả lời, lúc này source address là 192.168.10.5, destination address là 10.6.1.20.

Tra routing thì thấy ứng với địa chỉ đích, out-interface=wghp225lan (do thuộc 10.6.1.0/24), out-interface-list=Lan và không bị block forward. Packet trả lời được chuyển qua wghp225lan đi qua WireGuard.

Tại server hp225, địa chỉ gốc của packet 192.168.10.5 thuộc AllowedIPs của Peer số 2 ứng với router nên được chấp thuận. Địa chỉ đích 10.6.1.20 ứng với Peer của điện thoại, packet được chuyển tiếp qua WG đến điện thoại.

Điện thoại nhận được packet, địa chi gốc là 192.168.10.5 thuộc danh sách AllowedIPs của Peer nên được chấp thuận.
 
Last edited:
Post kia là em đề cập đến việc để cái pihole nó tiếp tục chạy, với yêu cầu là đi qua WireGuard, mà không bị phụ thuộc vào cái kết nối WireGuard trên router ý ạ, là reply của cái phần này :D



Còn cái tạo kết nối để bên ngoài vào được LAN, đồng thời vẫn giữ thiết lập hiện thời là cho 192.168.10.100-192.168.10.150 đi qua WireGuard khi vào internet em nghĩ có thể làm như sau, với giả định cái hp255 là cái VPN server bên ngoài của bác đang sẵn có và chạy sẵn WireGuard.

Trên router MikroTik, bác tạo 1 interface WireGuard hoàn toàn mới, thí dụ tên là wghp225lan. Listen Port khác với cái 51820 của cái wghp225 đã có sẵn.

Code:
/interface wireguard
add listen-port=51822 mtu=1420 name=wghp225lan

Bác cho interface này vào interface list Lan. Như thế sau này từ interface này sẽ truy cập được vào các vlan của bác:

Code:
/interface list member
add interface=wghp225lan list=Lan

Bác gán dải địa chỉ cho interface này:

Code:
/ip address
add address=10.6.1.10/24 interface=wghp225lan network=10.6.1.0

Khi này trong bảng IP - Routes sẽ tự động có entry destination 10.6.1.0/24 đi default gateway wghp225lan, table main.

Đưa dải địa chỉ này vào list "ip from vlan" để packet có destination là dải này không bị mangle rule lái sang wghp225:

Code:
/ip firewall address-list
add address=10.6.1.0/24 list="ip from vlan"

Vẫn trên router MikroTik, vào bảng WireGuard - Peers, tạo thêm 1 Peer mới gắn với interface wghp225lan. Để endpoint-address và port là cái con VPN server của bác (giống hệt tham số bên interface wghp225), preshared-key thì tạo mới hoặc copy cũng được (miễn là sau này bác dùng đúng cái preshared key này trên server). Bác chú ý để Persistent Keepalive là 5s ạ!

Code:
/interface wireguard peers
add allowed-address=10.6.1.0/24 endpoint-address=xxx.xxx.xxx.xxx \
    endpoint-port=51820 interface=wghp225lan preshared-key="xxxxxxxxxxxxxx=" \
    public-key="xxxxxxxxxxxxxxxxxx=" persistent-keepalive=5s

Cấu hình trên router như vậy là xong ạ. Sau đó bác lên con server hp225 của bác để cấu hình peer cho WireGuard.

Phần chỗ dưới [Interface] của cấu hình WireGuard, chỗ Address, bác thêm địa chỉ mới của server ở dải 10.6.1.0/24 vào, thí dụ 10.16.1.1, bên cạnh địa chỉ 10.6.0.1 sẵn có

Code:
[Interface]
Address = 10.6.0.1/24
Address = 10.6.1.1/24

Bác thêm 1 peer thứ 2 cho con router trên đó. Public key là public key lấy từ cái interface wghp225lan ở trên kia, PresharedKey cũng phải khớp.

Code:
[Peer]
PublicKey = xxxx=
PresharedKey = xxxx=
AllowedIPs = 10.6.1.10/32, 192.168.5.0/24, 192.168.10.0/24, 192.168.2.0/24, 192.168.30.0/24, 192.168.40.0/24

Chỗ AllowedIPs của peer này bác có thể thêm/bớt dải địa chỉ vlan ở nhà mà bác muốn/không muốn được truy cập tương ứng.

Giả sử bây giờ bác đã có điện thoại với cấu hình WireGuard nối sẵn vào cái wghp225 này rồi, và giờ bác muốn từ điện thoại này cũng truy cập được vào 192.168.10.5 chẳng hạn, thì giờ bác chỉ việc:

Đầu tiên là sửa địa chỉ của điện thoại (chỗ Addresses) trong cấu hình WireGuard trên điện thoại, không còn là địa chỉ dạng 10.6.0.x/32 nữa, mà là 10.6.1.x/32! Trên server hp225 bác cũng sửa địa chỉ của Peer điện thoại ở mục AllowedIPs sang 10.6.1.x/32 tương ứng.

Sau đó edit cấu hình Peer trên điện thoại, chỗ AllowedIPs nếu đang có 10.6.0.0/24 không thôi thì bác sửa thành 10.6.1.0/24 và cho thêm các dải /24 của các VLAN vào. Còn nếu trên điện thoại chỗ cấu hình peer đã để sẵn AllowedIPs = 0.0.0.0/0 rồi thì bác không cần chỉnh sửa gì thêm trên điện thoại cả.

Em đã test cấu hình tương tự ở nhà em và nó đã chạy ạ.



Để em lấy thí dụ, điện thoại có cấu hình VPN WireGuard như trên, trong cấu hình để Addresses = 10.6.1.20/32, phần Peer có endpoint là server VPN hp225. AllowedIPs (Allowed Addresses) chỗ peer này trên điện thoại để 10.6.1.10/32, 192.168.5.0/24, 192.168.10.0/24, 192.168.2.0/24, 192.168.30.0/24, 192.168.40.0/24 hoặc 0.0.0.0/0.

Điện thoại muốn nối vào 192.168.10.5 cổng 80 TCP, gửi packet đến địa chỉ này thì packet sẽ có source address = 10.6.1.20, destination address 192.168.10.5. Vì địa chỉ đích nằm trong danh sách Allowed IPs/Allow Addresses của Peer trên điện thoại đi hướng VPN server hp225, packet này sẽ được chuyển qua WireGuard đến hp225.

WireGuard trên hp225 nhận được packet, vì địa chỉ source 10.6.1.20 trùng với AllowedIPs trên cấu hình Peer ứng với điện thoại nên packet được chấp thuận cho chuyển tiếp. Vì địa chỉ đích là 192.168.10.5, nên WireGuard sẽ tìm trong số các Peer trong cấu hình của mình, xem có Peer nào có địa chỉ này trong danh sách AllowedIPs, kết quả là Peer thứ 2 của Router MikroTik được chọn, packet được lái qua kết nối này.

Tại router MikroTik, packet đến interface wghp225lan. Ứng với peer đã thiết lập có AllowedIPs 10.6.1.0/24, thế nên packet được chấp thuận, in-interface=wghp225lan, in-interface-list=Lan.

Đích đến của packet là 192.168.10.5, tra bảng routes thì ra ứng với out-interface là VlanHome, out-interface-list=Lan. Không có rule tường lửa block Lan-Lan nên packet được cho qua.

Host 192.168.10.5 xử lý packet và gửi packet trả lời, lúc này source address là 192.168.10.5, destination address là 10.6.1.20.

Tra routing thì thấy ứng với địa chỉ đích, out-interface=wghp225lan (do thuộc 10.6.1.0/24), out-interface-list=Lan và không bị block forward. Packet trả lời được chuyển qua wghp225lan đi qua WireGuard.

Tại server hp225, địa chỉ gốc của packet 192.168.10.5 thuộc AllowedIPs của Peer số 2 ứng với router nên được chấp thuận. Địa chỉ đích 10.6.1.20 ứng với Peer của điện thoại, packet được chuyển tiếp qua WG đến điện thoại.

Điện thoại nhận được packet, địa chi gốc là 192.168.10.5 thuộc danh sách AllowedIPs của Peer nên được chấp thuận.
phần tạo peer thứ 2 này cho router em lên con wireguard server tạo thêm 1 file cấu hình mới rồi lấy private key với public và preshared key của file cấu hình mới add vào cái privatekey, public va preshared ksy tương ứng trên cái interface wghp225lan được không bác?
 
phần tạo peer thứ 2 này cho router em lên con wireguard server tạo thêm 1 file cấu hình mới rồi lấy private key với public và preshared key của file cấu hình mới add vào cái privatekey, public va preshared ksy tương ứng trên cái interface wghp225lan được không bác?
Không cần bác ơi. Trên RouterOS lúc tạo interface Wireguard mới để trống chỗ Key là nó tự tạo. Để nguyên như này bác

1711358974753.png


Ấn OK xong là nó tự tạo private key và bác có thể copy public key tương ứng nó hiện ra, mang lên VPN server.

Trên server bác chỉ cần dùng đúng 1 cái file sẵn có với public/private key sẵn có thôi bác ạ. Bác tưởng tượng file config WireGuard nó cho bác làm được thế này:

Code:
[Interface]
Address = x.x.x.x/xx
Address = y.y.y.y/yy
PrivateKey = xxxxxx=
ListenPort = 12345

[Peer]
PublicKey = aaaaa=
AllowedIPs = e.e.e.e/xx, f.f.f.f/xx

[Peer]
PublicKey = bbbbbb=
AllowedIPs = g.g.g.g/xx

[Peer]
PublicKey = ccccc=
AllowedIPs = m.m.m.m/xx, n.n.n.n/xx,p.p.p.p/xx

Tức là 1 cái interface (định nghĩa bởi phần [Interface]), sẽ listen ở 1 cổng, có 1 cặp private/public key, có thể có 1 hoặc nhiều hơn địa chỉ.

Sau đó 1 cái interface này có thể có vô số peer, mỗi 1 peer là 1 thiết bị ở xa. Mỗi peer cần ít nhất 1 cái public key của nó, và 1 hoặc nhiều dải địa chỉ ở phần AllowedIPs, các Peer dưới cùng 1 mục interface không được có AllowedIPs trùng hay đè lên nhau. Ngoài ra, chỗ peer có thể thêm thông tin End-Point nếu có.

1 file .conf này tương đương với trong RouterOS bác có bảng WireGuard (mỗi entry ứng với một file có 1 cái [Interface]) và bảng Peers (các entries cùng "Interface" ứng với các [Peer] nằm dưới của 1 file .conf).

Trên server hp225 bác chỉ cần 1 cái interface đang chạy sẵn bây giờ đây, với đúng cái địa chỉ endpoint và cổng sẵn có. Giờ có sẵn 1 [Peer] cho cái 10.6.0.13/32 mà Router bác đang dùng rồi. Bác thêm 1 [Peer] nữa bên dưới ở ngay trong file đó, nhưng mà cho địa chỉ AllowedIPs = 10.6.1.10/32, 192.168.5.0/24, 192.168.10.0/24, 192.168.2.0/24, 192.168.30.0/24, 192.168.40.0/24. Và public key lấy từ interface wghp225lan bác tạo mới trên RouterOS.

Các thiết bị khác như điện thoại, tablet, PC ở chỗ khác, khi muốn nối vào cái VPN WireGuard này thì mỗi thiết bị sẽ có một mục [Peer] tương ứng của nó ở bên dưới trong cùng file .conf này.
 
Last edited:
Không cần bác ơi. Trên RouterOS lúc tạo interface Wireguard mới để trống chỗ Key là nó tự tạo. Để nguyên như này bác

View attachment 2403163

Ấn OK xong là nó tự tạo private key và bác có thể copy public key tương ứng nó hiện ra, mang lên VPN server.

Trên server bác chỉ cần dùng đúng 1 cái file sẵn có với public/private key sẵn có thôi bác ạ. Bác tưởng tượng file config WireGuard nó cho bác làm được thế này:

Code:
[Interface]
Address = x.x.x.x/xx
Address = y.y.y.y/yy
PrivateKey = xxxxxx=
ListenPort = 12345

[Peer]
PublicKey = aaaaa=
AllowedIPs = e.e.e.e/xx, f.f.f.f/xx

[Peer]
PublicKey = bbbbbb=
AllowedIPs = g.g.g.g/xx

[Peer]
PublicKey = ccccc=
AllowedIPs = m.m.m.m/xx, n.n.n.n/xx,p.p.p.p/xx

Tức là 1 cái interface (định nghĩa bởi phần [Interface]), sẽ listen ở 1 cổng, có 1 cặp private/public key, có thể có 1 hoặc nhiều hơn địa chỉ.

Sau đó 1 cái interface này có thể có vô số peer, mỗi 1 peer là 1 thiết bị ở xa. Mỗi peer cần ít nhất 1 cái public key của nó, và 1 hoặc nhiều dải địa chỉ ở phần AllowedIPs, các Peer dưới cùng 1 mục interface không được có AllowedIPs trùng hay đè lên nhau. Ngoài ra, chỗ peer có thể thêm thông tin End-Point nếu có.

1 file .conf này tương đương với trong RouterOS bác có bảng WireGuard (mỗi entry ứng với một file có 1 cái [Interface]) và bảng Peers (các entries cùng "Interface" ứng với các [Peer] nằm dưới của 1 file .conf).

Trên server hp225 bác chỉ cần 1 cái interface đang chạy sẵn bây giờ đây, với đúng cái địa chỉ endpoint và cổng sẵn có. Giờ có sẵn 1 [Peer] cho cái 10.6.0.13/32 mà Router bác đang dùng rồi. Bác thêm 1 [Peer] nữa bên dưới ở ngay trong file đó, nhưng mà cho địa chỉ AllowedIPs = 10.6.1.10/32, 192.168.5.0/24, 192.168.10.0/24, 192.168.2.0/24, 192.168.30.0/24, 192.168.40.0/24. Và public key lấy từ interface wghp225lan bác tạo mới trên RouterOS.

Các thiết bị khác như điện thoại, tablet, PC ở chỗ khác, khi muốn nối vào cái VPN WireGuard này thì mỗi thiết bị sẽ có một mục [Peer] tương ứng của nó ở bên dưới trong cùng file .conf này.
em xài cái vpn wireguard easy trên docker á bác nên phần config này em chưa rành lắm

via theNEXTvoz for iPhone
 
em xài cái vpn wireguard easy trên docker á bác nên phần config này em chưa rành lắm

via theNEXTvoz for iPhone

Em xưa nay vẫn chỉ cài wireguard-tools rồi edit cái file text có vài dòng rồi chạy wg-quick thôi bác ạ, cấu hình siêu đơn giản trong vài giây.


Rồi để systemd chạy nó lúc khởi động. Em không thấy mấy cái Web GUI này nọ nó mang lại được gì hơn mà cấu hình rắc rối phức tạp gấp mấy chục lần, so với việc mở editor, thêm 2-3 dòng văn bản.
 
Em xưa nay vẫn chỉ cài wireguard-tools rồi edit cái file text có vài dòng rồi chạy wg-quick thôi bác ạ, cấu hình siêu đơn giản trong vài giây.


Rồi để systemd chạy nó lúc khởi động. Em không thấy mấy cái Web GUI này nọ nó mang lại được gì hơn mà cấu hình rắc rối phức tạp gấp mấy chục lần, so với việc mở editor, thêm 2-3 dòng văn bản.
cái này chạy trên docker được không bác

via theNEXTvoz for iPhone
 
cái này chạy trên docker được không bác

via theNEXTvoz for iPhone

Các lệnh (tức là ứng dụng command line) wg-quick, wg cũng như cái kernel module wireguard là những cái làm nên cái WireGuard gốc bác ạ, do chính tác giả của WireGuard (Jason A. Donenfeld) tạo ra và maintain đến bây giờ. Khi bác cài package WireGuard chính thức trên các dòng Linux và BSD là cài những cái đó và sử dụng cấu trúc file cấu hình đó, tạo/edit các file .conf, rồi sử dụng lệnh wg/wg-quick để quản lý.


Các Docker Images dính dáng đến WireGuard mà bác tìm thấy được đa số sẽ kèm theo 1 phần giao diện quản lý, có thể là giao diện Web, hoặc có thể chỉ thêm bớt thông tin về peers qua Environment variables, rồi có thể đơn giản hóa việc tạo private/public key bằng cách chạy hộ bác mấy cái dòng lệnh tạo keys, và dưới nền thì hầu hết bọn chúng đều làm việc là từ những thông tin bác điền vào trong phần giao diện, chúng sẽ tạo ra file cấu hình .conf ở dưới nền và chạy các lệnh wg/wg-quick giúp bác. Bù lại chúng đa số không cho bác sửa bằng tay cái file cấu hình wireguard kia, vì đa số bọn chúng sẽ ghi đè lên file cấu hình này mỗi khi bác chỉnh sửa gì trong giao diện.

Em chưa thử cái wg-easy bác đang dùng nên không rõ, nhưng nếu bác tìm được trong giao diện quản lý của nó cách để chỉnh sửa AllowedIPs ứng với các peers (chắc nó gọi peers là Clients) như em bảo ở trên (tức là nó không ép peers chỉ sử dụng địa chỉ nó tạo sẵn) và có chỗ chỉnh cho cái interface chính có 2 địa chỉ 10.6.0.1/24 và 10.6.1.1/24 đồng thời thì bác tiếp tục sử dụng wg-easy được và chỉnh các địa chỉ như em ghi ở trên. Còn nếu nó chỉ có mỗi cái công-tắc bật tắt cho mỗi clients với địa chỉ có vẻ cố định như trong hình em nhìn thấy trên mạng thì không ăn thua bác ạ.

Cái Docker Image có vẻ gần với WireGuard cái gốc, ít thêm thắt giao diện quản lý (không có web UI gì cả) là cái này Docker (https://hub.docker.com/r/linuxserver/wireguard) của linuxserver.io. Cái này thì khi bác cấu hình bằng environment variables thì nó cũng tự tạo ra file wg0.conf (mà bác sẽ không sửa được bằng tay vì sẽ bị nó ghi đè), nhưng ít ra nó cho bác chọn AllowedIPs cho từng peer. Ngoài ra nó còn cho bác để file .conf do bác tự tạo (bên cạnh cái wg0.conf) rồi nó tự chạy cái interface WireGuard cấu hình bởi cái file .conf đó lên giúp bác. Lúc này bác thích thêm bớt gì vào file cấu hình này thì bác làm.

Nếu chỉ dùng cái wg0.conf sẵn có thì bác có thể cấu hình peer bằng cách đặt PEERS = 5 chẳng hạn nó sẽ tạo ra 5 mục [Peer] trong file config, tự sinh ra 5 cặp public/private key cho 5 peer (lưu dưới /config/peer1, /config/peer2, v.v...) và tự chọn địa chỉ AllowedIPs cho các peers. Bác có thể sửa các địa chỉ này bằng cách thêm các environment variables kiểu SERVER_ALLOWEDIPS_PEER_1, SERVER_ALLOWEDIPS_PEER_2, v.v...

Ngoài ra thay bằng số bác có thể set biến PEERS thành dãy các tên, kiểu "routerOSWan,routerOSLan,laptop1,phone3" rồi gán AllowedIPs bằng SERVER_ALLOWEDIPS_PEER_routerOSWan, SERVER_ALLOWEDIPS_PEER_routerOSLan, v.v...
 

CGGX_ANNX

Bác cho em hỏi có cách nào để setup khi mình truy cập vào web nào thì sẽ đi theo đường wan hay vpn không bác. Như kiểu vô facebook.com thì nó tự động chuyển sang đi qua line wireguard á bác
 
ý là mình phải lập danh sách ip của facebook hay có cách nào lọc theo tên miền không bác

via theNEXTvoz for iPhone
Bác cứ add domain vào thì nó tự nhặt IP mà. Nhưng cái này chỉ áp dụng với từng domain thôi, nếu có sub-domain là em nó ko có nhận. Phức tạp hơn thì bác lội ngược lại (khá xa), trước đã có mấy bác đưa script để nhặt IP theo domain cho vào list.
1711527430231.png
 

CGGX_ANNX

Bác cho em hỏi có cách nào để setup khi mình truy cập vào web nào thì sẽ đi theo đường wan hay vpn không bác. Như kiểu vô facebook.com thì nó tự động chuyển sang đi qua line wireguard á bác

Cái vấn đề này thực ra trong topic này các bác đã post nhiều lần rồi, hình như trong trang đầu có link đến các post kiểu đó. Ý tưởng là thế này bác nhé:

Hiện firewall của bác bảng mangle đang có sẵn cái rule này rồi

1711523286623.png


Cái rule lái kết nối với source IP address trong cái danh sách "ip to vpn hp255" tự đi qua đường WireGuard ấy. Giờ bác thêm 1 rule mangle đặt ngay bên dưới rule này:

Code:
/ip firewall mangle
add action=mark-routing chain=prerouting comment="-----IP qua Wg hp225-----" \
   dst-address-list="dest through vpn hp225" new-routing-mark=To-Wg-Hp225  \
   in-interface-list=Lan passthrough=no

Với cái rule này thì các kết nối có địa chỉ IP đích nằm trong danh sách "dest through vpn hp225" (đặt tên theo kiểu bác đang đặt mấy cái address list của bác) sẽ cũng được lái qua đường WireGuard kia của bác. Vấn đề là làm cách nào để cái address list "dest through vpn hp225" nó chứa được các địa chỉ mà bác cần (địa chỉ facebook, tiktok, google, v.v... dùng).

Nói trước với bác là mấy cái này không hoạt động 100% đâu, đơn giản là khó có thể thâu tóm hết những địa chỉ đích mà các dịch vụ ngày nay sử dụng, vì những resource kiểu hình ảnh, video, scripts, css, v.v... hay các API endpoints có thể served bởi các domain khác, bởi các CDN hay hosts bên thứ 3 thứ 4 gì đó, chứ không phải mỗi domain *.facebook.com là đủ cho facebook.com.

Cách đầu tiên là bác kiếm danh sách dãy địa chỉ của các dịch vụ mà mọi người khác đã thu thập và post đầy trên mạng. Trong topic này cũng có các bác đưa hướng dẫn rồi, bác có thể hỏi lại xem bác nào có danh sách up-to-date thì post lại ở đây nếu không muốn lội lại post hoặc google. Nhược điểm là các dịch vụ có dải địa chỉ thay đổi thường xuyên, nên các list cũng phải cập nhật thường xuyên (tức là bác cũng phải tự cập nhật cái list "dest through vpn hp225" của bác thường xuyên). Chưa kể các dịch vụ có thể dùng địa chỉ khác nhau khi server các nước khác nhau, nên khi copy list bác phải kiếm list áp dụng cho thị trường Việt Nam.

Cách nữa mà bác cũng hay thấy trong các guides, đó là thêm rule mangle prerouting, khi match domain trong tls header thì add địa chỉ đích vào address list

Code:
/ip firewall mangle
add action=add-dst-to-address-list address-list="dest through vpn hp225" \
    address-list-timeout=30m chain=prerouting in-interface-list=Lan \
    dst-address-list="!dest through vpn hp225" dst-port=443 protocol=tcp \
    tls-host=*.facebook.com

Dòng như này bác phải kéo lên trên các dòng mark-routing khác trong bảng mangle. Ngoài ra bác phải lặp lại dòng này với từng domain mà dịch vụ có thể sử dụng. Thí dụ với facebook còn có thể có một lô domain kiểu facebook.com, facebook.net, fbcdn.com, fbsbx.com, fbcdn.net, fb.com, tfbnw.net, v.v... Đây là cách ở post trước bác @Viyeuxa vừa post.

Tuy nhiên biện pháp này ngày nay đáng tiếc là đã lỗi thời vì càng nhiều dịch vụ chuyển sang dùng ECH (encrypted client hello), hay HTTP3 với QUIC và dùng UDP chứ không phải TLS nữa. RouterOS không có khả năng mò ra được domain name từ những kết nối kiểu này.

Biện pháp add vào address list bằng cách để domain vào mục "Address" như bác @wuhoatu post ở trên cũng không áp dụng được với các subdomain dài loằng ngoằng mà các CDN hay dùng vì nó không cho nhập wildcard *.

Nếu bác hiện đang trỏ các thiết bị vào cái RouterOS là DNS Server (và RouterOS dùng con pihole 192.168.10.10 của bác làm upstream) rồi thì cách hoạt động tốt hơn là add domain vào danh sách DNS static của RouterOS và chọn tính năng add to address list kèm với forward lên upstream server (con pihole). Thí dụ em add một số domain của facebook:

Code:
/ip dns static
add address-list="dest through vpn hp225" forward-to=192.168.10.10 \
    match-subdomain=yes name=fbsbx.com type=FWD
add address-list="dest through vpn hp225" forward-to=192.168.10.10 \
    match-subdomain=yes name=tfbnw.net type=FWD
add address-list="dest through vpn hp225" forward-to=192.168.10.10 \
    match-subdomain=yes name=fb.com type=FWD
add address-list="dest through vpn hp225" forward-to=192.168.10.10 \
    match-subdomain=yes name=fbcdn.net type=FWD
add address-list="dest through vpn hp225" forward-to=192.168.10.10 \
    match-subdomain=yes name=fbcdn.com type=FWD
add address-list="dest through vpn hp225" forward-to=192.168.10.10 \
    match-subdomain=yes name=facebook.net type=FWD
add address-list="dest through vpn hp225" forward-to=192.168.10.10 \
    match-subdomain=yes name=facebook.com type=FWD

Khi này khi các thiết bị trong mạng dùng RouterOS để Query DNS (bác cũng có rule lái mọi query DNS53 vào RouterOS rồi) thì RouterOS sẽ tự add địa chỉ nhận được vào address list kia, với timeout là TTL của domain. Cái này chỉ làm 1 lần cho mỗi thời gian timeout, không cần quét từng kết nối như với rule mangle.

Kết quả tạo ra trong bảng address list khi vào facebook bằng browser:

1711528439504.png


(trong hình tên list của em đặt là TO_FB cho nó ngắn, của bác nó sẽ ghi "dest through vpn hp225").

Nếu client dùng DNS bằng DoH hay DoT thì cách này chịu không giúp được bác ạ. Với cái chính là bác phải kiếm được hết các danh sách domain mà dịch vụ bác cần lái sử dụng.

Ngoài ra con upstream DNS resolver (con pihole của bác) cũng phải cho chạy qua cái WireGuard nhé (bác cho chạy qua sẵn rồi), vì như bác thấy hình trên, em dùng mạng FPT nên các domain CDN của facebook nó toàn lái ra mấy cái server host trên dải của FPT (mấy cái 42.11x, 183.x với 118.x toàn là dải của FPT bác ạ), Nên bác muốn khi đi qua WireGuard thì các địa chỉ của CDN cũng là địa chỉ gần với cái server VPN của bác hơn là địa chỉ của ISP nhà bác ở Việt Nam.
 
Last edited:
Các bác cho em hỏi, tại sao em Port Forward cái cổng 4343 thì nó ok nhưng con 8006 thì không được các bác nhỉ. Kể cả port check thì cũng chỉ thấy port 4343 open, port 8006 thì closed
Screenshot 2024-03-27 at 15.33.54.png
 
Back
Top