2017年10月4日 星期三

以 socat 將 IPv6 特定 port 導向特定主機的 IPv4 指定 port


# socat TCP6-LISTEN:6666,fork TCP4:123.123.123.123:7777
 會將連到本機 IPv6 位址 6666 port 資料全部傳到 123.123.123.123 主機的 7777 port



因為現在 Apple 審核 app 會要求 IPv6連線能力,
所以作為 app server 的主機也要有 IPv6,
原本以為大單位一定有 IPv6,
但是對方回答說配發給主機 IPv6 行政耗時,
只好自己做個跳板轉接。

程式要一直執行,
建議配合 tmux 或 screen 等。

原本找到使用 sit tunnel 加上 iptables 做 routing ,
後來看到可以使用 socat 簡單達成。

但是過程中還遇到在區網中的問題,
作為跳板的 server 除了有撥號取得的 IPv6,記作 IPv6-A,界面 ppp0,
還有 VDSL數據機發給區網電腦的 IPv6,記作 IPv6-B, 界面 eth0。

如果從區網其他電腦連到 IPv6-A,
發現封包除了傳到 IPv6-A,還會傳到 IPv6-B,
結果是ppp0 攔截到的 ICMPv6 ECHO封包只有 SYN 且顯示 no response found,
在 eth0 攔截到的則有 SYN 及 ACK 正常回應,
但是所有封包來源或目的都標示 IPv6-A。

使用外部主機連 IPv6-A時,
也是同樣只有在 eth0 攔截到 SYN 及 ACK,
但是外部主機則無法收到回應。

試著提高 ppp0 的 IPv6-A 在主機路由表的 mactic 到 1 無效,
直接使出大決停用數據機發給區網 IPv6 的 DHCPv6 功能,
至少目前運作正常。

沒有留言:

張貼留言