mirror of https://github.com/bjdgyc/anylink.git
修复 modprobe 报错
This commit is contained in:
parent
64404ea94b
commit
d3f16eb2ad
|
@ -6,10 +6,13 @@ echo $ver
|
||||||
#docker login -u bjdgyc
|
#docker login -u bjdgyc
|
||||||
|
|
||||||
#docker build -t bjdgyc/anylink .
|
#docker build -t bjdgyc/anylink .
|
||||||
docker build -t bjdgyc/anylink -f docker/Dockerfile .
|
|
||||||
|
docker build -t bjdgyc/anylink --build-arg GitCommitId=$(git rev-parse HEAD) -f docker/Dockerfile .
|
||||||
|
|
||||||
docker tag bjdgyc/anylink:latest bjdgyc/anylink:$ver
|
docker tag bjdgyc/anylink:latest bjdgyc/anylink:$ver
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
|
||||||
docker push bjdgyc/anylink:$ver
|
docker push bjdgyc/anylink:$ver
|
||||||
docker push bjdgyc/anylink:latest
|
docker push bjdgyc/anylink:latest
|
||||||
|
|
||||||
|
|
|
@ -9,37 +9,39 @@
|
||||||
## Donator
|
## Donator
|
||||||
|
|
||||||
> 感谢以下同学的打赏,AnyLink 有你更美好!
|
> 感谢以下同学的打赏,AnyLink 有你更美好!
|
||||||
>
|
>
|
||||||
> 需要展示主页的同学,可以在QQ群 直接联系我添加。
|
> 需要展示主页的同学,可以在QQ群 直接联系我添加。
|
||||||
|
|
||||||
| 昵称 | 主页 |
|
| 昵称 | 主页 / 留言 |
|
||||||
|---------| ---------------------------- |
|
|-----------|------------------------------|
|
||||||
| 代码 oo8 | |
|
| 代码 oo8 | |
|
||||||
| 甘磊 | https://github.com/ganlei333 |
|
| 甘磊 | https://github.com/ganlei333 |
|
||||||
| Oo@ | https://github.com/chooop |
|
| Oo@ | https://github.com/chooop |
|
||||||
| 虚极静笃 | |
|
| 虚极静笃 | |
|
||||||
| 请喝可乐 | |
|
| 请喝可乐 | |
|
||||||
| 加油加油 | |
|
| 加油加油 | |
|
||||||
| 李建 | |
|
| 李建 | |
|
||||||
| lanbin | |
|
| lanbin | |
|
||||||
| 乐在东途 | |
|
| 乐在东途 | |
|
||||||
| 孤鸿 | |
|
| 孤鸿 | |
|
||||||
| 刘国华 | |
|
| 刘国华 | |
|
||||||
| 改名好无聊 | |
|
| 改名好无聊 | |
|
||||||
| 全能互联网专家 | |
|
| 全能互联网专家 | |
|
||||||
| JCM | |
|
| JCM | |
|
||||||
| Eh... | |
|
| Eh... | |
|
||||||
| 沉 | |
|
| 沉 | |
|
||||||
| 刘国华 | |
|
| 刘国华 | |
|
||||||
| 忧郁的豚骨拉面 | |
|
| 忧郁的豚骨拉面 | |
|
||||||
| 张小旋当爹地 | |
|
| 张小旋当爹地 | |
|
||||||
| 对方正在输入 | |
|
| 对方正在输入 | |
|
||||||
| Ronny | |
|
| Ronny | |
|
||||||
| 奔跑的少年 | |
|
| 奔跑的少年 | |
|
||||||
| ZBW | |
|
| ZBW | |
|
||||||
| 悲鸣 | |
|
| 悲鸣 | |
|
||||||
| 谢谢 | |
|
| 谢谢 | |
|
||||||
| 云思科技 | |
|
| 云思科技 | |
|
||||||
|
| 哆啦A伟(张佳伟) | |
|
||||||
|
| nobody | 开源不易,感谢分享 |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,42 +1,48 @@
|
||||||
|
#node:16-bullseye
|
||||||
|
#golang:1.20-bullseye
|
||||||
|
#debian:bullseye-slim
|
||||||
|
|
||||||
# web
|
# web
|
||||||
FROM node:16.17.1-alpine3.15 as builder_node
|
FROM node:16-alpine3.18 as builder_node
|
||||||
WORKDIR /web
|
WORKDIR /web
|
||||||
COPY ./web /web
|
COPY ./web /web
|
||||||
RUN yarn install \
|
RUN yarn install \
|
||||||
&& yarn run build \
|
&& yarn run build \
|
||||||
&& ls /web/ui
|
&& ls /web/ui
|
||||||
|
|
||||||
|
|
||||||
# server
|
# server
|
||||||
FROM golang:1.19-alpine as builder_golang
|
FROM golang:1.20-alpine3.18 as builder_golang
|
||||||
#TODO 本地打包时使用镜像
|
#TODO 本地打包时使用镜像
|
||||||
ENV GOPROXY=https://goproxy.io
|
ENV GOPROXY=https://goproxy.cn
|
||||||
ENV GOOS=linux
|
ENV GOOS=linux
|
||||||
|
ARG GitCommitId="gitCommitId"
|
||||||
|
|
||||||
WORKDIR /anylink
|
WORKDIR /anylink
|
||||||
COPY . /anylink
|
COPY server /anylink
|
||||||
COPY --from=builder_node /web/ui /anylink/server/ui
|
COPY --from=builder_node /web/ui /anylink/ui
|
||||||
|
|
||||||
#TODO 本地打包时使用镜像
|
#TODO 本地打包时使用镜像
|
||||||
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories
|
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories
|
||||||
RUN apk add --no-cache git gcc musl-dev
|
RUN apk add gcc musl-dev
|
||||||
RUN cd /anylink/server;go mod tidy;go build -o anylink -ldflags "-X main.CommitId=$(git rev-parse HEAD)" \
|
RUN cd /anylink;go mod tidy;go build -o anylink -ldflags "-s -w -X main.CommitId=${GitCommitId}" \
|
||||||
&& /anylink/server/anylink tool -v
|
&& /anylink/anylink tool -v
|
||||||
|
|
||||||
|
|
||||||
# anylink
|
# anylink
|
||||||
FROM alpine
|
FROM alpine:3.18
|
||||||
LABEL maintainer="github.com/bjdgyc"
|
LABEL maintainer="github.com/bjdgyc"
|
||||||
|
|
||||||
#ENV IPV4_CIDR="192.168.10.0/24"
|
ENV ANYLINK_IN_CONTAINER=true
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
COPY --from=builder_golang /anylink/server/anylink /app/
|
COPY --from=builder_golang /anylink/anylink /app/
|
||||||
COPY docker/docker_entrypoint.sh /app/
|
COPY docker/docker_entrypoint.sh /app/
|
||||||
|
COPY ./server/bridge-init.sh /app/
|
||||||
#COPY ./server/bridge-init.sh /app/
|
|
||||||
COPY ./server/conf /app/conf
|
COPY ./server/conf /app/conf
|
||||||
COPY ./LICENSE /app/LICENSE
|
COPY ./LICENSE /app/LICENSE
|
||||||
COPY ./home /app/home
|
COPY ./home /app/home
|
||||||
|
|
||||||
|
|
||||||
#TODO 本地打包时使用镜像
|
#TODO 本地打包时使用镜像
|
||||||
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories
|
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories
|
||||||
RUN apk add --no-cache bash iptables \
|
RUN apk add --no-cache bash iptables \
|
||||||
|
|
|
@ -3,5 +3,5 @@ package base
|
||||||
const (
|
const (
|
||||||
APP_NAME = "AnyLink"
|
APP_NAME = "AnyLink"
|
||||||
// app版本号
|
// app版本号
|
||||||
APP_VER = "0.9.4"
|
APP_VER = "0.10.1"
|
||||||
)
|
)
|
||||||
|
|
|
@ -0,0 +1,65 @@
|
||||||
|
package base
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"os/exec"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
procModulesPath = "/proc/modules"
|
||||||
|
inContainerKey = "ANYLINK_IN_CONTAINER"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
inContainer = false
|
||||||
|
modMap = map[string]struct{}{}
|
||||||
|
)
|
||||||
|
|
||||||
|
func initMod() {
|
||||||
|
container := os.Getenv(inContainerKey)
|
||||||
|
if container == "true" {
|
||||||
|
inContainer = true
|
||||||
|
}
|
||||||
|
log.Println("inContainer", inContainer)
|
||||||
|
|
||||||
|
file, err := os.Open(procModulesPath)
|
||||||
|
if err != nil {
|
||||||
|
err = fmt.Errorf("[ERROR] Problem with open file: %s", err)
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
defer file.Close()
|
||||||
|
scanner := bufio.NewScanner(file)
|
||||||
|
scanner.Split(bufio.ScanLines)
|
||||||
|
for scanner.Scan() {
|
||||||
|
splited := strings.Split(scanner.Text(), " ")
|
||||||
|
if len(splited[0]) > 0 {
|
||||||
|
modMap[splited[0]] = struct{}{}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func CheckModOrLoad(mod string) {
|
||||||
|
log.Println("CheckModOrLoad", mod)
|
||||||
|
|
||||||
|
if _, ok := modMap[mod]; ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if inContainer {
|
||||||
|
err := fmt.Errorf("Linux modules %s is not loaded, please run `modprobe %s`", mod, mod)
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
cmdstr := fmt.Sprintln("modprobe", mod)
|
||||||
|
|
||||||
|
cmd := exec.Command("sh", "-c", cmdstr)
|
||||||
|
b, err := cmd.CombinedOutput()
|
||||||
|
if err != nil {
|
||||||
|
log.Println(string(b))
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,6 +4,7 @@ func Start() {
|
||||||
execute()
|
execute()
|
||||||
initCfg()
|
initCfg()
|
||||||
initLog()
|
initLog()
|
||||||
|
initMod()
|
||||||
}
|
}
|
||||||
|
|
||||||
func Test() {
|
func Test() {
|
||||||
|
|
|
@ -22,9 +22,10 @@ func checkTun() {
|
||||||
defer ifce.Close()
|
defer ifce.Close()
|
||||||
|
|
||||||
// 测试ip命令
|
// 测试ip命令
|
||||||
cmdstr0 := fmt.Sprintln("modprobe -i tun")
|
base.CheckModOrLoad("tun")
|
||||||
|
|
||||||
cmdstr1 := fmt.Sprintf("ip link set dev %s up mtu %s multicast off", ifce.Name(), "1399")
|
cmdstr1 := fmt.Sprintf("ip link set dev %s up mtu %s multicast off", ifce.Name(), "1399")
|
||||||
err = execCmd([]string{cmdstr0, cmdstr1})
|
err = execCmd([]string{cmdstr1})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
base.Fatal("testTun err: ", err)
|
base.Fatal("testTun err: ", err)
|
||||||
}
|
}
|
||||||
|
@ -41,12 +42,8 @@ func checkTun() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 修复 rockyos nat 不生效
|
// 修复 rockyos nat 不生效
|
||||||
cmdstr0 := fmt.Sprintln("modprobe -i iptable_filter")
|
base.CheckModOrLoad("iptable_filter")
|
||||||
cmdstr1 := fmt.Sprintf("modprobe -i iptable_nat")
|
base.CheckModOrLoad("iptable_nat")
|
||||||
err = execCmd([]string{cmdstr0, cmdstr1})
|
|
||||||
if err != nil {
|
|
||||||
base.Fatal("testTun err: ", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
natRule := []string{"-s", base.Cfg.Ipv4CIDR, "-o", base.Cfg.Ipv4Master, "-j", "MASQUERADE"}
|
natRule := []string{"-s", base.Cfg.Ipv4CIDR, "-o", base.Cfg.Ipv4Master, "-j", "MASQUERADE"}
|
||||||
forwardRule := []string{"-j", "ACCEPT"}
|
forwardRule := []string{"-j", "ACCEPT"}
|
||||||
|
|
|
@ -33,13 +33,14 @@ func checkMacvtap() {
|
||||||
|
|
||||||
ifName := "anylinkMacvtap"
|
ifName := "anylinkMacvtap"
|
||||||
// 加载 macvtap
|
// 加载 macvtap
|
||||||
cmdstr0 := fmt.Sprintln("modprobe -i macvtap")
|
base.CheckModOrLoad("macvtap")
|
||||||
|
|
||||||
// 开启主网卡混杂模式
|
// 开启主网卡混杂模式
|
||||||
cmdstr1 := fmt.Sprintf("ip link set dev %s promisc on", base.Cfg.Ipv4Master)
|
cmdstr1 := fmt.Sprintf("ip link set dev %s promisc on", base.Cfg.Ipv4Master)
|
||||||
// 测试 macvtap 功能
|
// 测试 macvtap 功能
|
||||||
cmdstr2 := fmt.Sprintf("ip link add link %s name %s type macvtap mode bridge", base.Cfg.Ipv4Master, ifName)
|
cmdstr2 := fmt.Sprintf("ip link add link %s name %s type macvtap mode bridge", base.Cfg.Ipv4Master, ifName)
|
||||||
cmdstr3 := fmt.Sprintf("ip link del %s", ifName)
|
cmdstr3 := fmt.Sprintf("ip link del %s", ifName)
|
||||||
err := execCmd([]string{cmdstr0, cmdstr1, cmdstr2, cmdstr3})
|
err := execCmd([]string{cmdstr1, cmdstr2, cmdstr3})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
base.Fatal(err)
|
base.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue