Я заключил сделку с моим сыном, где, если он построит полностью рабочий трехсторонний светофор в minecraft, я разместлю его собственный сервер minecraft, чтобы он и его друзья могли играть в любое время. Он выполнил свою часть сделки, так что теперь моя очередь.
Чтобы сохранить эту штуку в коробке и сделать ее простой и дешевой для его друзей (mojang auth требует платной учетной записи mojang), я использую простой контейнер VPN с общими пользователями / pass / psk - он может просто дать своим друзьям.
Эта проблема: Это отлично работает, если при подключении они устанавливают сервер как IP-адрес контейнера в сети докеров. Проблема в том, что это меняется каждый раз, когда я перезагружаюсь. Мне нужен преобразователь DNS, чтобы имя сервера всегда minecraft
когда на vpn. DNS, который поставляется с этим VPN, использует общедоступный DNS, который я могу переопределить, но когда я dig
в то время как на контейнере vpn (но не на vpn iself) Я получаю неожиданный IP-адрес и просто не могу предсказать. Таким образом, я не знаю, следует ли / как это отменить. Я прочитал документацию на веб-сайте Docker, и я также подумал об использовании dnsmasq в качестве пересылки. Подробности ниже.
docker-compose.yml
version: '3.3'
services:
minecraft:
build:
context: .
restart: always
hostname: minecraft
volumes:
- world:/game/world
vpn:
image: hwdsl2/ipsec-vpn-server
environment:
- VPN_DNS_SRV1=127.0.0.11
restart: always
hostname: vpn
ports:
- 500:500/udp
- 4500:4500/udp
privileged: true
volumes:
world:
отладка терминала (вне vpn):
[ec2-user@ip-172-31-25-185 ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
608165ea8236 hwdsl2/ipsec-vpn-server "/opt/src/run.sh" 2 days ago Up 2 days 0.0.0.0:500->500/udp, 0.0.0.0:4500->4500/udp mcft_vpn_1
075f6313ae9d mcft_minecraft "java -Xms1024M -jar…" 2 days ago Up 2 days 25565/tcp mcft_minecraft_1
[ec2-user@ip-172-31-25-185 ~]$ docker exec -it 608165ea8236 /bin/bash
root@vpn:/opt/src# dig minecraft
; <<>> DiG 9.10.3-P4-Debian <<>> minecraft
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29390
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;minecraft. IN A
;; ANSWER SECTION:
minecraft. 600 IN A 172.20.0.2
;; Query time: 0 msec
;; SERVER: 127.0.0.11#53(127.0.0.11)
;; WHEN: Mon Jul 08 14:45:41 UTC 2019
;; MSG SIZE rcvd: 52
root@vpn:/opt/src#
Вероятно, самым простым решением было бы назначить статический IP-адрес для minecraft
контейнер. Вы можете увидеть, как это сделать в https://stackoverflow.com/questions/27937185/assign-static-ip-to-docker-container (см. ответ, в котором используется docker-compose
, так как это то, что вы используете).