.

Can's Windows Server Blog

Windows2Windows SSH

Evet 2018 yılı itibariyle windows artık ssh ı destekliyor. Windows içinde bazı kabiliyetler (features) default olarak kurulu gelmiyorlar. Bu nedenle kurulması gerekiyor.

Administrator yetkisi ile POWERSHELL i başlatıyoruz. Bunun ssh bağlantısı kurulacak hemen her makinada yapılması uygun olacaktır.

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
Set-Service sshd -StartupType Automatic
Set-Service ssh-agent -StartupType Automatic
Start-Service sshd
Start-Service ssh-agent
ssh-keygen

Bu komutları ardı ardına girin ve artık SSH servisiniz çalışmaya başlamıştır. Ancak ssh-keygen komutunda enter enter enter diyip hızlıca geçin böylece “c:/user/cb/.ssh ” klasörü oluşur. Daha sonra “New-Item authorized_keys” ile authorized keys dosyasını da oluşturmalıyız.

SSH ile bağlantı önce CMD’ye oluyor powershell e geçmek için powershell komutunu kullanmayı unutmayın.

İlerde istediğimiz public keyi buraya ekleyip bağlantıya şifresiz güvenli olarak izin verebiliriz.

Tabii ssh ın amacına tamamen ters olarak maaaaaaaaaalesef POWERSHELL de console test file editör yok. Yani bir Vi Nano vs yok. Hala notepad kullanmak zorundayız. Birtek Nano server da gelen PSedit var ancak onunda kurulumunu henüz bulamadım.

Kurulan SSH dosyaları ve loglar :
C:\Windows\System32\OpenSSH

Ayrıca ssh-keygen komutundan sonra oluşturulan private ve public keyleri ile daha sonra oluştracağımız authorized_keys dosyası “c:\User\Can\.ssh\” içinde

]]>

Oracle VirtualBox içinde WindowsServer 2016 üzerinde Hyper-V ile VM oluşturmak

Yani VM içinde VM oluşturmak. Zamanında biri sormuştu çok saçma gelmişti şimdi ihtiyacım oldu 🙂

neyse  tabii ki ilk başta mümkün olmadı. Çünkü sanallaştırma ile ilgili kısımlar aslında virtualbox tarafından kullanılıyordu ancak bir şekilde windows VM in buna takılmamasını sağlayan bir yol buldum. (google sağolsun) (Orjinali : https://www.baswijdenes.com/portfolio/hyper-v-in-virtualbox-guide/)

Şimdi önce . Not bir arada copy paste yapmayın. sakin ve sabırlı olun. Linux te de windows tada kıdemli adminlerin hep söylediği birşey vardır. Acele etmeyeceksin!!!

Öncelikle ilgili VM in sistem ayarlarında “VT-x/AMD-V ” in seçili olduğunu mutlaka görün.

Sonra windows VM i başlatın ve 
powershell i admisinstrator olarak açıp aşağıda ki komutları tek tek girin.
Not bir arada copy paste yapmayın. sakin ve sabırlı olun. Linux te de windows tada kıdemli adminlerin hep söylediği birşey vardır. Acele etmeyeceksin!!!

Enable-WindowsOptionalFeature –Online -FeatureName Microsoft-Hyper-V –All -NoRestart
***********************************************
Install-WindowsFeature RSAT-Hyper-V-Tools -IncludeAllSubFeature

***********************************************
Install-WindowsFeature RSAT-Clustering -IncludeAllSubFeature

***********************************************
Install-WindowsFeature Multipath-IORestart-Computer
***********************************************
restart-computer

Sonra yeniden başlattıktan sonra Hyper-V çalışıyor. Hayırlı olsun 🙂

]]>

Virtualbox Does not match UUID

VM sistemi mi çalıştırmak istediğimde şöyle bir hata aldım.

