Guest User

Untitled

a guest
Sep 11th, 2016
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.67 KB | None | 0 0
  1. #результат работы
  2. *******************
  3. root@ap01:/etc/ansible# ansible-playbook installovpn.yml
  4.  
  5. PLAY [ubuntu] *****************************************************************
  6.  
  7. GATHERING FACTS ***************************************************************
  8. ok: [10.3.0.99]
  9.  
  10. TASK: [installovpn | installing openvpn] **************************************
  11. changed: [10.3.0.99]
  12.  
  13. TASK: [installovpn | change AUTOSTART is all] *********************************
  14. changed: [10.3.0.99]
  15.  
  16. TASK: [installovpn | be sure openvpn is running and enabled] ******************
  17. ok: [10.3.0.99]
  18.  
  19. PLAY [localhost] **************************************************************
  20.  
  21. GATHERING FACTS ***************************************************************
  22. ok: [127.0.0.1]
  23.  
  24. TASK: [run script] ************************************************************
  25. changed: [127.0.0.1 -> 127.0.0.1]
  26.  
  27. PLAY [ubuntu] *****************************************************************
  28.  
  29. GATHERING FACTS ***************************************************************
  30. ok: [10.3.0.99]
  31.  
  32. TASK: [copyconfigovpn | copy config ovpn] *************************************
  33. changed: [10.3.0.99]
  34.  
  35. NOTIFIED: [copyconfigovpn | restart openvpn] **********************************
  36. changed: [10.3.0.99]
  37.  
  38. PLAY RECAP ********************************************************************
  39. 10.3.0.99 : ok=7 changed=4 unreachable=0 failed=0
  40. 127.0.0.1 : ok=2 changed=1 unreachable=0 failed=0
  41.  
  42.  
  43. ******************************
  44. #генерим пару ролей. одна будет устанавливать овпн и делать прочие настройки удаленного хоста, а вторая локально на серваке с ansible заливать на удаленный хост генерированый конфиг опенвпна с именем равным переменной группы
  45.  
  46. root@ap01:/etc/ansible# ansible-galaxy init copyconfigovpn
  47. root@ap01:/etc/ansible# ansible-galaxy init installovpn
  48.  
  49. #пишем плейбук
  50.  
  51. root@ap01:/etc/ansible# cat installovpn.yml
  52. ---
  53. - hosts: ubuntu
  54. sudo: yes
  55. roles:
  56. - installovpn
  57.  
  58. - hosts: localhost
  59. connection: local
  60. tasks:
  61. - name: run script
  62. local_action: shell /etc/ansible/installovpn/files/genclientconfig {{hostvars[groups["ubuntu"][0]].hostname}}
  63.  
  64. - hosts: ubuntu
  65. sudo: yes
  66. roles:
  67. - copyconfigovpn
  68.  
  69. # определяем группы хостов
  70.  
  71. root@ap01:/etc/ansible# cat hosts
  72.  
  73. [ubuntu]
  74. 10.3.0.99
  75.  
  76. [localhost]
  77. 127.0.0.1
  78.  
  79. ***********************
  80. #На сервере с Ansible генерируем ключи для сервера openvpn.
  81. #создаем корневой ключ СА
  82. openssl genrsa -out ca.key 2048
  83. #создаем корневой сертификат
  84. openssl req -x509 -new -key ca.key -days 10000 -out ca.crt
  85. #генерируем ключ
  86. openssl genrsa -out server.key 2048
  87. # запрос на сертификат
  88. openssl req -new -key server.key -out server.csr -subj "/C=RU/ST=IRKregion/L=Irkutsk/O=OpenVPN/OU=Itotdel/CN=example.com/emailAddress="root@example.com""
  89. #Подписываем
  90. openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 5000
  91. ********************************************
  92.  
  93. # пишем скрипт, который на сервере с ansible будет генерить конфиг овпн для клиента
  94.  
  95. root@ap01:/etc/ansible/installovpn/files# cat genclientconfig
  96. #!/bin/bash
  97.  
  98. # $1 target host name
  99.  
  100. cd /etc/ansible/installovpn/files/
  101. touch $1.ovpn
  102.  
  103. echo "client" >> $1.ovpn
  104. echo "nobind" >> $1.ovpn
  105. echo "dev tun" >> $1.ovpn
  106. echo "remote-cert-tls server" >> $1.ovpn
  107. echo "remote 8.8.8.8 88 udp" >> $1.ovpn
  108. echo "<key>" >> $1.ovpn
  109.  
  110. openssl genrsa -out $1.key 2048
  111. openssl req -new -key $1.key -out $1.csr -subj "/C=RU/ST=IRKregion/L=Irkutsk/O=$1/OU=Itotdel/CN=$1/emailAddress="client@example.com""
  112. cat $1.key >> $1.ovpn
  113.  
  114. echo "</key>" >> $1.ovpn
  115. echo "<cert>" >> $1.ovpn
  116. openssl x509 -req -in $1.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out $1.crt -days 365
  117. cat $1.crt >> $1.ovpn
  118. echo "</cert>" >> $1.ovpn
  119.  
  120. echo "<ca>" >> $1.ovpn
  121. cat ca.crt >> $1.ovpn
  122. echo "</ca>" >> $1.ovpn
  123.  
  124. echo "<tls-auth>" >> $1.ovpn
  125. cat tun0.key >> $1.ovpn
  126. echo "</tls-auth>" >> $1.ovpn
  127.  
  128. echo "key-direction 1" >> $1.ovpn
  129. echo "comp-lzo" >> $1.ovpn
  130.  
  131. rm $1.key $1.csr $1.crt
  132.  
  133. *********************
  134. #складываем скрипт и необходимые для его работы сертификаты в /etc/ansible/installovpn/files/
  135.  
  136. root@ap01:/etc/ansible/installovpn/files# ls -la /etc/ansible/installovpn/files
  137. итого 76
  138. drwxr-xr-x 2 root root 4096 сен 11 12:35 .
  139. drwxr-xr-x 9 root root 4096 сен 10 09:33 ..
  140. -rw-r--r-- 1 root root 1428 сен 10 20:13 ca.crt
  141. -rw-r--r-- 1 root root 1679 сен 10 20:11 ca.key
  142. -rw-r--r-- 1 root root 17 сен 11 12:35 ca.srl
  143. -rw-r--r-- 1 root root 1306 сен 10 20:37 client.crt
  144. -rw-r--r-- 1 root root 1054 сен 10 20:37 client.csr
  145. -rw-r--r-- 1 root root 1679 сен 10 20:36 client.key
  146. -rw-r--r-- 1 root root 465 сен 10 20:39 client.ovpn
  147. -rwxr-xr-x 1 root root 894 сен 10 21:49 genclientconfig
  148. -rw-r--r-- 1 root root 1310 сен 10 20:22 server.crt
  149. -rw-r--r-- 1 root root 1058 сен 10 20:21 server.csr
  150. -rw-r--r-- 1 root root 1679 сен 10 20:20 server.key
  151. -rw------- 1 root root 636 сен 10 21:07 tun0.key
  152. -rw-r--r-- 1 root root 5215 сен 11 12:35 ubuntu_client.ovpn
  153. -rw-r--r-- 1 root root 10402 сен 11 12:32 ubuntu.ovpn
  154.  
  155. **************
  156. #создаем групповые переменные, на основании которой скрипт будет называть конфиг клиент и менять subj клиентского сертификата
  157. root@ap01:/etc/ansible/group_vars# cat ubuntu
  158. hostname: ubuntu_client
  159.  
  160. **************
  161. #пишем таски и хендлеры в ролях
  162.  
  163. root@ap01:/etc/ansible/installovpn/tasks# cat /etc/ansible/installovpn/tasks/main.yml
  164. ---
  165. # tasks file for installovpn
  166. - name: installing openvpn
  167. apt: pkg=openvpn
  168.  
  169. - name: change AUTOSTART is all
  170. lineinfile: dest=/etc/default/openvpn regexp='^AUTOSTART="all"' insertafter='^#AUTOSTART="all"' line='AUTOSTART="all"'
  171.  
  172. - name: be sure openvpn is running and enabled
  173. service: name=openvpn state=started enabled=yesroot@ap01:/etc/ansible/installovpn/tasks#
  174.  
  175.  
  176. root@ap01:/etc/ansible/installovpn/tasks# cat /etc/ansible/copyconfigovpn/tasks/main.yml
  177. ---
  178. # tasks file for copyconfigovpn
  179. - name: copy config ovpn
  180. copy: src=/etc/ansible/installovpn/files/{{hostvars[groups["ubuntu"][0]].hostname}}.ovpn dest=/etc/openvpn/{{hostvars[groups["ubuntu"][0]].hostname}}.ovpn owner=root group=root mode=644
  181. notify:
  182. - restart openvpn
  183.  
  184.  
  185. root@ap01:/etc/ansible/installovpn/tasks# cat /etc/ansible/copyconfigovpn/handlers/main.yml
  186. ---
  187. # handlers file for copyconfigovpn
  188. - name: restart openvpn
  189. service: name=openvpn state=restarted
  190.  
  191. *****************
  192. # для подключения по ssh и работы sudo я не стал использовать ключи (я знаю что зря) и в ролях прописал переменные
  193.  
  194. root@ap01:/etc/ansible/installovpn/vars# cat /etc/ansible/installovpn/vars/main.yml
  195. ---
  196. # vars file for installovpn
  197. ansible_connection: ssh
  198. ansible_ssh_user: wolf
  199. ansible_ssh_pass: 123
  200. ansible_sudo_pass: "123"
  201.  
  202. root@ap01:/etc/ansible/installovpn/vars# cat /etc/ansible/copyconfigovpn/vars/main.yml
  203. ---
  204. # vars file for installovpn
  205. ansible_connection: ssh
  206. ansible_ssh_user: wolf
  207. ansible_ssh_pass: 123
  208. ansible_sudo_pass: "123"
Add Comment
Please, Sign In to add comment