我想用docker创建多个pptp客户端,每个pptp docker实例都应该有独立的ppp网络接口,所以docker--network参数必须是[bridge],但是我在实例启动时遇到了[LCP:超时发送配置请求]。
Dockerfile
FROM golang:1.9-alpine as source
MAINTAINER wlw
RUN apk add --no-cache \
--repository http://dl-cdn.alpinelinux.org/alpine/edge/testing/ \
pptpclient
COPY entrypoint.sh /entrypoint.sh
RUN mkdir -p /go/src/pptp
WORKDIR /go/src/pptp
COPY . /go/src/pptp
RUN go build -o app
#RUN echo 1 > /proc/sys/net/netfilter/nf_conntrack_helper
ENTRYPOINT ["/entrypoint.sh"]
CMD ["/bin/bash"]
入口点.sh
#!/bin/sh
#echo net.ipv4.ip_forward=1 /etc/sysctl.conf
echo 1 > /proc/sys/net/netfilter/nf_conntrack_helper
modprobe nf_conntrack_pptp
cat > /etc/ppp/peers/${TUNNEL} <<_EOF_
pty "pptp ${SERVER} --nolaunchpppd"
name "${USERNAME}"
password "${PASSWORD}"
remotename PPTP
file /etc/ppp/options.pptp
ipparam "${TUNNEL}"
_EOF_
cat > /etc/ppp/ip-up <<"_EOF_"
#!/bin/sh
ip route add 0.0.0.0/1 dev $1
ip route add 128.0.0.0/1 dev $1
_EOF_
cat > /etc/ppp/ip-down <<"_EOF_"
#!/bin/sh
ip route del 0.0.0.0/1 dev $1
ip route del 128.0.0.0/1 dev $1
_EOF_
modprobe nf_conntrack_pptp
exec pon ${TUNNEL} debug dump logfd 2 nodetach persist "$@"
main.go [测试pptp客户端ip]
package main
import (
"fmt"
"io/ioutil"
"net/http"
"time"
)
func main() {
count := 0
for {
fmt.Println("count:",count)
time.Sleep(time.Second *2)
req, err := http.NewRequest(http.MethodGet, "http://45.40.198.155:1234", nil)
if err != nil {
panic(err)
}
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
data, err := ioutil.ReadAll(res.Body)
fmt.Println(string(data))
}
}
我更改了centos版本和docker版本,但也遇到了同样的错误。顺便说一句,在VMware Fusion上运行的centos,版本是7.2,docker版本是19.03.1
码头工人运行命令
docker run -it --restart always --privileged -e SERVER=hb660.3322.org -e TUNNEL=vps -e USERNAME=xe5602 -e PASSWORD=621 --network=bridge pptp:test
这是日志
pppd options in effect:
debug # (from command line)
nodetach # (from command line)
persist # (from command line)
logfd 2 # (from command line)
dump # (from command line)
noauth # (from /etc/ppp/options.pptp)
refuse-pap # (from /etc/ppp/options.pptp)
refuse-chap # (from /etc/ppp/options.pptp)
refuse-mschap # (from /etc/ppp/options.pptp)
refuse-eap # (from /etc/ppp/options.pptp)
name xe5602 # (from /etc/ppp/peers/vps)
password ?????? # (from /etc/ppp/peers/vps)
remotename PPTP # (from /etc/ppp/peers/vps)
# (from /etc/ppp/options.pptp)
pty pptp hb660.3322.org --nolaunchpppd # (from /etc/ppp/peers/vps)
ipparam vps # (from /etc/ppp/peers/vps)
nobsdcomp # (from /etc/ppp/options.pptp)
nodeflate # (from /etc/ppp/options.pptp)
using channel 1
Using interface ppp0
Connect: ppp0 <--> /dev/pts/1
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x9cb1e5f2> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x9cb1e5f2> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x9cb1e5f2> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x9cb1e5f2> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x9cb1e5f2> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x9cb1e5f2> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x9cb1e5f2> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x9cb1e5f2> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x9cb1e5f2> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x9cb1e5f2> <pcomp> <accomp>]
LCP: timeout sending Config-Requests
Connection terminated.
Modem hangup
之后macvlan
,又出现了另外两个问题
rcvd [CHAP Success id=0x1 "S=040A411772569943A96B9311C0FDA2AF5746BC47"]
CHAP authentication succeeded
sent [IPCP ConfReq id=0x1 <compress VJ 0f 01> <addr 192.168.101.202>]
rcvd [IPCP ConfReq id=0x1 <addr 200.6.211.68>]
sent [IPCP ConfAck id=0x1 <addr 200.6.211.68>]
rcvd [IPV6CP ConfReq id=0x1 <addr fe80::0000:0000:00f0:3213>]
Unsupported protocol 'IPv6 Control Protocol' (0x8057) received
sent [LCP ProtRej id=0x3 80 57 01 01 00 0e 01 0a 00 00 00 00 00 f0 32 13]
rcvd [proto=0x8281] 01 01 00 04
Unsupported protocol 'MPLSCP' (0x8281) received
sent [LCP ProtRej id=0x4 82 81 01 01 00 04]
rcvd [IPCP ConfRej id=0x1 <compress VJ 0f 01>]
sent [IPCP ConfReq id=0x2 <addr 192.168.101.202>]
rcvd [IPCP ConfNak id=0x2 <addr 200.6.212.239>]
sent [IPCP ConfReq id=0x3 <addr 200.6.212.239>]
rcvd [IPCP ConfAck id=0x3 <addr 200.6.212.239>]
local IP address 200.6.212.239
remote IP address 200.6.211.68