2011-05-11 84 views
3

我試圖在UDP數據報中傳輸數據到外部位置的客戶端到我本地局域網中的一臺PC。 但我的網絡是通過一個ADSL調制解調器發送到一臺帶有Slackware的電腦,這臺電腦將包重定向到其他電腦。 我使用socat重定向UDP:重定向UDP的SOCAT不起作用!

socat -v udp-listen:1935,fork,reuseaddr udp:192.168.0.40:37000 

在LAN連接如將是好的,但外部IP地址不起作用。 有人幫忙?

回答

7

我不認爲socat是罪魁禍首,但考慮到使用stone代替socat,因爲使用fork()每個接收的包是有點怪。石被稱爲你的情況是這樣的(我認爲):

stone -n -d -d -d -d 192.168.0.40:37000/udp 1935/udp

現在爲什麼外部IP地址可能不工作。可悲的是你的文字並沒有告訴很多關於您的設置,所以我不得不猜測:

這取決於你的防火牆/調制解調器/路由器上,如果它能夠轉發UDP數據包。通常,如果從內部發起UDP請求,路由器將打開一個NAT連接,這通常意味着不僅數據包的源IP發生變化,而且源端口也會發生變化。由於UDP是無連接的,所以UDP NAT連接通常會很快超時,例如5分鐘後,如果沒有數據傳輸到它們。

如果UDP必須在相反的方向(從互聯網到內部網)被打開,路由器通常丟棄所有從互聯網進入的UDP數據包,因爲它不知道在哪裏可以轉發給。路由器不能只選擇一些任意的機器,這將是一個安全漏洞。因此,在「連接到路由器後面的機器的互聯網」中,您必須打開路由器上的UDP端口並將其轉發到正確的機器。在這種情況下,從內部機器發送的數據包將獲得其源IP和源端口,互聯網上的機器始終會看到來自路由器的數據包。因此,除了路由器中的附加規則外,這種情況與外出的情況相同。

請注意,如何在路由器上打開端口(Config,UPnP等)以實現NAT(對稱等)以及若干種方法,以便在其中插入一些孔的方法有多種不同的方法始終取決於您的硬件功能。這一切都無法在這裏得到解答。

其他一些想法什麼可能出錯以及:

  • 一些UDP協議的有效載荷中編碼IP地址。在這種情況下,只是轉發數據包是不夠的,您還必須更改有效負載以糾正交換的IP地址,以便所有機器能夠一起通話。無論如何,這樣的UDP協議設計得非常糟糕,因爲你永遠不應該假定兩臺任意機器可以直接對話,所以所有好的協議都應該支持簡單的代理。

  • 一些ISP過濾特定的UDP端口,任意原因。如果在從Internet到DSL的通話過程中遇到問題,請嘗試使用兩臺直接連接到不同ISP的外部機器。如果這些可以通過UDP通話,請檢查您是否可以通過Intranet與其中一臺外部機器通話。如果這仍然有效,這意味着你也可以向後通話,因爲通常UDP不是定向協議,但是如果有一些NAT參與,你必須確保通信端口保持打開狀態。

  • 移動互聯網計劃往往不支持P2P。這可能意味着,這些計劃完全不支持互聯網,因爲根據定義,IP是P2P。互聯網服務提供商真正想說的「不用P2P」是(我的猜測),不支持從互聯網到移動設備的連接。在這種情況下,您必須始終通過移動設備發起連接,因此您無法使用推送方式(Internet到移動設備),因此移動設備始終必須提取數據(來自Internet的數據)。一些寬帶/有線電視提供商可能也這樣做。通常你可以看到這個,如果你的ISP向你提供10.x.y.z範圍的IP。

有可能是另一種伎倆如何獲取連接工作:

詢問ISP獲得一些IPv6的。也許使用6to4。使用IPv6可以完全消除NAT,然後您的本地LAN直接與IPv6上的Internet互連。一定要在IPv6接口上的Intranet主機上激活防火牆/ iptables,否則你可能會很快看到入侵者。

HTH