udpnat
v0.3: Now with actual hash table
NAT สำหรับ Linux เฉพาะ UDP ที่เป็นมิตรกับ P2P
โดยปกติแล้ว NAT จะถูกตั้งค่าบนกล่อง Linux ด้วยคำสั่งนี้:
iptables -t nat -A POSTROUTING -j MASQUERADE
ซึ่งทำให้ NAT แบบกรวยจำกัดพอร์ต ซึ่งไม่เป็นมิตรกับการเจาะรู UDP ที่ใช้โดยแอปพลิเคชันแบบเพียร์ทูเพียร์
โปรแกรมนี้เป็น NAT พื้นที่ผู้ใช้แบบธรรมดาที่ถอดรหัสแพ็กเก็ต UDP ที่ส่งไปยังอินเทอร์เฟซ TUN และใช้ซ็อกเก็ตที่ไม่ใช่แบบดิบตามปกติสำหรับการเชื่อมต่อขาออก คล้ายกับ SLiRP
host@user$ stun stun.counterpath.net
Primary: Independent Mapping, Port Dependent Filter, preserves ports, no hairpin
gateway@root# ip tuntap add dev udpnat mode tun user udpnat_user
gateway@root# ip link set udpnat up
gateway@root# echo 0 > /proc/sys/net/ipv4/conf/udpnat/rp_filter
gateway@root# echo 1 > /proc/sys/net/ipv4/conf/udpnat/forwarding
gateway@root# iptables -t mangle -I PREROUTING -i tun0 -p udp ! --dport 53 -j MARK --set-xmark 44
gateway@root# iptables -t mangle -I PREROUTING -i udpnat -p udp -j MARK --set-xmark 45
gateway@root# iptables -t nat -I POSTROUTING -m mark --mark 44 -j RETURN
gateway@root# iptables -t nat -I POSTROUTING -m mark --mark 45 -j RETURN
gateway@root# ip route add default dev udpnat table 44
gateway@root# ip rule add fwmark 44 table 44
gateway@udpnat_user$ ulimit -n 8192
gateway@udpnat_user$ udpnat /dev/net/tun udpnat 60
host@user$ stun stun.counterpath.net
Primary: Independent Mapping, Independent Filter, preserves ports, no hairpin
ข้อจำกัด:
มีเวอร์ชันที่ใช้ x86_64 static musl ในรุ่น Github
ใบอนุญาต: MIT หรือ Apache 2.0