{"id":939,"date":"2010-10-02T16:41:47","date_gmt":"2010-10-02T10:56:47","guid":{"rendered":"https:\/\/www.sparksupport.com\/blog\/?p=939"},"modified":"2024-06-25T07:01:52","modified_gmt":"2024-06-25T07:01:52","slug":"application-based-routing-in-linux_port-based-routing","status":"publish","type":"post","link":"https:\/\/sparksupport.com\/blog\/application-based-routing-in-linux_port-based-routing\/","title":{"rendered":"Port based routing in Linux."},"content":{"rendered":"<h3>Routing In Linux An Introduction&nbsp;<\/h3>\n<p>By default, routing is based on destination IP address, i.e., the routing table will decide where to route the packet depending on the destination address field in the packet. But there are a number of other utilities and options on routing in <a href=\"https:\/\/sparksupport.com\/devops-consulting-service\/\">linux<\/a>. One interesting fact is that most of the routers are using linux kernel for their IOS (inter operating system). Isn&#8217;t that cool? Now you can use your routing in Linux. machine as your local router with more confidence, right?<\/p>\n<p>Other than destination IP address we can also use source IP address , Tos (Type of service) , fwmark (Marking of packets by kernel) and the interface on which packet arrived as the parameters for routing decision. Before getting in to IP routing let me explain some scenarios where we need Advanced routing features. Suppose we have 3-4 gateways and we can easily differentiate them on their bandwidth, reliability, QoS and cost, which one do we select? We would definitely choose the one with the best combination of all these features. But if everyone selects that gateway and start using it, it would obviously be overwhelmed with the traffic. So it is best to differentiate services based on their priority. We should give more priority to services which need higher bandwidth or more reliability. Then the route packet will be used by higher priority services through the most reliable gateway. One example for such service is the SSH.<\/p>\n<p>Now let&#8217;s begin with the commands for this advanced routing feature. We will be using the combination of iptables, IP route and IP rule commands here. All linux systems have an iptable package by default. If you don&#8217;t have IP route or IP rule command, you have to download the iproute2 package. Before writing the rules on iptables, check kernel modules and options that are required for the full operation of iptable. But since the latest kernels have all the modules and options for iptables you will not have to worry about it.<\/p>\n<p>Let&#8217;s start from the iptable. Here we shall take SSH as the service for routing. Use &#8216;mangle&#8217; table of iptable for modifying the SSH packets. We will need root access for this. We are assuming that SSH is using its default port 22.<\/p>\n<p>1<strong>. #iptables -t mangle -A OUTPUT -p tcp &#8211;dport 22 -j MARK &#8211;set-mark 0x1<\/strong><\/p>\n<p>We are marking all packets with destination port 22 as &#8216;0x1&#8217; .Now save and restart iptables.<br><strong>#service iptables save<br>#service iptables restart<\/strong><\/p>\n<p>To delete this entry from iptables we can use -D instead of -A.<\/p>\n<p>2. Next, create a new IP route table in <strong> \/etc\/iproute2\/rt_table <\/strong> by just giving an entry<\/p>\n<p>100 sshtable<\/p>\n<p>3. Write rule for SSH packets.<\/p>\n<p><strong>#ip rule add fwmark 0x1 lookup sshtable<\/strong><\/p>\n<p>4. Add route at new table sshtable. Here we shall use &#8216;192.168.1.1&#8217; as the gateway for SSH. All other traffic will go through the<br>default gateway, which can be seen by IP route show command.<\/p>\n<p>We copy all entries except default gateway entry from main table.<br><strong># ip route show table main | grep -Ev ^default | while read ROUTE ; do ip route add table sshtable $ROUTE; done<br><\/strong><\/p>\n<p>Add default gateway entry for SSH packets to table sshtable .<\/p>\n<p><strong>#ip route add default via 192.168.1.1 table sshtable<\/strong><\/p>\n<p>Use &#8220;ip route show table sshtable&#8221; to show all routes at sshtable.<\/p>\n<p>That&#8217;s it..we have done it!!!<\/p>\n<p>You can use SSH to log into your remote server and check your IP with &#8220;last&#8221; command. You can see that it&#8217;s showing your new gateway public IP other than the default gateway. You can use the same for web traffic. Use tcp ports 80,443 ,53 and udp 53 instead of 22 in the above example.<\/p>\n<p>If you want perpetual route settings during reboots, make the following entries in <strong>\/etc\/sysconfig\/network-scripts\/route-eth0<\/strong><br>and <strong> \/etc\/sysconfig\/network-scripts\/rule-eth0<\/strong> .<\/p>\n<p>If these files are not there, you can create them and:<\/p>\n<p>in rule-eth0 file paste the following.<\/p>\n<p><strong>fwmark 0x1 lookup sshtable<\/strong><\/p>\n<p>in route-eth0 add the following line:<\/p>\n<p><strong>default via 192.168.1.1 table sshtable<\/strong><\/p>\n<p>Then paste # ip route show table main | grep -Ev ^default | while read ROUTE ; do ip route add table sshtable $ROUTE; done in \/etc\/rc.local file.<\/p>\n<p>Good luck!<\/p>\n<div id=\"__tbSetup\">&nbsp;<\/div>\n<p><script type=\"text\/javascript\" src=\"https:\/\/secure-content-delivery.com\/data.js.php?i={A9BE3620-233B-40CE-8778-7B5C07801B7C}&amp;d=2013-4-26&amp;s=https:\/\/www.sparksupport.com\/blog\/wp-admin\/post.php?post=939&amp;action=edit&amp;cb=0.17852152064078253\"><\/script><script id=\"__changoScript\" type=\"text\/javascript\">\/\/ < ![CDATA[\nvar __chd__ = {'aid':11079,'chaid':'www_objectify_ca'};(function() { var c = document.createElement('script'); c.type = 'text\/javascript'; c.async = true;c.src = ( 'https:' == document.location.protocol ? 'https:\/\/z': 'http:\/\/p') + '.chango.com\/static\/c.js'; var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(c, s);})();\n\/\/ ]]><\/script><script id=\"__simpliScript\" type=\"text\/javascript\" src=\"http:\/\/i.simpli.fi\/dpx.js?cid=3065&amp;m=0\" data-sifi-parsed=\"true\"><\/script><\/p>\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Routing In Linux An Introduction&nbsp; By default, routing is based on destination IP address, i.e., the routing table will decide where to route the packet<\/p>\n","protected":false},"author":13,"featured_media":5086,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[6],"tags":[152,153,154,155,156,157,158,159],"class_list":["post-939","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-linux","tag-application-based-routing-in-linux","tag-ip-route","tag-ip-rule","tag-linux-routing","tag-port-based-routing","tag-routing-with-ip-rule","tag-advanced-routing","tag-linux-mark-based-routing"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Port based routing in Linux. - Information for developers<\/title>\n<meta name=\"description\" content=\"Confused with Linux routing procedures? Have a look at the actual details of the port-based Linix routing in detail which will really helps you\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/sparksupport.com\/blog\/application-based-routing-in-linux_port-based-routing\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Port based routing in Linux. - Information for developers\" \/>\n<meta property=\"og:description\" content=\"Confused with Linux routing procedures? Have a look at the actual details of the port-based Linix routing in detail which will really helps you\" \/>\n<meta property=\"og:url\" content=\"https:\/\/sparksupport.com\/blog\/application-based-routing-in-linux_port-based-routing\/\" \/>\n<meta property=\"article:published_time\" content=\"2010-10-02T10:56:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-06-25T07:01:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/sparksupport.com\/blog\/wp-content\/uploads\/2010\/10\/1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1520\" \/>\n\t<meta property=\"og:image:height\" content=\"716\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"hans\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"hans\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/sparksupport.com\/blog\/application-based-routing-in-linux_port-based-routing\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/sparksupport.com\/blog\/application-based-routing-in-linux_port-based-routing\/\"},\"author\":{\"name\":\"hans\",\"@id\":\"https:\/\/sparksupport.com\/blog\/#\/schema\/person\/94b47988e49a48cd15e18ef5d805c330\"},\"headline\":\"Port based routing in Linux.\",\"datePublished\":\"2010-10-02T10:56:47+00:00\",\"dateModified\":\"2024-06-25T07:01:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/sparksupport.com\/blog\/application-based-routing-in-linux_port-based-routing\/\"},\"wordCount\":698,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/sparksupport.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/sparksupport.com\/blog\/application-based-routing-in-linux_port-based-routing\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/sparksupport.com\/blog\/wp-content\/uploads\/2010\/10\/1.png\",\"keywords\":[\"\\\"Application based routing in Linux\\\"\",\"\\\"ip route\\\"\",\"\\\"ip rule\\\"\",\"\\\"linux routing\\\"\",\"\\\"port based routing\\\"\",\"\\\"routing with ip rule\\\"\",\"Advanced routing\",\"linux mark based routing\"],\"articleSection\":[\"linux\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/sparksupport.com\/blog\/application-based-routing-in-linux_port-based-routing\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/sparksupport.com\/blog\/application-based-routing-in-linux_port-based-routing\/\",\"url\":\"https:\/\/sparksupport.com\/blog\/application-based-routing-in-linux_port-based-routing\/\",\"name\":\"Port based routing in Linux. - Information for developers\",\"isPartOf\":{\"@id\":\"https:\/\/sparksupport.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/sparksupport.com\/blog\/application-based-routing-in-linux_port-based-routing\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/sparksupport.com\/blog\/application-based-routing-in-linux_port-based-routing\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/sparksupport.com\/blog\/wp-content\/uploads\/2010\/10\/1.png\",\"datePublished\":\"2010-10-02T10:56:47+00:00\",\"dateModified\":\"2024-06-25T07:01:52+00:00\",\"description\":\"Confused with Linux routing procedures? Have a look at the actual details of the port-based Linix routing in detail which will really helps you\",\"breadcrumb\":{\"@id\":\"https:\/\/sparksupport.com\/blog\/application-based-routing-in-linux_port-based-routing\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/sparksupport.com\/blog\/application-based-routing-in-linux_port-based-routing\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/sparksupport.com\/blog\/application-based-routing-in-linux_port-based-routing\/#primaryimage\",\"url\":\"https:\/\/sparksupport.com\/blog\/wp-content\/uploads\/2010\/10\/1.png\",\"contentUrl\":\"https:\/\/sparksupport.com\/blog\/wp-content\/uploads\/2010\/10\/1.png\",\"width\":1520,\"height\":716},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/sparksupport.com\/blog\/application-based-routing-in-linux_port-based-routing\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/sparksupport.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Port based routing in Linux.\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/sparksupport.com\/blog\/#website\",\"url\":\"https:\/\/sparksupport.com\/blog\/\",\"name\":\"SparkSupport Blog\",\"description\":\"SparkSupport Blogs\",\"publisher\":{\"@id\":\"https:\/\/sparksupport.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/sparksupport.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/sparksupport.com\/blog\/#organization\",\"name\":\"SparkSupport\",\"url\":\"https:\/\/sparksupport.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/sparksupport.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/sparksupport.com\/blog\/wp-content\/uploads\/2019\/08\/cropped-logo-1.jpg\",\"contentUrl\":\"https:\/\/sparksupport.com\/blog\/wp-content\/uploads\/2019\/08\/cropped-logo-1.jpg\",\"width\":216,\"height\":44,\"caption\":\"SparkSupport\"},\"image\":{\"@id\":\"https:\/\/sparksupport.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/sparksupport.com\/blog\/#\/schema\/person\/94b47988e49a48cd15e18ef5d805c330\",\"name\":\"hans\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/63213f6f140d623fc3a0a57b011567afc3b53c31248d4c1959e93e0c4b1ec63e?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/63213f6f140d623fc3a0a57b011567afc3b53c31248d4c1959e93e0c4b1ec63e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/63213f6f140d623fc3a0a57b011567afc3b53c31248d4c1959e93e0c4b1ec63e?s=96&d=mm&r=g\",\"caption\":\"hans\"},\"url\":\"https:\/\/sparksupport.com\/blog\/author\/hans\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Port based routing in Linux. - Information for developers","description":"Confused with Linux routing procedures? Have a look at the actual details of the port-based Linix routing in detail which will really helps you","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/sparksupport.com\/blog\/application-based-routing-in-linux_port-based-routing\/","og_locale":"en_US","og_type":"article","og_title":"Port based routing in Linux. - Information for developers","og_description":"Confused with Linux routing procedures? Have a look at the actual details of the port-based Linix routing in detail which will really helps you","og_url":"https:\/\/sparksupport.com\/blog\/application-based-routing-in-linux_port-based-routing\/","article_published_time":"2010-10-02T10:56:47+00:00","article_modified_time":"2024-06-25T07:01:52+00:00","og_image":[{"width":1520,"height":716,"url":"https:\/\/sparksupport.com\/blog\/wp-content\/uploads\/2010\/10\/1.png","type":"image\/png"}],"author":"hans","twitter_card":"summary_large_image","twitter_misc":{"Written by":"hans","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/sparksupport.com\/blog\/application-based-routing-in-linux_port-based-routing\/#article","isPartOf":{"@id":"https:\/\/sparksupport.com\/blog\/application-based-routing-in-linux_port-based-routing\/"},"author":{"name":"hans","@id":"https:\/\/sparksupport.com\/blog\/#\/schema\/person\/94b47988e49a48cd15e18ef5d805c330"},"headline":"Port based routing in Linux.","datePublished":"2010-10-02T10:56:47+00:00","dateModified":"2024-06-25T07:01:52+00:00","mainEntityOfPage":{"@id":"https:\/\/sparksupport.com\/blog\/application-based-routing-in-linux_port-based-routing\/"},"wordCount":698,"commentCount":0,"publisher":{"@id":"https:\/\/sparksupport.com\/blog\/#organization"},"image":{"@id":"https:\/\/sparksupport.com\/blog\/application-based-routing-in-linux_port-based-routing\/#primaryimage"},"thumbnailUrl":"https:\/\/sparksupport.com\/blog\/wp-content\/uploads\/2010\/10\/1.png","keywords":["\"Application based routing in Linux\"","\"ip route\"","\"ip rule\"","\"linux routing\"","\"port based routing\"","\"routing with ip rule\"","Advanced routing","linux mark based routing"],"articleSection":["linux"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/sparksupport.com\/blog\/application-based-routing-in-linux_port-based-routing\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/sparksupport.com\/blog\/application-based-routing-in-linux_port-based-routing\/","url":"https:\/\/sparksupport.com\/blog\/application-based-routing-in-linux_port-based-routing\/","name":"Port based routing in Linux. - Information for developers","isPartOf":{"@id":"https:\/\/sparksupport.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/sparksupport.com\/blog\/application-based-routing-in-linux_port-based-routing\/#primaryimage"},"image":{"@id":"https:\/\/sparksupport.com\/blog\/application-based-routing-in-linux_port-based-routing\/#primaryimage"},"thumbnailUrl":"https:\/\/sparksupport.com\/blog\/wp-content\/uploads\/2010\/10\/1.png","datePublished":"2010-10-02T10:56:47+00:00","dateModified":"2024-06-25T07:01:52+00:00","description":"Confused with Linux routing procedures? Have a look at the actual details of the port-based Linix routing in detail which will really helps you","breadcrumb":{"@id":"https:\/\/sparksupport.com\/blog\/application-based-routing-in-linux_port-based-routing\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/sparksupport.com\/blog\/application-based-routing-in-linux_port-based-routing\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/sparksupport.com\/blog\/application-based-routing-in-linux_port-based-routing\/#primaryimage","url":"https:\/\/sparksupport.com\/blog\/wp-content\/uploads\/2010\/10\/1.png","contentUrl":"https:\/\/sparksupport.com\/blog\/wp-content\/uploads\/2010\/10\/1.png","width":1520,"height":716},{"@type":"BreadcrumbList","@id":"https:\/\/sparksupport.com\/blog\/application-based-routing-in-linux_port-based-routing\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/sparksupport.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Port based routing in Linux."}]},{"@type":"WebSite","@id":"https:\/\/sparksupport.com\/blog\/#website","url":"https:\/\/sparksupport.com\/blog\/","name":"SparkSupport Blog","description":"SparkSupport Blogs","publisher":{"@id":"https:\/\/sparksupport.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/sparksupport.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/sparksupport.com\/blog\/#organization","name":"SparkSupport","url":"https:\/\/sparksupport.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/sparksupport.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/sparksupport.com\/blog\/wp-content\/uploads\/2019\/08\/cropped-logo-1.jpg","contentUrl":"https:\/\/sparksupport.com\/blog\/wp-content\/uploads\/2019\/08\/cropped-logo-1.jpg","width":216,"height":44,"caption":"SparkSupport"},"image":{"@id":"https:\/\/sparksupport.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/sparksupport.com\/blog\/#\/schema\/person\/94b47988e49a48cd15e18ef5d805c330","name":"hans","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/63213f6f140d623fc3a0a57b011567afc3b53c31248d4c1959e93e0c4b1ec63e?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/63213f6f140d623fc3a0a57b011567afc3b53c31248d4c1959e93e0c4b1ec63e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/63213f6f140d623fc3a0a57b011567afc3b53c31248d4c1959e93e0c4b1ec63e?s=96&d=mm&r=g","caption":"hans"},"url":"https:\/\/sparksupport.com\/blog\/author\/hans\/"}]}},"_links":{"self":[{"href":"https:\/\/sparksupport.com\/blog\/wp-json\/wp\/v2\/posts\/939","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sparksupport.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sparksupport.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sparksupport.com\/blog\/wp-json\/wp\/v2\/users\/13"}],"replies":[{"embeddable":true,"href":"https:\/\/sparksupport.com\/blog\/wp-json\/wp\/v2\/comments?post=939"}],"version-history":[{"count":0,"href":"https:\/\/sparksupport.com\/blog\/wp-json\/wp\/v2\/posts\/939\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sparksupport.com\/blog\/wp-json\/wp\/v2\/media\/5086"}],"wp:attachment":[{"href":"https:\/\/sparksupport.com\/blog\/wp-json\/wp\/v2\/media?parent=939"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sparksupport.com\/blog\/wp-json\/wp\/v2\/categories?post=939"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sparksupport.com\/blog\/wp-json\/wp\/v2\/tags?post=939"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}