Parent UUID {00000000-0000-0000-0000-000000000000} of the medium 'C:\Users\can\VirtualBox VMs\Winserver2016 Datacenter\Snapshots\{6b423c3e-47a0-4b0e-a054-6059bedd3aa5}.vhd' does not match UUID {8575610c-960f-4c67-9153-44677e79e201} of its parent medium stored in the media registry ('C:\Users\can\.VirtualBox\VirtualBox.xml').

Neyse sinir bozucu bu saçma sorunun giderilmesi aşağıda ki gibiymiş.

PS C:\WINDOWS\system32> cd '..\..\Program Files\Oracle\VirtualBox\'
PS C:\Program Files\Oracle\VirtualBox> .\VBoxManage.exe internalcommands dumphdinfo D:\Centos_VM\Winserver2016_Datacente
r.vhd
--- Dumping VD Disk, Images=1
Dumping VD image "D:\Centos_VM\Winserver2016_Datacenter.vhd" (Backend=VHD)
Header: Geometry PCHS=25700/16/255 LCHS=0/0/0 cbSector=512
Header: uuidCreation={8575610c-960f-4c67-9153-44677e79e201}
Header: uuidParent={00000000-0000-0000-0000-000000000000}

Burada önemli olan uuidCreation değeri.

Sonra Snapshot in değerine bakıyoruz.

PS C:\Program Files\Oracle\VirtualBox> .\VBoxManage.exe internalcommands dumphdinfo "C:\Users\can\VirtualBox VMs\Winserv
er2016 Datacenter\Snapshots\{6b423c3e-47a0-4b0e-a054-6059bedd3aa5}.vhd"
--- Dumping VD Disk, Images=1
Dumping VD image "C:\Users\can\VirtualBox VMs\Winserver2016 Datacenter\Snapshots\{6b423c3e-47a0-4b0e-a054-6059bedd3aa5}.vhd" (Backend=VHD)
Header: Geometry PCHS=25700/16/255 LCHS=0/0/0 cbSector=512
Header: uuidCreation={6b423c3e-47a0-4b0e-a054-6059bedd3aa5}
Header: uuidParent={00000000-0000-0000-0000-000000000000}

İkisini karşılaştırınca snapshot in UUidCreation  değerlerinin kaynağını göstermediğini görüyoruz.

PS C:\Program Files\Oracle\VirtualBox> .\VBoxManage.exe internalcommands sethdparentuuid "C:\Users\can\VirtualBox VMs\Wi
nserver2016 Datacenter\Snapshots\{6b423c3e-47a0-4b0e-a054-6059bedd3aa5}.vhd" "{8575610c-960f-4c67-9153-44677e79e201}"
UUID changed to: 8575610c-960f-4c67-9153-44677e79e201

Bu komutlada hızla düzeltiyoruz.

]]>

Windows Nano Server creation

Server 2016 kurulumundan sonra ISO image veya CD hala takılıyken powershell (PS) e administrator olarak geçip.

Winserver 2016 ISO su takılı iken d: ye geçerek bakıyoruz.
PS C:\Users\Administrator> d:
PS D:> Get-ChildItem
Directory: D:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
d-r--- 9/12/2016 9:52 PM NanoServer
d-r--- 10/13/2016 1:13 PM boot
d-r--- 10/13/2016 1:13 PM efi
d-r--- 1/10/2017 9:08 AM sources
d-r--- 10/13/2016 1:13 PM support
--r--- 5/25/2016 2:52 PM 128 autorun.inf
--r--- 7/15/2016 11:23 PM 386976 bootmgr
--r--- 7/15/2016 8:06 PM 1168736 bootmgr.efi
--r--- 7/15/2016 7:52 PM 80576 setup.exe



Burada gödrüğünüz NanoServer klasörünün içinde ki bazı şeyleri C nin içinde nano diye oluşturduğum klasöre kopyalacağım.

PS D:\NanoServer\NanoServerImageGenerator> Get-ChildItem
    Directory: D:\NanoServer\NanoServerImageGenerator
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-r---        9/12/2016   9:52 PM                en-US
--r---        7/15/2016   7:30 PM         163433 Convert-WindowsImage.ps1
--r---        5/25/2016   2:42 PM            478 NanoServerImageGenerator.psd1
--r---        7/14/2016   2:18 PM         101216 NanoServerImageGenerator.psm1

