init-per.sh 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. #!/bin/bash
  2. if [ "$1" = "xxx" ]; then
  3. echo "请填写站名简称和编号"
  4. # 在这里可以添加其他需要执行的命令
  5. exit 1 # 结束执行
  6. fi
  7. # 项目名称
  8. proj=$1
  9. # 透传编号
  10. port=$2
  11. # 判断内网穿透服务
  12. create_frpc=false
  13. if ! sudo docker ps -q -f name="frpc" | grep -q .; then
  14. create_frpc=true
  15. else
  16. read -p "frpc容器已经存在,是否删除? (y/n): " confirm_frpc
  17. # 判断用户的回答
  18. if [ "$confirm_frpc" == "y" ] || [ "$confirm_frpc" == "Y" ]; then
  19. sudo docker rm -f frpc
  20. create_frpc=true
  21. fi
  22. fi
  23. # 1. 视频NRV录像机穿透
  24. # 2. VPN穿透
  25. # 3. SSH穿透,仅供阿里云内网使用
  26. if $create_frpc; then
  27. if [ ! -e "frpc.ini" ]; then
  28. cat <<EOF > frpc.ini
  29. [common]
  30. server_addr = 120.27.243.131
  31. server_port = 7000
  32. [nvr-$proj]
  33. type = tcp
  34. local_ip = 192.168.3.200
  35. local_port = 554
  36. remote_port = 1190$port
  37. [vpn-$proj]
  38. type = udp
  39. local_ip = 0.0.0.0
  40. local_port = 1010$port
  41. remote_port = 1010$port
  42. [ssh-$proj]
  43. type = tcp
  44. local_ip = 0.0.0.0
  45. local_port = 22
  46. remote_port = 2200$port
  47. [ptr-$proj]
  48. type = tcp
  49. local_ip = 0.0.0.0
  50. local_port = 9001
  51. remote_port = 2900$port
  52. [node-$proj]
  53. type = tcp
  54. local_ip = 0.0.0.0
  55. local_port = 9100
  56. remote_port = 2300$port
  57. EOF
  58. fi
  59. cat <<EOF > Dockerfile
  60. FROM snowdreamtech/frpc:0.50.0
  61. COPY frpc.ini /etc/frp/frpc.ini
  62. EOF
  63. sudo docker build -t frpc .
  64. rm -rf frpc.ini Dockerfile
  65. sudo docker run --name frpc --restart always --network host -d frpc
  66. fi
  67. # VPN搭建
  68. # 判断内网穿透服务
  69. create_vpn=false
  70. if ! sudo docker ps -q -f name="vpn" | grep -q .; then
  71. create_vpn=true
  72. else
  73. read -p "VPN容器已经存在,是否删除? (y/n): " confirm_vpn
  74. # 判断用户的回答
  75. if [ "$confirm_vpn" == "y" ] || [ "$confirm_vpn" == "Y" ]; then
  76. sudo docker rm -f vpn
  77. sudo docker volume rm openvpn
  78. create_vpn=true
  79. fi
  80. fi
  81. if $create_vpn; then
  82. sudo docker volume create --name openvpn
  83. if ! grep -q "net.ipv6.conf.default.forwarding=1" /etc/sysctl.conf; then
  84. sudo echo net.ipv6.conf.default.forwarding=1 >> /etc/sysctl.conf
  85. sudo echo net.ipv6.conf.all.forwarding=1 >> /etc/sysctl.conf
  86. sudo sysctl -p
  87. fi
  88. ip -o link show | awk -F': ' '{print $2}' | while read interface; do
  89. # 处理192.168.3网段的网卡
  90. mac=$(ip link show dev "$interface" | awk '/link\/ether/ {print $2}')
  91. ip=$(ip addr show dev "$interface" | awk '/inet 192.168.3/ {print $2}')
  92. if [ -n "$ip" ] && [ -n "$mac" ]; then
  93. subnet=$(echo "$ip" | awk -F'/' '{print $1}' | awk -F'.' '{print $1"."$2"."$3}')
  94. echo "网卡名称: $interface,MAC地址: $mac,IP地址: $(echo $ip | cut -d '/' -f 1), subnet: $subnet"
  95. sudo docker run -v openvpn:/etc/openvpn --privileged --rm jaikuai/openvpn-tap ovpn_genconfig -u udp://120.27.243.131:1010$port \
  96. -t -B -D -d -b \
  97. --bridge-name 'br0' \
  98. --bridge-eth-if $interface \
  99. --bridge-eth-ip $(echo $ip | cut -d '/' -f 1) \
  100. --bridge-eth-subnet '255.255.255.0' \
  101. --bridge-eth-broadcast "$subnet.255" \
  102. --bridge-eth-mac $mac \
  103. --bridge-eth-gateway "$subnet.1" \
  104. --bridge-dhcp-start "$subnet.180" \
  105. --bridge-dhcp-end "$subnet.189"
  106. if ip route | grep "default via $subnet.1 dev br0"; then
  107. # 如果存在,则删除路由
  108. sudo ip route del default via $subnet.1 dev br0
  109. echo "已删除指定路由."
  110. else
  111. echo "指定路由不存在."
  112. fi
  113. sudo sed -i "s/192.168.255.0/$subnet.0/g" /var/lib/docker/volumes/openvpn/_data/openvpn.conf
  114. fi
  115. done
  116. # 密码: qx123456
  117. sudo docker run -v openvpn:/etc/openvpn --rm -it jaikuai/openvpn-tap ovpn_initpki
  118. sudo docker run -v openvpn:/etc/openvpn --privileged --network host --cap-add=NET_ADMIN --restart=always --name vpn -d jaikuai/openvpn-tap
  119. # 单网卡补充默认路由
  120. # sudo ip route add default via 192.168.0.1
  121. cat <<EOF > vpn-user.sh
  122. #!/bin/sh
  123. user=\$1
  124. array=(\${user//,/ })
  125. for item in \${array[@]}
  126. do
  127. sudo docker run -v openvpn:/etc/openvpn --rm -it jaikuai/openvpn-tap easyrsa build-client-full \$item-$proj nopass
  128. sudo docker run -v openvpn:/etc/openvpn --log-driver=none --rm jaikuai/openvpn-tap ovpn_getclient \$item-$proj > \$item-$proj.ovpn
  129. done
  130. EOF
  131. sudo chmod a+x vpn-user.sh
  132. echo "# 执行 ./vpn-user.sh 即可生成客户端配置文件."
  133. echo "# bash vpn-user.sh hzw,jxt"
  134. fi