UdpListener
UdpListener نود سرور UDP است. روی یک آدرس و پورت یا بازه پورت گوش میدهد، packetهای ورودی را براساس remote peer گروهبندی میکند، برای هر peer یک line میسازد و payloadها را به نود بعدی میفرستد.
جایگاه رایج:
UdpListener -> ... -> UdpConnector
نمونه تنظیم
{
"name": "udp-listener",
"type": "UdpListener",
"settings": {
"address": "0.0.0.0",
"port": [20000, 20100],
"interface": "eth0",
"fwmark": 10,
"balance-group": "udp-public",
"balance-interval": 30000,
"multiport-backend": "socket",
"whitelist": [
"192.168.1.0/24",
"2001:db8::/64"
]
},
"next": "next-node-name"
}
فیلدهای ضروری
| فیلد | توضیح |
|---|---|
name | نام دلخواه نود |
type | باید دقیقا UdpListener باشد |
next | نودی که lineها و payloadهای UDP را دریافت میکند |
settings.address | آدرس bind، مثل 0.0.0.0، :: یا IP مشخص |
settings.port | یک عدد مثل 5353 یا آرایه دو عضوی مثل [20000, 20100] |
در JSON واقعی این دو کلید داخل settings با نامهای address و port نوشته میشوند.
نسخه فعلی بازه پورت را به شکل آرایه دو عضوی میخواند، نه string.
تنظیمات اختیاری
| گزینه | توضیح |
|---|---|
interface | محدود کردن socket به interface محلی؛ در Linux از SO_BINDTODEVICE استفاده میشود |
fwmark | socket mark در سیستمهایی که SO_MARK دارند |
balance-group | گروه توزیع بین چند listener همپورت |
balance-interval | مدت sticky بودن peer در گروه balance، به میلیثانیه |
multiport-backend | برای بازه پورت: iptables یا socket |
whitelist | IP یا CIDRهای مجاز، IPv4 و IPv6 |
در نسخه فعلی سورس، UdpListener مثل TcpListener فیلد whitelist را parse میکند، اما blacklist را از JSON نمیخواند. configهای قدیمی دارای blacklist را به whitelist یا چند listener جدا تبدیل کنید.
رفتار UDP
UDP اتصال واقعی مثل TCP ندارد، اما UdpListener برای هر remote address/port یک line نگه میدارد. نتیجه:
- packetهای یک peer به همان line فرستاده میشوند.
- پاسخ downstream به همان peer برگشت داده میشود.
- idle peerها بعد از timeout پاک میشوند.
مسیر داده:
- peer به زنجیر: datagram ورودی به upstream payload برای
next - زنجیر به peer: downstream payload به datagram خروجی برای همان peer
whitelist و balance
"whitelist": [
"10.0.0.0/8",
"203.0.113.10/32",
"2001:db8::/64"
]
اگر whitelist تنظیم شود، فقط peerهای match شده وارد این listener میشوند. در سناریوهای چند listener روی یک port، میتوانید با whitelist مسیر peerهای خاص را جدا کنید.
balance-group برای پخش peerها بین چند listener همپورت استفاده میشود. sticky بودن براساس peer انجام میشود تا packetهای پشت سر هم یک peer بین چند مسیر پخش نشوند.
نکتههای عملی
- برای UDP، کوچک بودن payload و timeoutهای کوتاهتر طبیعی است؛ مقدارهای keepalive و idle را با پروتکل واقعی خود هماهنگ کنید.
- اگر به stateless UDP واقعی بر اساس routing context نیاز دارید، به جای
UdpListenerنودUdpStatelessSocketرا بررسی کنید. - برای WireGuard داخل WaterWall معمولا
UdpStatelessSocketهمسایه مناسبتری برایWireGuardDeviceاست.