[原创] Docker - wvdial 拨号联通4G 搭建代理服务, 出口 IP 随机

52 篇文章 0 订阅
2 篇文章 0 订阅

接上篇, <树莓派使用多个联通4G上网卡> - http://blog.csdn.net/u012731379/article/details/78732774
本篇使用Docker 拨号联通4G, 并且搭建代理服务, 并且出口 IP 随机化. 解决多网卡拨号后需要配置路由表的问题.

在 docker 中共享 device

$ docker run -t -i --device=/dev/ttyUSB0 ubuntu bash

如果设备在容器运行需要驱动, 可以使用privileged模式挂载

$ docker run -t -i --privileged -v /dev/bus/usb:/dev/bus/usb ubuntu bash

开放容器中的端口

$ docker run --expose ubuntu bash
## 主机
# 运行的时候不指定网络模式, 因为主机要访问容器中的服务
docker run -it -d --name test --privileged -v /dev/bus/usb:/dev/bus/usb ubuntu bash
# 进入容器
docker exec -it test bash 
## docker
# 删掉 -net 0.0.0.0 eth0 的路由, 不然拨号之后无法上网
$ route del -net 0.0.0.0 eth0
# 安装必要的服务
$ apt install  net-tools wvdial squid vim
# 不是必要的服务
$ apt install iputils-ping vim
# 配置 wvdial: /etc/wvdial.conf
# 参考上一篇文章 [树莓派使用多个联通4G上网卡] -- http://blog.csdn.net/u012731379/article/details/78732774
# 配置 squid
# 代理访问授权
$ echo "http_access allow all" > /etc/squid/squid.conf.tmp
$ cat /etc/squid/squid.conf >> etc/squid/squid.conf
$ mv /etc/squid/squid.conf.tmp /etc/squid/squid.conf
# 关闭一些 header
$ echo "via off" >> /etc/squid/squid.conf
$ echo "forwarded_for delete" >> /etc/squid/squid.conf
# 等同下面的方式
$ echo "request_header_access Via deny all" >> /dev/squid/squid.conf
$ echo "request_header_access X-Forwarded-For deny all" >> /dev/squid/squid.conf
# 设置超时
$ echo "request_timeout 2 minutes" >> /etc/squid/squid.conf
$ echo "write_timeout 2 minutes" >> /etc/squid/squid.conf
$ echo "read_timeout 2 minutes" >> /etc/squid/squid.conf
# 关闭日志/缓存
$ echo "access_log none" >> /dev/squid/squid.conf
$ echo "cache_store_log none" >> /dev/squid/squid.conf
$ echo "cache_log /dev/null" >> /dev/squid/squid.conf
$ echo "logfile_rotate 0" >>  /dev/squid/squid.conf
# 下面两个配置高版本不兼容, 低版本可以用
$ echo "cache_dir no-store " >> /dev/squid/squid.conf
$ echo "cache_mem 0MB" >> /dev/squid/squid.conf

# 列出在运行的容器
$ docker ps
xxxxxxxxxx ubuntu "/bin/bash" hardcore_montalcini 
# 把运行中的 docker 做的修改, 提交成一个镜像
$ docker commit -m="wvdial 4G image" --author="zhipeng" xxxxxxxxxx zhipeng/wvdial_4G:v1
$ docker images
REPOSITORY TAG IMAGEID CREATE SIZE
ubuntu lastest 6fxxxxxx 2 weeks ago 99MB
zhipeng/wvdial v1 82xxxxx 1 minutes age 240MB
# 使用自定义提交的镜像运行容器
$ docker run -it -d --name test1 -privileged -v /dev/bus/usb:/dev/bus/usb zhipeng/wvdial_4G:v1 bash
# 如果需要在别的机器上运行, 可以直接导出镜像文件
# 导出镜像
$ docker export 82xxxxx > wvdial_4G_v1.image
# 导入镜像文件
$ docker import wvdial_4G_v1.image zhipeng/wvidal:v1
# 或者保存镜像
$ docker save 82xxxxx > wvdial_4G_v1.image
$ docker load wvdial_4G_v1.image

