227 lines
12 KiB
Markdown
227 lines
12 KiB
Markdown
---
|
||
layout : post
|
||
title : "Oracle & ImmortalWrt"
|
||
subtitle : "感觉日子越过越快了"
|
||
date : 2023-08-27 17:41:39
|
||
author : "Manford Fan"
|
||
catalog : false
|
||
header-img : "img/post-bg-universe.jpg"
|
||
tags :
|
||
- Docker
|
||
- OpenWRT
|
||
- Oracle
|
||
- VPS
|
||
---
|
||
|
||
好久没有记录新的内容了,最近几个月,是这几年过得最快乐的时光,虽然有身体上的劳累,有心灵上的疲惫,但是和家人在一起,总是让我非常的安心和快乐。厦门之旅算是已经完满结束了,工作还没有着落,大概还要继续在家躺上一段时间,就当给自己放个长假了。从回来一直在忙房子的事情,这几天总算告一段落,有了空闲的时间,继续探索,继续快乐。
|
||
|
||
打开小白,发现网站无法访问了,尝试登录超爱云,发现他的网站也无法访问了!!!一种不祥的预感涌上心头,不会是,跑路了吧🥲🥲🥲...... 随后联系官方的负责人,其实是一个QQ号,在线,却无响应,持续几天过后,才接受了现实。然后在一个月黑风高的夜晚,我走进了海鲜市场,准备碰碰运气,看能否找到个甲骨文的机器,还不错,真被我找到了。于是又斥巨资(但是比超爱云便宜🥹哭死)买了一个法兰克福的账号,一个1C1G500M的ADM和两个2C12G2G的ARM,其实还可以再开一个AMD的,暂时没有操作。另外就是在从厦门回来之前搭建的OpenWRT,做了旁路由,实现家中其他设备的科学上网,期间也遇到了一些问题,在此一并记录一下。
|
||
|
||
|
||
## 一、甲骨文云
|
||
|
||
甲骨文是一家做数据库的巨头公司。后来亚马逊、微软谷歌等美国巨头公司推出了自己的云计算服务,甲骨文也做了云计算服务。其它巨头推出免费试用一年,甲骨文2019年9月推出永久免费服务。不管他家的服务如何,总之**永久免费**的噱头一经打出,立即引来了不少流量。但是这种永久免费的服务,也引来了很多诟病,因为Oracle会时不时的封禁免费账号,原因不明,堪称玄学典范。因此,除了自己注册账号用来体验,买号基本上就是愿赌服输了,能用多久全看运气。
|
||
|
||

