是否只能通过将bot塞入Docker中才能正常连接至Socket API?
Z4HD opened this issue · 10 comments
Z4HD commented
#4 中提到下面这段话:
是这样的,那个cqsocketapi只监听了127.0.0.1,所以bot推荐放到docker里运行
加上本人在Docker中进行了11235端口的映射,但映射出的端口不接受外部连接,bot亦无法从Docker外部连接至Socket API。
是否意味着只有把bot塞进Docker中才能正常连接至Socket API?
jqqqqqqqqqq commented
推荐这么做,不然暴露端口的话docker 的 ip 不一定是固定的,我这里有时候是172.17.0.2有时候是172.17.0.3
想把 bot 放外边需要重新编译一个监听0.0.0.0的 cqsocketapi,否则不得不放在 docker 内
Z4HD commented
但是您考虑到如果Socket API监听0.0.0.0的话可能会意外将Socket API暴露至外网因此编译了监听172.0.0.1的版本?
jqqqqqqqqqq commented
不是, cqsocketapi不是我的项目,我只是拿来用
原作者写的就是127.0.0.1,我觉得OK,所以没改
用0.0.0.0会不会暴露公网取决于你的iptables 规则怎么写
Z4HD commented
多谢解答
Z4HD commented
yukixz/cqsocketapi#3
yukixz出于安全性原因,将`172.0.0.1`写死在`cqsocketapi/APIServer.cpp`中。
也许您应当在README.md中说明这一点,免得在无法连接Socket API时误以为是您的Bot或您编译的Socket API模块存在问题。
jqqqqqqqqqq commented
我觉得我 readme 提到了把 bot 放到 docker 里啊
只是没有强调一下,我改改
Z4HD commented
经我的实际测试,使用您编译的Socket API文件,由于监听`127.0.0.1`的原因,只能将Bot塞入Docker运行。这时
建议在容器内部运行本Bot
这句话容易给人一种“本Bot搭配jqqqqqqqqqq编译的Socket API模块可以在容器外运行”的错觉。
jqqqqqqqqqq commented
当然可以在 docker 外运行,会写 iptables 就行
jqqqqqqqqqq commented
举个例子,在 docker 里搞这个
iptables -t nat -I PREROUTING -i eth0 -p udp --dport 11235 -j DNAT --to-destination 127.0.0.1
当然不保证能用,我只是举个例子
Z4HD commented
@jqqqqqqqqqq
不错,值得一试。
让您回复了这么多,麻烦您了。