Docker OpenWrt Image

From misc notes
Jump to navigation Jump to search

Docker OpenWrt Image

はじめの第一歩

docker import https://downloads.openwrt.org/snapshots/targets/x86/64/openwrt-x86-64-generic-rootfs.tar.gz openwrt-x86-64-generic-rootfs
docker images
docker run -i openwrt-x86-64-generic-rootfs cat /etc/banner
docker run -i -t openwrt-x86-64-generic-rootfs /bin/ash

つかえる OpenWrt 環境構築

wget https://downloads.openwrt.org/releases/18.06.1/targets/x86/64/openwrt-18.06.1-x86-64-generic-rootfs.tar.gz

Dockerfile:

FROM scratch
ADD ./openwrt-18.06.1-x86-64-generic-rootfs.tar.gz /

EXPOSE 80 443 22

ADD network /etc/config/network

USER root
CMD ["/sbin/init"]

network:

config interface 'loopback'
	option ifname 'lo'
	option proto 'static'
	option ipaddr '127.0.0.1'
	option netmask '255.0.0.0'

config globals 'globals'
	option ula_prefix 'fd86:34c8:f9e4::/48'

config interface 'lan'
	option type 'bridge'
	option ifname 'eth0'
	option proto 'static'
	option ipaddr '172.17.0.2'
	option netmask '255.255.0.0'
	option ip6assign '60'
	option gateway '172.17.0.1'


docker build -t openwrt-18.06.1-x86-64-generic-rootfs:latest .
docker run -d --name openwrt --device /dev/kmsg --tmpfs /tmp --cap-add NET_ADMIN openwrt-18.06.1-x86-64-generic-rootfs:latest
docker exec -it openwrt /bin/ash


docker exec -it openwrt `docker network inspect bridge | jq -r 'map(.Containers[]|select(.Name=="openwrt").IPv4Address) []'|awk -F/ '{printf("uci set network.lan.ipaddr='%s'\n",$1)}'`
docker exec -it openwrt uci commit
docker exec -it openwrt /etc/init.d/network restart

雑多なメモ

OpenWrt Head で IPv4 only の環境で docker 配下で動かすとなぜか wget が IPv6 でバインドしようとして 'Failed to establish connection'

ネットワークの設定も間違いがないのがだ、IPv6 で bind しにいく。もちろん wget -4 では正常。uclient-fetch が wget の正体。

強引な解決法

mv /bin/wget /bin/wget.orig
cat <<EOF > /bin/wget
#/bin/ash
/bin/wget.orig \$*
EOF
chmod +x /bin/wget