Buraya Kopyaladım ve şimdi nano serveri oluşturmak için bazı komutları gireceğiz.

PS C:\Users\Administrator> cd C:\nano2\
PS C:\nano2> Get-ChildItem
    Directory: C:\nano2
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-ar---        7/15/2016   7:30 PM         163433 Convert-WindowsImage.ps1
-ar---        5/25/2016   2:42 PM            478 NanoServerImageGenerator.psd1
-ar---        7/14/2016   2:18 PM         101216 NanoServerImageGenerator.psm1

Önce gerekli modulü import ediyoruz ve bu modülün bize getirdiği komutları inceliyoruz.

PS C:\nano2> Import-Module .\NanoServerImageGenerator.psm1
PS C:\nano2> Get-Command -Module NanoServerImageGenerator
CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Function        Edit-NanoServerImage                               0.0        NanoServerImageGenerator
Function        Get-NanoServerPackage                              0.0        NanoServerImageGenerator
Function        New-NanoServerImage                                0.0        NanoServerImageGenerator

Artık nano-serveri oluşturabiliriz.

PS C:\nano2> New-NanoServerImage -Edition standard -MediaPath d:\ -BasePath C:\nano2\ -TargetPath C:\nano2\nano-svr.vhdx
 -DeploymentType Guest -ComputerName Nano-SVR1 -Storage -Package Microsoft-Nanoserver-IIS-Package

bittikten sonra folder içeriği aşağıda ki gibi oluyor

PS C:\nano2> Get-ChildItem
    Directory: C:\nano2
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       12/13/2018   9:43 PM                Logs
d-----       12/13/2018   9:43 PM                Packages
-ar---        7/15/2016   7:30 PM         163433 Convert-WindowsImage.ps1
-a----       12/13/2018   9:50 PM      569376768 nano-svr.vhdx
-ar---        7/16/2016  10:12 AM      172757121 NanoServer.wim
-ar---        5/25/2016   2:42 PM            478 NanoServerImageGenerator.psd1
-ar---        7/14/2016   2:18 PM         101216 NanoServerImageGenerator.psm1
]]>

Windows administration what the ……….. :)

Şirketim windowsa geçmemi istedi. Sonuçta profesyonel bir bilişim şirketi ve marka şovenliği yapmaktansa ihtiyaca yönelik ürünler ile profesyonel çözümler üreten bir şirket. Personel ihtiyacınıda one göre düzenliyor. Linux dünyasına gönül bağı ile bağlanmış olan ben yine de şirketim gelip windowsa geçer misin dediğinde hayır demedim. Çünkü bende verilen ve verilecek sorumluluklardan hiçbir zaman kaçmadım. Kimi zaman amele gibi çalışsamda bu her zaman bana bilgi ve saygınlık olarak geri döndü.

Bu nedenle evet dedim ve Windows Server dünyasını hiç bir deneyimim olmamasına rağmen öğrenmeye başladım. Her IT cinin yaptığı gibi google ve youtube ikilisi ile baya uğraştım ama hintli ingilizcesi ile daha fazla ilerleyemeyeceğime karar verdim. 🙂

Şanslıyım ki yılların deneyimli windows admini bir iş arkadaşım var ve bana baya zaman ayırıyor. Ondan çok şey öğreniyorum üstelik canlı sistemlerde bu böyle.


Şu bir gerçek öğrendikçe Windows dünyasına da ayrı bir saygı duyuyorum.Üstelik giderek artan şekilde CLI kullanmaları beni rahatlatıyor.

Şimdilik yazacak çok birşey yok ama gelecekte eminim bu konuda da çok şey paylaşırım.

]]>

DHCP Protocol ve ilginç özellikleri

