Networking
如何允許應用程序綁定到分配給介面的子網中的任何地址?
我最近從 Freenet6 獲得了我自己的靜態 IPv6 /56 前綴,並試圖允許應用程序在前綴中綁定任意地址。我修改了隧道創建腳本,
gogoc
用於將客戶端地址(這裡我們稱之為2001:5c0:1000::cccc/128
)和我分配的整個子網(這裡稱之為2001:5c0:2000:5800::/56
)分別分配給tun
和tun:1
。我可以綁定一個應用程序來監聽2001:5c0::cccc
或2001:5c0:5800::
很好,並且使用 IPv6 開放埠測試器表明連接成功。但是,困境在於我無法綁定像 一樣的地址
2001:5c0:2000:5800:1111:2222:3333:4444
,該地址是我分配給的子網的一部分,並作為錯誤程式碼tun:1
獲取。閱讀:EADDRNOTAVAIL``socat
2014/05/10 12:12:06 socat[16940] E bind(3, {AF=10 [2001:5c0:2000:5800:1111:2222:3333:4444]:9876}, 28): Cannot assign requested address
我希望使用的應用程序不支持
IP_FREEBIND
或IP_TRANSPARENT
。是否有可用於隱式自由綁定套接字的核心設置?或者可能是一種從給定程序攔截套接字創建並將套接字選項附加到該創建的方法?
ip addr
:1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000 link/ether 04:7d:7b:XX:XX:XX brd ff:ff:ff:ff:ff:ff 3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 9c:b7:0d:XX:XX:XX brd ff:ff:ff:ff:ff:ff 5: wlan1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:c0:ff:XX:XX:XX brd ff:ff:ff:ff:ff:ff inet 192.168.2.8/24 brd 192.168.2.255 scope global wlan1 valid_lft forever preferred_lft forever inet6 fe80::2c0:ffff:feff:70d1/64 scope link valid_lft forever preferred_lft forever 11: tun: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1280 qdisc pfifo_fast state UNKNOWN group default qlen 500 link/none inet6 2001:5c0:1103:5800::/56 scope global valid_lft forever preferred_lft forever inet6 2001:5c0:1000:b::5225/128 scope global valid_lft forever preferred_lft forever
您的界面配置部分,即
inet6 2001:5c0:1103:5800::/56
在ip addr
列表中,意味著兩件事:
2001:5c0:1103:5800::
已分配給您的界面-您可以通過ping6
它來確定它是有效的,而2001:5c0:1103:5800::1
不會響應/56
用於路由目的,僅表示如果您想使用該前綴 ( ) 向網路發送內容,則應使用介面發送inet6 2001:5c0:1103:5800::/56
出去。tun
您可以使用ip -6 route
.關於如何做你想做的事,你可以看看這個答案。
現在,為什麼綁定起作用了?這是因為您可以在呼叫中使用網路地址
bind
,它會將您的套接字綁定到可以訪問給定網路的介面(特別是綁定到 0.0.0.0 綁定到所有介面,而不是綁定到網際網路)。