|
||
|
||
### 1. 如何申请
|
||
|
||
申请Oracle Cloud甲骨文云要提前准备条件如下
|
||
|
||
- 一个邮箱,最好是Gmail或hotmail之类的国外常用邮箱
|
||
- 一张卡面有Master、VISA或AMEX之一标志的外币信用卡(单标外币信用卡通过率高一些)
|
||
- 一个手机号,中国的就行
|
||
- 魔法上网环境
|
||
|
||
最后一个可能是非必要的,网络上有人说一定不要用虚假的信息,总之,注册成功与否和是否被封号,都是**玄学**。
|
||
|
||
|
||
### 2. 开启实例
|
||
|
||
进入[https://cloud.oracle.com/compute/instances?region=eu-frankfurt-1](),***eu-frankfurt-1***修改成自己的区域,开始创建实例,可以选择IPv6,实例可以是两个1C1G的AMD,也可以是两个2C12G的ARM或者一个4C24G的ARM,所有机器存储总大小限额200G,AMD的带宽是500Mbps,ARM的带宽是2Gbps。
|
||
|
||

|
||
|
||
### 3. 安全组&防火墙
|
||
|
||
安全组可以按需配置,或者简单粗暴的配置成允许所有访问。一开始配置完安全组之后,并配置好了FRP透传服务,发现还是无法正常访问网站应用,后来GOOGLE了下,需要在系统下对防火墙进行配置:
|
||
|
||
```bash
|
||
#开放所有端口
|
||
sudo iptables -P INPUT ACCEPT
|
||
sudo iptables -P FORWARD ACCEPT
|
||
sudo iptables -P OUTPUT ACCEPT
|
||
sudo iptables -F
|
||
#Oracle自带的Ubuntu镜像默认设置了Iptable规则,关闭它
|
||
apt-get purge netfilter-persistent
|
||
#强制删除
|
||
rm -rf /etc/iptables && reboot
|
||
```
|
||
|
||
## 二、OpenWRT配置
|
||
|
||
很早之前就听说过路由器刷机OpenWRT,实现自由上网,总觉得很莫名其妙,刷个系统就能绕过GFW了吗,这怎么可能呢?直到今年5月份的时候,拿到小白之后,资源配置也充足了,也有时间折腾,详细的看了下相关内容,大概也了解了一些原理,于是自己用Docker搭建了一个OpenWRT,用作[旁路网关](https://mlapp.cn/376.html),给其他相关设备提供必要服务。
|
||
|
||
### 1. 选择镜像
|
||
|
||
这类镜像非常多,这里选择的是[sulinggg/openwrt](https://hub.docker.com/r/sulinggg/openwrt),支持的平台比较全面,功能也够用,网络上资料也偏多一些,出现问题比较容易找到同志解决。昨天去Github上看[sulinggg](https://github.com/SuLingGG)的主页,发现所有Repo都已经归档了,🤕🤕🤕,又去Dockerhub上看了下,还健在,只能说切用且珍惜吧。
|
||
|
||

|
||
|
||
### 2. x86_64版本安装
|
||
|
||
> **1. 拉取镜像:**
|
||
|
||
`docker pull sulinggg/openwrt:x86_64`
|
||
|
||
> **2. macvlan配置**
|
||
|
||
`docker network create -d macvlan --subnet=192.168.10.0/24 --gateway=192.168.10.1 -o parent=enp1s0 net_openwrt`
|
||
|
||
命令中的子网掩码192.168.10.0/24、网关192.168.10.1、网卡名称 enp1s0要根据`ifconfig`de 实际输出更改,其中gateway的值是路由器的IP,一般情况下为主机所在网段的第一个也就是192.168.XXX.1。
|
||
|
||
> **3. 打开网卡混杂模式**
|
||
|
||
`ip link set enp1s0 promisc on`
|
||
|
||
> **4. 创建并启动容器**
|
||
|
||
同样有两种方式启动,网络上资料给出的大多都是命令行直接启动,也可以使用`docker-compose`来启动管理。
|
||
|
||
- 命令行启动
|
||
`docker run -d --restart always --name openwrt --network macnet --privileged sulinggg/openwrt:x86_64 /sbin/init`
|
||
- docker-compose方式
|
||
```
|
||
version: "3"
|
||
|
||
networks:
|
||
net_macvlan:
|
||
driver: macvlan
|
||
name: net_openwrt
|
||
driver_opts:
|
||
parent: enp1s0
|
||
ipam:
|
||
config:
|
||
- subnet: 192.168.10.0/24
|
||
gateway: 192.168.10.1
|
||
|
||
services:
|
||
openwrt:
|
||
image: sulinggg/openwrt:x86_64
|
||
container_name: openwrt
|
||
restart: always
|
||
networks:
|
||
net_macvlan:
|
||
ipv4_address: 192.168.10.123
|
||
volumes:
|
||
- /etc/timezone:/etc/timezone:ro
|
||
- /etc/localtime:/etc/localtime:ro
|
||
- ./local/network:/etc/config/network:ro
|
||
- ./local/inittab:/etc/inittab:ro
|
||
environment:
|
||
- TZ=Asia/Shanghai
|
||
privileged: true
|
||
command: /sbin/init
|
||
```
|
||
|
||
### 3. 修改Docker实例配置
|
||
|
||
Docker镜像启动之后,需要进入其中修改网络等配置,还需要禁止启动登录,如果不禁止,主机一段时间之后就无法登录,必须强制重启,这是非常不方便的。
|
||
|
||
```bash
|
||
# 1. 进入openwrt
|
||
docker exec -it openwrt bash
|
||
# 2.1 编辑网络
|
||
vim /etc/config/network
|
||
# 2.2 替换lan配置为如下
|
||
# config interface 'lan'
|
||
# option type 'bridge'
|
||
# option ifname 'eth0'
|
||
# option proto 'static'
|
||
# option netmask '255.255.255.0'
|
||
# option ip6assign '60'
|
||
# option ipaddr '192.168.10.123'
|
||
# option gateway '192.168.10.1'
|
||
# option dns '8.8.8.8'
|
||
# 3. 重启网络
|
||
/etc/init.d/network restart
|
||
# 4.1 修改启动项
|
||
vim /etc/inittab
|
||
# 4.2 注释如下行
|
||
::sysinit:/etc/init.d/rcS S boot
|
||
::shutdown:/etc/init.d/rcS K shutdown
|
||
#ttyS0::askfirst:/usr/libexec/login.sh
|
||
#hvc0::askfirst:/usr/libexec/login.sh
|
||
#tty1::askfirst:/usr/libexec/login.sh
|
||
# 5. 退出容器,重启容器
|
||
```
|
||
|
||
### 4. Openwrt和宿主机互通问题(外部域名访问)
|
||
|
||
之所以遇到这个问题,是因为想要外部域名访问Openwrt服务,Nginx和Frp都配置好了,内网直接访问没有问题,使用域名访问发现502了,查看Frp服务无异常,Nginx返回的502,说明宿主机和Docker之间没有连通性,于是使用`ping`命令在宿主机上测试Docker,果然无法`ping`通。
|
||
|
||
一般在macvlan模式下同网段的其他机器可以和容器互通,但宿主不能和容器互通,这是在macvlan模式设计的时候为了安全而禁止了宿主机和容器直接通信。如果想要实现互通,有个曲线救国的方法,就是macvlan与macvlan之间可以互通,只需要在宿主机再创建一个macvlan网络,然后修改路由,让数据经过这个macvlan达到互通的目的。
|
||
|
||
以当前实例为例,Docker的IP是***192.168.10.123***,宿主机的IP是***192.168.10.11***,建立一个名为**main2wrt**的macvlan接口,并分配一个当前局域网下未使用的IP--***192.168.10.222***,然后修改路由,让宿主机(192.168.10.11)到容器(192.168.10.123)的数据经过**main2wrt**即可实现双向连通。
|
||
|
||
```bash
|
||
ip link add main2wrt link enp1s0 type macvlan mode bridge
|
||
ip addr add 192.168.10.222 dev main2wrt
|
||
ip link set main2wrt up
|
||
ip route add 192.168.10.123 dev main2wrt
|
||
```
|
||
|
||
这里会出现一个问题,临时手动增加这个一个网络接口是没有问题的,但是重启之后会失效,所以要做一个开机启动脚本来实现,并且需要自动判断局域网内未使用的IP有哪些。
|
||
|
||
```bash
|
||
#!/bin/bash
|
||
|
||
gateway=`ip route | head -n 1 | grep -Eow '([0-9]{1,3}.){3}[0-9]{1,3}'`
|
||
[[ $gateway == '' ]] && exit 9
|
||
|
||
num1=`echo $gateway | awk -F '.' '{print $1}'`
|
||
num2=`echo $gateway | awk -F '.' '{print $2}'`
|
||
num3=`echo $gateway | awk -F '.' '{print $3}'`
|
||
|
||
for num4 in `seq 200 254`; do
|
||
IP=$num1'.'$num2'.'$num3'.'$num4
|
||
ping -c 2 $IP
|
||
[[ $? -ne 0 ]] && break
|
||
done
|
||
|
||
ip link add main2wrt link enp1s0 type macvlan mode bridge
|
||
ip addr add $IP dev main2wrt
|
||
ip link set main2wrt up
|
||
ip route add $IP dev main2wrt
|
||
ip link set main2wrt promisc on
|
||
```
|
||
|
||
> 如果需要外网域名访问,还需要在**系统→web管理**中取消只允许内容访问
|
||
|
||
### 5. 使用方法
|
||
|
||
具体的配置就不过多记录了,用时下流行的字母缩写来说就是**DDDD**。配置好了之后,有两种模式,一种是主路由模式,还有一种是旁路由模式。主路由顾名思义就是家庭网络全部由该路由提供服务,网络上大家戏称***All IN BOOM***;旁路由意思是,用作主路由的一个分支,为家庭中需要自由上网的设备提供服务。个人理解也有两种模式,一种是手动设定网络配置,比如将设备的网关以及DNS设置为OpenWRT的IP,其他设置默认即可,这种方式验证过没有问题;另一种是将多余的NIC口接入网线,另一端连接路由器,此时,通过该路由器上网的设备自动获得科学权限,**此方案未验证过**,应该还需要在Server端配置一下网络。
|
||
|
||
### 6. 其他一些小问题
|
||
|
||
在使用的过程中还遇到一起其他问题,一并记录一下:
|
||
|
||
- 节点导入无法批量
|
||
- 使用`compose`命令停止容器,再启动配置全部丢失
|
||
- 使用bing壁纸作为封面无法登录,只能`conpose`强制重启容器,`restart`只能瞬时有效
|
||
- 使用域名访问的时候,**系统→实时监控/TTYD终端**无法访问,原因是访问的url是***domain:port***的形式(https://openwrt.ephemeral.eu.org:19999/),需要nginx配置端口跟随,也涉及到FRP的相关透传,暂时不准备修正
|
||
|
||
最后附图一张,打完收工~
|
||
|
||

|
||
|
||
## 三、参考文档
|
||
|
||
- [Oracle云免费套餐](https://www.oracle.com/cn/cloud/free/)
|
||
- [关于甲骨文Oracle Cloud新封号方案永久免费二道号贩的影响](https://91ai.net/thread-1011559-1-1.html)
|
||
- [Oracle Cloud甲骨文免费VPS防火墙设置](https://g-suite.cc/772.html)
|
||
- [macvlan网络模式下容器与宿主机互通](https://rehtt.com/index.php/archives/236/)
|
||
- [Docker中OpenWrt旁路由安装教程](http://blog.gavinzh.com/2022/03/28/Docker-OpenWrt-Side-Route-Installation-Tutorial/)
|
||
- [在Docker中运行OpenWrt旁路网关](https://mlapp.cn/376.html)
|
||
|