Sisteme yeni bağlanan client içinde bazı önceden mevcut olan konfigürasyonlar ile DHCPDISCOVER mesajı gönderiyor. IP si olmadığından ve DHCP serveri bilmediğinden bunu broadcast olarak yapıyor. Server bu discover mesajını alıp inceliyor olması gereken konfigürasyonlar ile DHCPOFFER mesajını gönderiyor. Client OFFER mesajını alıp kabul ederek DHCPREQUEST gönderiyor. Yani bu ayarları bana reserver et kullanacağım diyor. Daha sonra server DHCPACK yani anlaşıldı mesajı gönderiyor böylece o IP o clienta atanmış oluyor ve server bunu başkasına önermiyor. Aynı IP isteği ile gelen başka DHCPDISCOVER mesajlarına başka IP tahsis ediyor. Normal kapanan bilgisayar IPyi kullanmayacağını bildiren DHCPRELEASE emsajını gönderiyor. Anormal kapanmalarda IP timeout olduğu için release oluyor. DHCPNAK mesajını gönderen client başlangıç konumuna dönüp yeniden bağlantı ile yeni IP isteği gönderir. Genel algoritma akışı aşaığıda ki gibidir. Şimdilik biraz ip ucu gibi 2_ DHCP ile gönderilebilecek ayarların listesi 3_ çalışma mantığı şeması 4_ örnek hazırlama linux2linux with wireshark Linkler https://tools.ietf.org/html/rfc2131 — DHCP RFC si http://www.networksorcery.com/enp/rfc/rfc4388.txt — alakalı bir konu http://www.networksorcery.com/enp/rfc/rfc1533.txt — extensions Eski versiyonu 1993 http://www.networksorcery.com/enp/rfc/rfc2132.txt — extensions Son versiyonu 1997 4_ http://www.networksorcery.com/enp/rfc/rfc3203.txt ]]>

TCP Protocol Sayaçları

192.168.0.1 yazıp enter a bastım. Sonrada ip.addr == 192.168.0.1 ile filtreleyerek sadece bu iletişimin görünmesini sağladım. Kullandığım sistem virtualbox ta “NAT” bağlantısı bu nedenle modemin IPsi 192 grubunda iken sistemin IPsi 10 grubunda. ama buna takılmayın. sonuçta aşağıda ki resim ortaya çıktı. Burada incelediğimiz TCP pakette ki sayaçlar SEQ ve ACK numaralarının nasıl oluştuğudur. Wireshark ile diğer pek çok detay görülebilmekte ancak konumuz bunlar değil. SEQ gönderilen paketin sıra numarası ACK bir önce gönderdiğini aldım (SEQ+ Payload) bir sonra beklediğim (Payload+1) Şimdi daha detaylı adım adım inceleyelim. Resimde en sol sütunda paket numaraları ve o numaralara göre adım adım gideceğiz. TCP’de 3-way handshake denilen işlem en önce yapılır. 1nci paket –> istemci(client 10.0.2.15) sunucuya(server 192.168.0.1) e bir istek gönderir. Bu gönderdiği ilk pakettir ve TCP standartlarında tanımlanmış olan SYN bitini set etmiştir. SEQ numarasıda ilk paket olduğu için 0 dır. 2nci paket –> Server client in isteğini alır ve yine TCp standardında belirtildiği gibi SYN ve ACK bitlerini set eder. Kendi gönderdiği ilk paket olduğu için SEQ=0 ancak ilkini aldım bir sonra beklediğim 1 anlamında ACK 1 gönderir. NOT : ilerde göreceğiz SYN biti her zaman 1 payload olarak hesaplanıyor. Yani aslında burada olan Payload+1 gibidir. 3üncü paket –> client server ACK ine ACK ile cevap veriyor. gönderdiği ikinci paket olduğu için SEQ = 1 ve aldığını beklediğini göstermek için ACK 1 gönderiyor. yani ilk paketini aldım bir sonra beklediğim SEQ = 1 Ve böylece Handshake işlemi tamamlanmış oluyor. 4ncü paket –> Client handshake tamamlandığı için yapması gereken HTTP istediğini gönderiyor. şimdi bu noktada resmi incelerseniz üstte (açık yeşil bölümde) 4 nolu paketin seçilmiş olduğu altta ise detaylarını göreceksiniz. Burada önemli olan LEN değeridir. TCP Segment Len= 319 Server a gönderdiği ACK a ACK beklemediğinden paketin SEQ numarası halen 1 dir ve Server a bir önce gönderdiğinden sonra birşey gelmediğinden ACK numarası da halen 1 dir ve değişmemiştir. 5inci paket –> Şimdi server 319 byte lık HTTP/GET istediğini almıştır ve buna ACK gönderecektir. SEQ halen 1 dir çünkü gelen HTTP isteğinde öyle belirtilmiş (ACK 1). Ancak şimdi ACK gönderirken 320 olmuştur. payload+1 –> 319+1 yani diyor ki 319 byte lık paketi aldım bir sonra beklediğim SEQ nosu 320. ACK 320 6ıncı paket –> Ve server hemen ardından HTTP cevabını gönderiyor. SEQ ve ACK numaraları değişmedi çünkü karşıdan birşey gelmedi (server beklemedi gerek olmadığı için) Ayrıca bu pakette ki LEN değeride 225. 7inci paket –> Client ACK gönderir. SEQ 320 ve ACK 226 (225+1). Eh buraya kadar client istedi server gönderdi iş bitti artık iletişimi kapatma zamanı. Bu nedenle 8inci paket –> Server FIN,ACK bitleri set edilmiş paketi gönderir. SEQ 226 ve ACK 320 9uncu paket –> Client da serverın kapatma isteğini alır SEQ 320 ACK 227 gönderir (FIN = payload 1) 10uncu paket –> Server Clientin paketi aldığını ack eder SEQ 227 ACK 321 (FIN = payload 1) Artık başka iletişim olmaz. ]]>

