# 乌班图版本,请注意目录结构
#!/bin/bash
# 读取用户输入的虚拟网名称,并存储在变量community中
read -p "请输入虚拟网名称:" community
# 读取用户输入的本机IP地址,并存储在变量name中
read -p "请输入本机要使用的ip地址:" name
# 读取用户输入的服务器地址及端口,并存储在变量host中
read -p "请输入服务器地址及端口:" host
# 选择N2N版本
echo "可选版本: 3.0-stable,2.8-stable,2.6-stable,2.4-stable"
read -p "请选择N2N版本:" n2n_version
# 创建n2n启动脚本
echo "sudo /usr/local/sbin/edge -a $name -c $community -l $host" > /usr/sbin/n2n
# 创建停止n2n的脚本
echo "sudo killall -9 edge" > /usr/sbin/noff
# 使脚本文件可执行
chmod +x /usr/sbin/n2n
chmod +x /usr/sbin/noff
echo "拷贝n2n成功!"
# 下载并解压N2N源代码
if [ ! -d "n2n" ]; then
git clone https://github.com/ntop/n2n.git
fi
# 进入n2n源代码目录
cd n2n || { echo "n2n源代码目录不存在,请检查文件结构。"; exit 1; }
# 切换到选择的N2N版本分支
case $n2n_version in
"3.0-stable")
git checkout 3.0-stable
;;
"2.8-stable")
git checkout 2.8-stable
;;
"2.6-stable")
git checkout 2.6-stable
;;
"2.4-stable")
git checkout 2.4-stable
;;
*)
echo "无效的N2N版本选择,请选择3.0-stable,2.8-stable,2.6-stable,2.4-stable。"
exit 1
;;
esac
# 安装必要的依赖
if command -v apt-get >/dev/null; then
sudo apt-get update
sudo apt-get install -y libssl-dev cmake net-tools gcc g++
elif command -v yum >/dev/null; then
sudo yum install -y openssl-devel cmake net-tools gcc gcc-c++
else
echo "未检测到apt-get或yum,请确保您的系统已安装这些包管理器。"
exit 1
fi
# 编译安装n2n
mkdir -p build
cd build || { echo "无法进入build目录,请检查文件结构。"; exit 1; }
cmake ..
make && sudo make install
# 检查edge二进制文件是否存在
if [ ! -f /usr/local/sbin/edge ]; then
echo "edge 二进制文件未找到,请检查编译安装是否成功。"
exit 1
fi
# 创建n2n配置文件
sudo mkdir -p /etc/n2n
sudo tee /etc/n2n/edge.conf > /dev/null <<EOF
# n2n edge configuration file
-a $name
-c $community
-l $host
EOF
echo "n2n配置文件已创建。"
# 运行n2n
/usr/sbin/n2n > /var/log/n2n.log 2>&1 &
echo "n2n安装成功,正在检查连接状态,请等待"
# 等待5秒
sleep 5
# 使用用户输入的服务器地址进行ping测试
if ! ping -Q 2 -c 2 -t 64 $(echo $host | cut -d: -f1); then
echo "`date '+%Y-%m-%d %T'` n2n 连接服务器失败 !"
else
echo "`date '+%Y-%m-%d %T'` n2n 连接服务器成功 !"
fi
# 检查n2n接口是否UP
if ! ifconfig | grep -q "edge0"; then
echo "n2n接口未启动,请检查n2n配置。"
exit 1
fi
# 检查路由表
# 获取用户输入的IP地址的网络部分
network=$(echo $name | cut -d. -f1-3).0/24
if ! ip route | grep -q "$network dev edge0"; then
sudo ip route add $network dev edge0
fi
# 检查防火墙设置
sudo ufw allow $(echo $host | cut -d: -f2)/udp
# 检查n2n的MTU设置
sudo ifconfig edge0 mtu 1400
# 重新启动n2n服务
sudo killall -9 edge
sudo /usr/sbin/n2n &
# 检查网络接口状态
ifconfig edge0
# 检查IP地址分配
if ! ifconfig edge0 | grep -q "$name"; then
echo "n2n接口未分配正确的IP地址,请检查n2n配置。"
exit 1
fi
# 检查ARP表
arp -a
# 检查n2n的社区支持
echo "如果以上方法都无效,可以在n2n的社区或者论坛寻求帮助,提供详细的配置和日志信息。"
# 检查网络拓扑
echo "确保网络拓扑中没有防火墙、路由器或其他设备阻止n2n的流量。"
echo "部署脚本执行完毕。"
# 检查系统日志(限制输出时间)
echo "正在检查系统日志,请等待..."
sudo tail -n 50 /var/log/syslog
目录结构是:
Proxmox VE 版本
# Proxmox VE
#!/bin/bash
# 检查并安装必要的依赖
if ! command -v git >/dev/null; then
echo "安装 git..."
apt-get update
apt-get install -y git
fi
# 读取用户输入的虚拟网名称,并存储在变量community中
read -p "请输入虚拟网名称:" community
# 读取用户输入的本机IP地址,并存储在变量name中
read -p "请输入本机要使用的ip地址:" name
# 读取用户输入的服务器地址及端口,并存储在变量host中
read -p "请输入服务器地址及端口:" host
# 选择N2N版本
echo "可选版本: 3.0-stable,2.8-stable,2.6-stable,2.4-stable"
read -p "请选择N2N版本:" n2n_version
# 创建n2n启动脚本
echo "sudo /usr/local/sbin/edge -a $name -c $community -l $host" > /usr/local/bin/n2n
# 创建停止n2n的脚本
echo "sudo killall -9 edge" > /usr/local/bin/noff
# 使脚本文件可执行
chmod +x /usr/local/bin/n2n
chmod +x /usr/local/bin/noff
echo "拷贝n2n成功!"
# 下载并解压N2N源代码
if [ ! -d "/n2n/n2n" ]; then
rm -rf /n2n/n2n # 删除旧的源代码目录
mkdir -p /n2n
git clone https://github.com/ntop/n2n.git /n2n/n2n
fi
# 进入n2n源代码目录
cd /n2n/n2n || { echo "n2n源代码目录不存在,请检查文件结构。"; exit 1; }
# 切换到选择的N2N版本分支
case $n2n_version in
"3.0-stable")
git checkout 3.0-stable
;;
"2.8-stable")
git checkout 2.8-stable
;;
"2.6-stable")
git checkout 2.6-stable
;;
"2.4-stable")
git checkout 2.4-stable
;;
*)
echo "无效的N2N版本选择,请选择3.0-stable,2.8-stable,2.6-stable,2.4-stable。"
exit 1
;;
esac
# 安装必要的依赖
apt-get update
apt-get install -y libssl-dev cmake net-tools gcc g++ autoconf automake libtool
# 编译n2n
mkdir -p build
cd build || { echo "无法进入build目录,请检查文件结构。"; exit 1; }
cmake ..
make
# 检查edge二进制文件是否编译成功
if [ ! -f /n2n/n2n/build/edge ]; then
echo "edge 二进制文件未找到,请检查编译是否成功。"
exit 1
fi
# 安装edge二进制文件
sudo cp /n2n/n2n/build/edge /usr/local/sbin/
# 检查edge二进制文件是否安装成功
if [ ! -f /usr/local/sbin/edge ]; then
echo "edge 二进制文件未找到,请检查安装路径。"
exit 1
fi
# 创建n2n配置文件
mkdir -p /etc/n2n
cat > /etc/n2n/edge.conf <<EOF
# n2n edge configuration file
-a $name
-c $community
-l $host
EOF
echo "n2n配置文件已创建。"
# 运行n2n
/usr/local/bin/n2n > /var/log/n2n.log 2>&1 &
echo "n2n安装成功,正在检查连接状态,请等待"
# 等待5秒
sleep 5
# 使用用户输入的服务器地址进行ping测试
if ! ping -c 2 -W 2 $(echo $host | cut -d: -f1); then
echo "`date '+%Y-%m-%d %T'` n2n 连接服务器失败 !"
else
echo "`date '+%Y-%m-%d %T'` n2n 连接服务器成功 !"
fi
# 检查n2n接口是否UP
if ! ip link show | grep -q "edge0"; then
echo "n2n接口未启动,请检查n2n配置。"
exit 1
fi
# 检查路由表
network=$(echo $name | cut -d. -f1-3).0/24
if ! ip route | grep -q "$network dev edge0"; then
ip route add $network dev edge0
fi
# 检查防火墙设置
ufw allow $(echo $host | cut -d: -f2)/udp
# 检查n2n的MTU设置
ip link set dev edge0 mtu 1400
# 重新启动n2n服务
killall -9 edge
/usr/local/bin/n2n &
# 检查网络接口状态
ip link show edge0
# 检查IP地址分配
if ! ip addr show edge0 | grep -q "$name"; then
echo "n2n接口未分配正确的IP地址,请检查n2n配置。"
exit 1
fi
# 检查ARP表
arp -a
echo "部署脚本执行完毕。"
# 检查系统日志(限制输出时间)
echo "正在检查系统日志,请等待..."
tail -n 50 /var/log/syslog