a. STUN (Simple Traversal of UDP through NAT)
Cho phép các ứng dụng nhận biết sự có mặt và các loại NAT và firewall giữa nó và Internet. Có thể xác định địa chỉ IP đi ra bên ngoài do NAT tạo ra. Giải pháp này đòi hỏi client phải hỗ trợ STUN.
STUN nhận biết NAT bằng cách gửi các bản tin binding request đến STUN server yêu cầu địa chỉ và số cổng dùng để truyền và nhận lưu lượng. STUN server hồi đáp cho STUN client bằng bản tin binding response mang thông tin địa chỉ IP đi ra bên ngoài và số port của NAT. Các thông tin này sẽ dùng thiết lập bản tin thiết lập cuộc gọi.
Thực tế thì rất ít sản phẩm hỗ trợ STUN nên giải pháp này không được phổ biến.
b. TURN (Traversal Using Relay NAT)
TURN là giao thức cho phép một thiết bị nằm sau NAT/firewall nhận dữ liệu qua TCP/UDP, bổ sung cho hạn chế của STUN là có thể sử dụng được NAT đối xứng vì TURN nằm trên đường báo hiệu.
STUN không nằm trên đường báo hiệu cuộc gọi nên khi sử dụng NAT đối xứng, NAT sẽ ánh xạ cho lưu lượng đi ra một địa chỉ khác, đối với lưu lượng bên ngoài đi vào cũng tương tự.
c. ICE (Interactive Connectivity Establishment)
Các giải pháp STUN và TURN đều có những thuận lợi và hạn chế riêng. IETF đã phát triển một giải pháp khác là ICE.
ICE không phải là một giao thức mà nó là một phần làm việc cùng với STUN hay TURN, cho phép client khảo sát tìm ra cách thông tin với bên ngoài. Các ICE client sẽ trao đổi thông tin (IP private và public kể cả khi có sự thay đổi) và thương lượng tìm ra các con đường có thể kết nối giữa chúng và chọn con đường có chất lượng tốt nhất (trễ và jitter thấp nhất).
d. Đường hầm
Giải pháp này giải quyết vấn đề firewall/NAT bằng cách tạo đường hầm cho báo hiệu và cả lưu lượng thoại đi qua firewall/NAT. Giải pháp này đòi hỏi một server trong mạng nội bộ và một ở mạng bên ngoài. Hai server này sẽ tạo ra một đường hầm mang tất cả lưu lượng SIP, đường hầm này thường không cần mã hóa.
Giải pháp này có ưu điểm là thay đổi ít nhất chính sách bảo mật sẵn có. Tuy nhiên nó sẽ gây trễ trên lưu lượng thoại, làm giảm chất lượng cuộc gọi.