Yazılım düşünmeyi öğrenmek

Aşağıda ki codu ArraySort.nsd olarak notepad ile (veya linux te vi/nano/gedit…) kaydederseniz programa atıp çalıştırabilirsiniz. Basit bir dizi sıralama algoritmasının çalışması. <?xml version="1.0" encoding="UTF-8"?> <root xmlns:nsd="https://structorizer.fisch.lu" version="3.28-09" preRepeat="until " postFor="to" preReturn="return" postForIn="in" preWhile="while " output="OUTPUT" input="INPUT" preFor="for" preExit="exit" preLeave="leave" ignoreCase="true" preForIn="foreach" stepFor="by" author="can" created="2018-10-07" changedby="can" changed="2018-10-07" origin="Structorizer 3.28-09" text="&#34;ArraySort&#34;" comment="&#34;&#34;" color="ffffff" type="program" style="nice"> <children> <instruction text="&#34;dizi &#60;- {2,5,-2,6,-3,8,0,-7,-9,4 }&#34;" comment="&#34;&#34;" color="ffffff" rotated="0" disabled="0"></instruction> <instruction text="&#34;sortedArray &#60;- {0,0,0,0,0,0,0,0,0,0}&#34;" comment="&#34;&#34;" color="ffffff" rotated="0" disabled="0"></instruction> <instruction text="&#34;n1 &#60;- length(dizi)&#34;" comment="&#34;&#34;" color="ffffff" rotated="0" disabled="0"></instruction> <instruction text="&#34;n &#60;- n1-1&#34;" comment="&#34;&#34;" color="ffffff" rotated="0" disabled="0"></instruction> <instruction text="&#34;max &#60;- -999&#34;" comment="&#34;&#34;" color="ffffff" rotated="0" disabled="0"></instruction> <instruction text="&#34;indexHolder &#60;- 0&#34;" comment="&#34;&#34;" color="ffffff" rotated="0" disabled="0"></instruction> <for text="&#34;for k &#60;- 0 to n&#34;" comment="&#34;&#34;" counterVar="k" startValue="0" endValue="n" stepConst="1" style="COUNTER" color="ffffff" disabled="0"> <qFor> <for text="&#34;for i &#60;- 0 to n&#34;" comment="&#34;&#34;" counterVar="i" startValue="0" endValue="n" stepConst="1" style="COUNTER" color="ffffff" disabled="0"> <qFor> <alternative text="&#34;(dizi[i] &#62; max)&#34;" comment="&#34;&#34;" color="ffffff" disabled="0"> <qTrue> <instruction text="&#34;max:= dizi[i]&#34;" comment="&#34;&#34;" color="ffffff" rotated="0" disabled="0"></instruction> <instruction text="&#34;indexHolder := i&#34;" comment="&#34;&#34;" color="ffffff" rotated="0" disabled="0"></instruction> </qTrue> <qFalse color="ffffff"> </qFalse> </alternative> </qFor> </for> <instruction text="&#34;sortedArray[k] :=dizi[indexHolder]&#34;" comment="&#34;&#34;" color="ffffff" rotated="0" disabled="0"></instruction> <instruction text="&#34;dizi[indexHolder] := -999&#34;" comment="&#34;&#34;" color="ffffff" rotated="0" disabled="0"></instruction> <instruction text="&#34;max := -999&#34;" comment="&#34;&#34;" color="ffffff" rotated="0" disabled="0"></instruction> </qFor> </for> <for text="&#34;for j &#60;- 0 to n&#34;" comment="&#34;&#34;" counterVar="j" startValue="0" endValue="n" stepConst="1" style="COUNTER" color="ffffff" disabled="0"> <qFor> <instruction text="&#34;Output sortedArray[j]&#34;" comment="&#34;&#34;" color="ffffff" rotated="0" disabled="0"></instruction> </qFor> </for> </children> </root>  ]]>

