Skip to content
Snippets Groups Projects
Commit a7ea1c39 authored by alexandr.benzonan's avatar alexandr.benzonan
Browse files

part 2 done (missing doc)

parent 60fdef8c
No related branches found
No related tags found
No related merge requests found
...@@ -34,3 +34,11 @@ cette commande est correcte en l’exécutant sur la topologie. ...@@ -34,3 +34,11 @@ cette commande est correcte en l’exécutant sur la topologie.
# **2 - Routage et adressage** # **2 - Routage et adressage**
Voici le résultat du playbook, la 77a0ae0163commande ping est effectivement exécuté et le paquet est bien envoyé sur le bon chemin (code sur le git)
![Untitled](img/Untitled%204.png)
On peut voir grâce à la commande traceroute que le paquet utilise le bon chemin
![Untitled](img/Untitled%205.png)
\ No newline at end of file
[defaults]
inventory = inventory
remote_user = root
host_key_checking = False
[privilege_escalation]
become = True
become_method = sudo
become_user = root
become_ask_pass = False
ssh R1 hostnamectl set-hostname R1
ssh R2 hostnamectl set-hostname R2
ssh H1 hostnamectl set-hostname H1
ssh H2 hostnamectl set-hostname H2
img/Untitled 4.png

69.1 KiB

img/Untitled 5.png

40 KiB

[routers]
R1 ip="1.0.0.1" ip2="2.0.0.1" gateway="3.0.0.2"
R2 ip="3.0.0.2" ip2="2.0.0.2" gateway="3.0.0.2"
# R[1:2]
[hosts]
H1 ip="1.0.0.3" gateway="1.0.0.1"
H2 ip="3.0.0.3" gateway="3.0.0.2"
# H[1:2]
[all:vars]
netmask="255.255.255.0"
[hosts:vars]
ifname="eth0"
type="host"
[routers:vars]
ifname="eth1"
ifname2="eth0"
type="router"
main.py 0 → 100644
import requests
import jinja2
import json
import sys
import shutil
import subprocess
PROJECTS_URL="https://gns3.hepiapp.ch/v2/projects"
def usage():
print(f"{sys.argv[0]} PROJECT_NAME")
def get_projects_uid():
r = requests.get(PROJECTS_URL)
for p in r.json():
if p["name"] == sys.argv[1]:
print("Project ID: " + p["project_id"])
return p["project_id"]
def get_nodes(project_id):
print(PROJECTS_URL + '/' + str(project_id) + '/nodes')
r = requests.get(PROJECTS_URL + '/' + project_id + '/nodes')
return r.json()
def create_ssh_config(name, console_port, console_host):
template = jinja2.Template("""Host {{ name }}
User root
HostName {{ console_host }}
Port {{ console_port }}
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
IdentityFile ~/.ssh/gns3.rsa
""")
return template.render(name=name, console_port=console_port, console_host=console_host)
def change_hostname(nodes):
cmds = ""
for node in nodes:
if node['console_type'] == "none":
continue
cmds += "ssh "+node["name"] + " hostnamectl set-hostname "+node["name"]+"\n"
f = open("changeHostname.sh", "w")
f.write(cmds)
f.close()
def change_mac(nodes):
cmds = ""
index = 0
for node in nodes:
if node['console_type'] == "none":
continue
if node['name'][0] == 'H':
index += 1
cmds += "ssh " + node["name"] + " ip addr add 192.168.0." + str(index) + "/24 dev eth0\n"
cmds += "ssh "+node["name"]+" ip link set dev eth0 addr 00:00:00:00:00:"+'{:02x}'.format(index)+"\n"
cmds += "ssh "+node["name"]+" ip link set dev eth0 up \n"
cmds += "echo Sleeping 10s for params to be applieds \n"
cmds += "sleep 10 \n"
index = 0
for node in nodes:
if node['console_type'] == "none":
continue
if node['name'][0] == 'H':
index += 1
cmds += "ssh H1 ping -c 1 192.168.0." + str(index) + "\n"
f = open("changeMac.sh", "w")
f.write(cmds)
f.close()
def installTcdump(nodes):
cmds = ""
for node in nodes:
if node['console_type'] == "none":
continue
cmds += "ssh "+node["name"] + " dhclient -v eth0\n"
cmds += "ssh "+node["name"]+" apt install -y tcpdump\n"
f = open("installTcdump.sh", "w")
f.write(cmds)
f.close()
def main():
project_id = get_projects_uid()
nodes = get_nodes(project_id)
sshConfigText = ""
for node in nodes:
if node['console_type'] == "none":
continue
# print(node["name"] + " " + str((node["console"] + 1)) + " " + node["console_host"])
sshConfigText += create_ssh_config(node["name"], node["console"] + 1, node["console_host"])
sshConfigText += "\n"
print(sshConfigText)
#Changer cette ligne pour le chemin de votre fichier de config ssh
f = open("/home/alexandre/.ssh/config.d/sshconfig", "w")
f.write(sshConfigText)
f.close()
change_hostname(nodes)
# installTcdump(nodes)
if __name__ == "__main__":
main()
\ No newline at end of file
- name: Set eth0 static
hosts: all
tasks:
- name: Set iface static
template:
src: static_iface.j2
dest: /etc/network/interfaces.d/ansible.conf
mode: 0644
- name: Restart networking eth0
hosts: all
tasks:
- name: Restart networking eth0
shell: ifdown eth0 && ifup eth0
- name: Restart networking eth1
hosts: routers
tasks:
- name: Restart networking eth1
shell: ifdown eth1 && ifup eth1
- name: Test config by pinging
hosts: H1
tasks:
- name: Ping H2
shell: ping -c 3 3.0.0.3
register: ping_result
- name: Print ping result
debug:
var: ping_result.stdout_lines
iface {{ifname}} inet static
address {{ip}}
netmask {{netmask}}
{% if type == "host" %}
post-up ip route add default via {{gateway}}
{% endif %}
{% if type == "router" %}
iface {{ifname2}} inet static
address {{ip2}}
netmask {{netmask}}
{% if inventory_hostname == "R1" %}
post-up ip route add 3.0.0.0/24 nexthop via 2.0.0.2
{% else %}
post-up ip route add 1.0.0.0/24 nexthop via 2.0.0.1
{% endif %}
{% endif %}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment