mirror of
https://github.com/luscis/openlan.git
synced 2025-10-09 10:30:17 +08:00
docker: compose support
This commit is contained in:
12
Makefile
12
Makefile
@@ -38,8 +38,15 @@ bin: linux windows darwin ## build all platform binary
|
|||||||
## docker run --network host --privileged \
|
## docker run --network host --privileged \
|
||||||
## -v /var/run:/var/run -v /etc/openlan/switch:/etc/openlan/switch \
|
## -v /var/run:/var/run -v /etc/openlan/switch:/etc/openlan/switch \
|
||||||
## openlan-switch:5.8.13
|
## openlan-switch:5.8.13
|
||||||
docker: pkg
|
docker: docker-switch docker-confd
|
||||||
docker build -t openlan-switch:$(VER) --build-arg BIN=$(LINUX_DIR).bin -f ./dist/openlan-switch.docker .
|
|
||||||
|
docker-switch: pkg
|
||||||
|
cp $(SD)/docker/openlan-switch.docker $(BD)
|
||||||
|
cd $(BD) && docker build -t openlan-switch:$(VER) --build-arg BIN=$(LINUX_DIR).bin -f openlan-switch.docker .
|
||||||
|
|
||||||
|
docker-confd: pkg
|
||||||
|
cp $(SD)/docker/openlan-confd.docker $(BD)
|
||||||
|
cd $(BD) && docker build -t openlan-confd:$(VER) --build-arg BIN=$(LINUX_DIR).bin -f openlan-confd.docker .
|
||||||
|
|
||||||
clean: ## clean cache
|
clean: ## clean cache
|
||||||
rm -rvf ./build
|
rm -rvf ./build
|
||||||
@@ -131,6 +138,7 @@ install: env linux ## install packages
|
|||||||
@mkdir -p $(LINUX_DIR)/var/openlan/point
|
@mkdir -p $(LINUX_DIR)/var/openlan/point
|
||||||
@mkdir -p $(LINUX_DIR)/var/openlan/openvpn
|
@mkdir -p $(LINUX_DIR)/var/openlan/openvpn
|
||||||
@mkdir -p $(LINUX_DIR)/var/openlan/dhcp
|
@mkdir -p $(LINUX_DIR)/var/openlan/dhcp
|
||||||
|
@mkdir -p $(LINUX_DIR)/var/openlan/confd
|
||||||
@mkdir -p $(LINUX_DIR)/etc/sysconfig/openlan
|
@mkdir -p $(LINUX_DIR)/etc/sysconfig/openlan
|
||||||
@cp -rf $(SD)/dist/resource/point.cfg $(LINUX_DIR)/etc/sysconfig/openlan
|
@cp -rf $(SD)/dist/resource/point.cfg $(LINUX_DIR)/etc/sysconfig/openlan
|
||||||
@cp -rf $(SD)/dist/resource/proxy.cfg $(LINUX_DIR)/etc/sysconfig/openlan
|
@cp -rf $(SD)/dist/resource/proxy.cfg $(LINUX_DIR)/etc/sysconfig/openlan
|
||||||
|
18
README.md
18
README.md
@@ -9,20 +9,20 @@
|
|||||||
[](https://github.com/luscis/openlan/releases)
|
[](https://github.com/luscis/openlan/releases)
|
||||||
[](LICENSE)
|
[](LICENSE)
|
||||||
|
|
||||||
# 什么是OpenLAN?
|
## 什么是OpenLAN?
|
||||||
|
|
||||||
OpenLAN提供一种局域网数据报文在广域网的传输实现,并能够建立多个用户空间的虚拟以太网络。
|
OpenLAN提供一种局域网数据报文在广域网的传输实现,并能够建立多个用户空间的虚拟以太网络。
|
||||||
|
|
||||||
## 为什么是OpenLAN?
|
## 为什么是OpenLAN?
|
||||||
|
|
||||||
如果你有更加灵活的VPN业务需求,需要使用VPN访问企业内部,或者借用公网云主机等进行网络代理、网络穿透等,可以试试OpenLAN,可以做的更简单。
|
如果你有更加灵活的VPN业务需求,需要使用VPN访问企业内部,或者借用公网云主机等进行网络代理、网络穿透等,可以试试OpenLAN,它能让部署变得更简单。
|
||||||
|
|
||||||
## OpenLAN支持什么功能?
|
## OpenLAN有什么功能?
|
||||||
|
|
||||||
* 用户可以使用OpenLAN划分多个网络空间,为不同的业务提供逻辑网络隔离;
|
* 用户可以使用OpenLAN划分多个网络空间,为不同的业务提供逻辑网络隔离;
|
||||||
* 多个OpenLAN Switch之间可以使用OpenLAN协议在二层上互联互通,在二层网络上可以添加SNAT路由轻松的访问企业内部网络;
|
* 多个OpenLAN Switch之间可以使用OpenLAN协议在二层上互联互通,在二层网络上可以添加SNAT路由轻松的访问企业内部网络;
|
||||||
* 用户可以使用OpenVPN接入OpenLAN网络,OpenVPN支持多平台如Android/MacOS/Windows等;
|
* 用户可以使用OpenVPN接入OpenLAN网络,OpenVPN支持多平台如Android/MacOS/Windows等;
|
||||||
* 多个OpenLAN Switch之间也可以使用PSec隧道网络,并且支持在该网络上进一步划分VxLAN/STT的租户网络;
|
* 多个OpenLAN Switch之间也可以使用IPSec隧道网络,并且支持在该网络上进一步划分VxLAN/STT的租户网络;
|
||||||
* 使用简单的用户名密码的作为接入认证方式,并且可以设置预共享密钥对数据报文进行加密;
|
* 使用简单的用户名密码的作为接入认证方式,并且可以设置预共享密钥对数据报文进行加密;
|
||||||
* OpenLAN协议可以工作在TCP/TLS/UDP/KCP/WS/WSS等多种传输协议上,TCP具有较高的性能,TLS/WSS能够提供更好的加密安全;
|
* OpenLAN协议可以工作在TCP/TLS/UDP/KCP/WS/WSS等多种传输协议上,TCP具有较高的性能,TLS/WSS能够提供更好的加密安全;
|
||||||
* OpenLAN也提供了简单的HTTP/HTTPS/SOCKS5等HTTP的正向代理技术,用户可以根据需要灵活配置代理进行网络穿透;
|
* OpenLAN也提供了简单的HTTP/HTTPS/SOCKS5等HTTP的正向代理技术,用户可以根据需要灵活配置代理进行网络穿透;
|
||||||
@@ -31,7 +31,7 @@ OpenLAN提供一种局域网数据报文在广域网的传输实现,并能够
|
|||||||
## OpenLAN的工作场景?
|
## OpenLAN的工作场景?
|
||||||
### 分支中心接入
|
### 分支中心接入
|
||||||
|
|
||||||
OLSW(企业中心) - 10.16.1.10/24
|
OpenLan Switch(企业中心) - 10.16.1.10/24
|
||||||
^
|
^
|
||||||
|
|
|
|
||||||
Wifi(DNAT)
|
Wifi(DNAT)
|
||||||
@@ -42,7 +42,7 @@ OpenLAN提供一种局域网数据报文在广域网的传输实现,并能够
|
|||||||
| | |
|
| | |
|
||||||
分支1 分支2 分支3
|
分支1 分支2 分支3
|
||||||
| | |
|
| | |
|
||||||
OLAP OLAP OLAP
|
OpenLAN OpenLAN OpenLAN
|
||||||
10.16.1.11/24 10.16.1.12/24 10.16.1.13/24
|
10.16.1.11/24 10.16.1.12/24 10.16.1.13/24
|
||||||
|
|
||||||
|
|
||||||
@@ -50,13 +50,13 @@ OpenLAN提供一种局域网数据报文在广域网的传输实现,并能够
|
|||||||
|
|
||||||
192.168.1.20/24 192.168.1.21/24
|
192.168.1.20/24 192.168.1.21/24
|
||||||
| |
|
| |
|
||||||
OLAP -- 酒店 Wifi --> OLSW(南京) <--- 其他 Wifi --- OLAP
|
OpenLAN -- 酒店 Wifi --> OpenLAN Switch(南京) <--- 其他 Wifi --- OpenLAN
|
||||||
|
|
|
|
||||||
|
|
|
|
||||||
互联网
|
互联网
|
||||||
|
|
|
|
||||||
|
|
|
|
||||||
OLSW(上海) - 192.168.1.10/24
|
OpenLAN Switch(上海) - 192.168.1.10/24
|
||||||
|
|
|
|
||||||
|
|
|
|
||||||
------------------------------------------------------
|
------------------------------------------------------
|
||||||
@@ -64,7 +64,7 @@ OpenLAN提供一种局域网数据报文在广域网的传输实现,并能够
|
|||||||
| | |
|
| | |
|
||||||
办公 Wifi 家庭 Wifi 酒店 Wifi
|
办公 Wifi 家庭 Wifi 酒店 Wifi
|
||||||
| | |
|
| | |
|
||||||
OLAP OLAP OLAP
|
OpenLAN OpenLAN OpenLAN
|
||||||
192.168.1.11/24 192.168.1.12/24 192.168.1.13/24
|
192.168.1.11/24 192.168.1.12/24 192.168.1.13/24
|
||||||
|
|
||||||
### 数据中心全互联网络
|
### 数据中心全互联网络
|
||||||
|
@@ -6,7 +6,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
ConfSockFile = "unix:/var/openlan/confd.sock"
|
ConfSockFile = "unix:/var/openlan/confd/confd.sock"
|
||||||
ConfDatabase = "OpenLAN_Switch"
|
ConfDatabase = "OpenLAN_Switch"
|
||||||
AdminTokenFile = "/etc/openlan/switch/token"
|
AdminTokenFile = "/etc/openlan/switch/token"
|
||||||
)
|
)
|
||||||
|
6
dist/openlan.spec.in
vendored
6
dist/openlan.spec.in
vendored
@@ -39,10 +39,10 @@ make install LINUX_DIR=%{buildroot}
|
|||||||
[ -e "/etc/openlan/switch/confd.db" ] || {
|
[ -e "/etc/openlan/switch/confd.db" ] || {
|
||||||
/usr/bin/ovsdb-tool create /etc/openlan/switch/confd.db /etc/openlan/switch/confd.schema.json
|
/usr/bin/ovsdb-tool create /etc/openlan/switch/confd.db /etc/openlan/switch/confd.schema.json
|
||||||
}
|
}
|
||||||
[ -e "/var/openlan/confd.sock" ] && {
|
[ ! -e "/var/openlan/confd/confd.sock" ] || {
|
||||||
/usr/bin/ovsdb-client convert unix:///var/openlan/confd.sock /etc/openlan/switch/confd.schema.json
|
/usr/bin/ovsdb-client convert unix:///var/openlan/confd/confd.sock /etc/openlan/switch/confd.schema.json
|
||||||
}
|
}
|
||||||
[ -e "/etc/sysctl.d/90-openlan.conf" ] && {
|
[ ! -e "/etc/sysctl.d/90-openlan.conf" ] || {
|
||||||
/usr/sbin/sysctl -p /etc/sysctl.d/90-openlan.conf || :
|
/usr/sbin/sysctl -p /etc/sysctl.d/90-openlan.conf || :
|
||||||
}
|
}
|
||||||
[ -e "/etc/openlan/switch/network/ipsec.json" ] || {
|
[ -e "/etc/openlan/switch/network/ipsec.json" ] || {
|
||||||
|
4
dist/resource/openlan-confd.service
vendored
4
dist/resource/openlan-confd.service
vendored
@@ -5,11 +5,11 @@ Before=network.target network.service
|
|||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=forking
|
Type=forking
|
||||||
PIDFile=/var/openlan/confd.pid
|
PIDFile=/var/openlan/confd/confd.pid
|
||||||
Restart=on-failure
|
Restart=on-failure
|
||||||
EnvironmentFile=-/etc/sysconfig/openlan/confd
|
EnvironmentFile=-/etc/sysconfig/openlan/confd
|
||||||
|
|
||||||
ExecStart=/var/openlan/script/confd start
|
ExecStart=/var/openlan/script/confd start --detach
|
||||||
ExecStop=/var/openlan/script/confd stop
|
ExecStop=/var/openlan/script/confd stop
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
|
17
dist/script/confd
vendored
17
dist/script/confd
vendored
@@ -2,13 +2,16 @@
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
command=$1
|
command=$1; shift
|
||||||
|
options=$@;
|
||||||
|
|
||||||
|
dir=$(dirname $0)
|
||||||
|
|
||||||
OVSDB_SERVER_BIN="/usr/bin/env ovsdb-server"
|
OVSDB_SERVER_BIN="/usr/bin/env ovsdb-server"
|
||||||
[ "$OVSDB_DATABASE" == "" ] && OVSDB_DATABASE="/etc/openlan/switch/confd.db"
|
[ "$OVSDB_DATABASE" == "" ] && OVSDB_DATABASE="/etc/openlan/switch/confd.db"
|
||||||
[ "$OVSDB_LOG_FILE" == "" ] && OVSDB_LOG_FILE="/var/openlan/confd.log"
|
[ "$OVSDB_LOG_FILE" == "" ] && OVSDB_LOG_FILE="/var/openlan/confd/confd.log"
|
||||||
[ "$OVSDB_SOCK" == "" ] && OVSDB_SOCK="/var/openlan/confd.sock"
|
[ "$OVSDB_SOCK" == "" ] && OVSDB_SOCK="/var/openlan/confd/confd.sock"
|
||||||
[ "$OVSDB_PID_FILE" == "" ] && OVSDB_PID_FILE="/var/openlan/confd.pid"
|
[ "$OVSDB_PID_FILE" == "" ] && OVSDB_PID_FILE="/var/openlan/confd/confd.pid"
|
||||||
|
|
||||||
function stop() {
|
function stop() {
|
||||||
[ -e "$OVSDB_PID_FILE" ] && kill "$(cat $OVSDB_PID_FILE)"
|
[ -e "$OVSDB_PID_FILE" ] && kill "$(cat $OVSDB_PID_FILE)"
|
||||||
@@ -21,8 +24,10 @@ function start() {
|
|||||||
set "$@" --log-file="$OVSDB_LOG_FILE"
|
set "$@" --log-file="$OVSDB_LOG_FILE"
|
||||||
set "$@" --pidfile="$OVSDB_PID_FILE"
|
set "$@" --pidfile="$OVSDB_PID_FILE"
|
||||||
[ "$OVSDB_OPTIONS" != "" ] && set "$@" $OVSDB_OPTIONS
|
[ "$OVSDB_OPTIONS" != "" ] && set "$@" $OVSDB_OPTIONS
|
||||||
set "$@" --detach
|
for opt in $options; do
|
||||||
OVS_RUNDIR="/var/openlan" "$@"
|
set "$@" $opt
|
||||||
|
done
|
||||||
|
OVS_RUNDIR="/var/openlan/confd" "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
case $command in
|
case $command in
|
||||||
|
6
dist/script/install.sh
vendored
6
dist/script/install.sh
vendored
@@ -17,7 +17,7 @@ function requires() {
|
|||||||
elif type apt > /dev/null; then
|
elif type apt > /dev/null; then
|
||||||
apt-get install -y net-tools iptables iproute2 openvpn openvswitch-switch dnsmasq
|
apt-get install -y net-tools iptables iproute2 openvpn openvswitch-switch dnsmasq
|
||||||
else
|
else
|
||||||
echo "We didn't find yum and apt."
|
echo "We didn't find any packet tool: yum or apt."
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -45,8 +45,8 @@ function post() {
|
|||||||
[ -e "/etc/openlan/switch/confd.db" ] || {
|
[ -e "/etc/openlan/switch/confd.db" ] || {
|
||||||
/usr/bin/ovsdb-tool create /etc/openlan/switch/confd.db /etc/openlan/switch/confd.schema.json
|
/usr/bin/ovsdb-tool create /etc/openlan/switch/confd.db /etc/openlan/switch/confd.schema.json
|
||||||
}
|
}
|
||||||
[ ! -e "/var/openlan/confd.sock" ] || {
|
[ ! -e "/var/openlan/confd/confd.sock" ] || {
|
||||||
/usr/bin/ovsdb-client convert unix:///var/openlan/confd.sock /etc/openlan/switch/confd.schema.json
|
/usr/bin/ovsdb-client convert unix:///var/openlan/confd/confd.sock /etc/openlan/switch/confd.schema.json
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
1
dist/script/setup.sh
vendored
1
dist/script/setup.sh
vendored
@@ -13,4 +13,3 @@ set -x
|
|||||||
/usr/bin/env find /var/openlan/openvpn -name '*.status' -delete
|
/usr/bin/env find /var/openlan/openvpn -name '*.status' -delete
|
||||||
|
|
||||||
# upgrade database.
|
# upgrade database.
|
||||||
# ovsdb-client convert unix:///var/openlan/confd.sock /etc/openlan/switch/confd.schema.json
|
|
||||||
|
2
dist/script/update.sh
vendored
2
dist/script/update.sh
vendored
@@ -3,7 +3,7 @@
|
|||||||
set -ex
|
set -ex
|
||||||
|
|
||||||
## Upgrade ovsdb
|
## Upgrade ovsdb
|
||||||
# ovsdb-client convert unix:///var/openlan/confd.sock /etc/openlan/switch/confd.schema.json
|
# ovsdb-client convert unix:///var/openlan/confd/confd.sock /etc/openlan/switch/confd.schema.json
|
||||||
|
|
||||||
## Enable check for DDNS
|
## Enable check for DDNS
|
||||||
# [root@centos ~]# crontab -l
|
# [root@centos ~]# crontab -l
|
||||||
|
16
docker/docker-compose.yml
Normal file
16
docker/docker-compose.yml
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
version: "2.3"
|
||||||
|
services:
|
||||||
|
confd:
|
||||||
|
image: "openlan-confd:latest"
|
||||||
|
volumes:
|
||||||
|
- /opt/openlan/confd:/var/openlan/confd
|
||||||
|
switch:
|
||||||
|
image: "openlan-switch:latest"
|
||||||
|
privileged: true
|
||||||
|
ports:
|
||||||
|
- 10000:10000
|
||||||
|
- 10002:10002
|
||||||
|
volumes:
|
||||||
|
- /opt/openlan/confd:/var/openlan/confd
|
||||||
|
depends_on:
|
||||||
|
- confd
|
18
docker/openlan-confd.docker
Executable file
18
docker/openlan-confd.docker
Executable file
@@ -0,0 +1,18 @@
|
|||||||
|
FROM centos:7
|
||||||
|
|
||||||
|
ARG BIN
|
||||||
|
|
||||||
|
WORKDIR /root
|
||||||
|
|
||||||
|
ADD ${BIN} /tmp
|
||||||
|
|
||||||
|
RUN yum install -y epel-release centos-release-openstack-train \
|
||||||
|
&& yum install -y rdma-core libibverbs
|
||||||
|
RUN DOCKER=yes /tmp/${BIN}
|
||||||
|
|
||||||
|
RUN rm -rf /tmp/* && rm -rf /var/cache/yum/*
|
||||||
|
|
||||||
|
LABEL application="OpenLAN Switch Application"
|
||||||
|
LABEL maintainer="danieldin95@163.com"
|
||||||
|
|
||||||
|
CMD ["/var/openlan/script/confd", "start"]
|
@@ -1,11 +1,10 @@
|
|||||||
|
|
||||||
FROM centos:7
|
FROM centos:7
|
||||||
|
|
||||||
ARG BIN
|
ARG BIN
|
||||||
|
|
||||||
WORKDIR /root
|
WORKDIR /root
|
||||||
|
|
||||||
ADD build/${BIN} /tmp
|
ADD ${BIN} /tmp
|
||||||
|
|
||||||
RUN yum install -y epel-release centos-release-openstack-train \
|
RUN yum install -y epel-release centos-release-openstack-train \
|
||||||
&& yum install -y rdma-core libibverbs
|
&& yum install -y rdma-core libibverbs
|
||||||
@@ -19,5 +18,6 @@ LABEL maintainer="danieldin95@163.com"
|
|||||||
EXPOSE 10000/tcp
|
EXPOSE 10000/tcp
|
||||||
EXPOSE 10002/tcp
|
EXPOSE 10002/tcp
|
||||||
EXPOSE 10002/udp
|
EXPOSE 10002/udp
|
||||||
|
EXPOSE 4500/udp
|
||||||
|
|
||||||
CMD ["/usr/bin/openlan-switch", "-conf:dir", "/etc/openlan/switch", "-log:level", "20"]
|
CMD ["/usr/bin/openlan-switch", "-conf:dir", "/etc/openlan/switch", "-log:level", "20"]
|
@@ -52,7 +52,7 @@ openlan软件包含下面部分:
|
|||||||
"bridge": {
|
"bridge": {
|
||||||
"address": "172.32.10.10/24" ## 本地地址
|
"address": "172.32.10.10/24" ## 本地地址
|
||||||
},
|
},
|
||||||
"subnet": { ## example网络的子网配置
|
"subnet": { ## 网络的子网配置,如果没有动态地址分配可以忽略
|
||||||
"start": "172.32.10.100", ## 用于动态分配给point的起始地址
|
"start": "172.32.10.100", ## 用于动态分配给point的起始地址
|
||||||
"end": "172.32.10.150", ## 截止地址
|
"end": "172.32.10.150", ## 截止地址
|
||||||
"netmask": "255.255.255.0" ## 子网掩码
|
"netmask": "255.255.255.0" ## 子网掩码
|
||||||
|
@@ -83,7 +83,7 @@ func (f *FireWall) jumpOLC() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (f *FireWall) Initialize() {
|
func (f *FireWall) Initialize() {
|
||||||
IpInit()
|
IptInit()
|
||||||
// Init chains
|
// Init chains
|
||||||
f.addOLC()
|
f.addOLC()
|
||||||
f.jumpOLC()
|
f.jumpOLC()
|
||||||
|
@@ -240,12 +240,12 @@ func (chains IpChains) Pop(obj IpChain) IpChains {
|
|||||||
|
|
||||||
var __iptablesInit__ = false
|
var __iptablesInit__ = false
|
||||||
|
|
||||||
func IpInit() {
|
func IptInit() {
|
||||||
if __iptablesInit__ {
|
if __iptablesInit__ {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
__iptablesInit__ = true
|
__iptablesInit__ = true
|
||||||
if err := iptables.FirewalldInit(); err != nil {
|
if err := iptables.FirewalldInit(); err != nil {
|
||||||
libol.Error("IpInit %s", err)
|
libol.Info("IptInit %s", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user