Network Subnetting

Subnetler 2 nin katları olarak hesaplanır yani bir subnete ya 8 bilgisayar ya 16 bilgisayar koyabilirsiniz. Bu nedenle 40 bilgisayar ihtiyacı olan yere uyan en küçük subnette 64 adet IP olacaktır. Ancak 64 IP nin ilk ve son IP leri sistemlere verilemez. İlk IP network adı diğeride o networkun broadcast IP sidir. Bu nedenle kullanılabilir IP örneğin 64-2 dir. Bu nedenle 63 sistemlik subnette 128 IP lik bir subnettir. 64 Ip nin olduğu en küçük subnet CIDR notasyonunda /26 olarak gösterilir ve subnetmask ı 255.255.255.192 dir. (sütunlar D ve E) Diğer IP aralıklarıda gösterilmiştir. 10.1.2.0/23 networkünde 512 IP vardır. Tüm bunları deli patrona uygun yerleştirince Böyle oluyor. ]]>

Network Cisco Cheatsheet

Router#show interfaces ethernet 1/3 Ethernet1/3 is up, line protocol is up (connected) . . Kapalıysa administratively down ******************************************************************* Tanımlama en-conf t-int ethernet 1/1 # description wan connection Daha sonra # sh run interface Ethernet1/1 description WAN connection ip address 210.10.10.2 255.255.255.252 duplex auto speed auto ******************************************************************* Temel yapılandırmanın doğrulanması Router#sh ip int bri Interface IP-Address OK? Method Status Protocol FastEthernet0/0 unassigned YES unset administratively down down FastEthernet0/1 unassigned YES unset administratively down down Ethernet1/0 192.168.1.254 YES manual up up Ethernet1/1 210.10.10.2 YES manual up up Ethernet1/2 10.10.10.13 YES manual up up Ethernet1/3 10.10.10.9 YES manual up up Vlan1 unassigned YES unset administratively down down ******************************************************************* Burda arayüzlerin status ve protokollerinin anlamları önemli Status Protocol Olası Hatalar administratively down down İnterface yönetici tarafından kapatılmıştır. down down İnterface açık ama kablo takılı değil yada fiziksel problem var up down Karşı cihaz ile protokol uyumsuzluğu mevcuttur up up Herşey iyi güzel ******************************************************************* ]]>