## 主机
# 进入 docker 容器
$ docker exec -it test1 bash
## docker
# 启动 squid
$ service squid start
# 开始拨号
# 这里因为通过自定的镜像, wvdial.conf 是会保留记录的. SG-01是配置中自定义的名字.
$ wvdial SG-01

## 在主机中, 再开启一个 bash 进入容器后
# 配置路由表
$ route del -net 0.0.0.0 eth0
$ route add -net 0.0.0.0 ppp0
# docker 中测试代理是否正常
$ curl -x localhost:3128 ip.haschek.at
114.232.125.11
# 可以看到成功返回联通的 IP
## 主机
# 主机的公网 IP
$ curl ip.haschek.at
60.12.114.48
# 在主机中测试代理服务是否正常
$ curl -x 172.17.0.2:3128 ip.haschek.at
114.232.125.11
# 结果正常

剩下就是在主机上搭建代理环境, 使多个docker 服务可以自动分流, 做到出口 IP 随机.

# squid 配置和容器中配置方式一样
# 配置代理上游节点
$ echo "cache_peer 172.17.0.2 parent 3128 0 no-query round-robin" >> /etc/squid/squid.conf
$ echo "cache_peer 172.17.0.2 parent 3128 0 no-query round-robin" >> /etc/squid/squid.conf
$ echo "never_direct allow all" >> /etc/squid/squid.conf
$ service squid restart
# 测试主机代理环境
$ curl -x 172.17.0.2:3128 ip.haschek.at
114.232.125.11
$ curl -x 172.17.0.2:3128 ip.haschek.at
114.232.125.11
$ curl -x 172.17.0.2:3128 ip.haschek.at 
114.22.55.48
# 可以看到出口 IP 已经做到随机
参考

docker 运行 ubuntu 并共享/dev/ttyUSB0 - http://www.powenko.com/wordpress/?p=9259
Docker实践: 创建本地镜像(commit、Dockerfile) - http://blog.csdn.net/u010246789/article/details/54139168
如何解决docker宿主机无法访问容器中的服务 - https://segmentfault.com/q/1010000008776168
在 docker 之间导出导入镜像 - http://blog.csdn.net/a906998248/article/details/46236687

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
以下是搭建私服镜像中心docker-registry和docker-registry-web的步骤: 1.安装DockerDocker Compose 2.创建一个目录来存储docker-compose.yml文件和证书文件 3.创建docker-compose.yml文件并添加以下内容: ```yaml version: '3' services: registry: restart: always image: registry:2 ports: - 5000:5000 environment: REGISTRY_AUTH: htpasswd REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm REGISTRY_STORAGE_DELETE_ENABLED: "true" REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt REGISTRY_HTTP_TLS_KEY: /certs/domain.key volumes: - ./data:/var/lib/registry - ./auth:/auth - ./certs:/certs registry-web: restart: always image: mkuchin/docker-registry-web:v0.1.2 ports: - 8080:8080 environment: REGISTRY_URL: https://registry:5000 REGISTRY_WEB_TITLE: Docker Registry REGISTRY_AUTH: htpasswd REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt REGISTRY_HTTP_TLS_KEY: /certs/domain.key volumes: - ./auth:/auth - ./certs:/certs ``` 4.创建一个目录来存储证书文件和htpasswd文件 5.生成证书文件 ```shell openssl req -newkey rsa:4096 -nodes -sha256 -keyout domain.key -x509 -days 365 -out domain.crt ``` 6.生成htpasswd文件 ```shell htpasswd -Bc auth/htpasswd <username> ``` 7.启动docker-compose ```shell docker-compose up -d ``` 8.访问https://<your-domain>:8080,输入用户名和密码即可登录docker-registry-web界面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值